diff --git a/build.gradle b/build.gradle index 1ca1690f..f68e5510 100644 --- a/build.gradle +++ b/build.gradle @@ -65,6 +65,7 @@ allprojects { maven { url "https://jitpack.io" } maven { url "https://www.cursemaven.com" } maven { url "https://api.modrinth.com/maven/" } + maven { url "https://maven.blamejared.com" } } tasks.withType(JavaCompile) { diff --git a/common/build.gradle b/common/build.gradle index 26b5e534..78625d87 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -17,9 +17,9 @@ dependencies { // compileOnly("curse.maven:backpack-${project.backpack_curseforge_id}:${project.backpack_curseforge_file_id}") // compileOnly("curse.maven:regions_unexplored-${project.regions_unexplored_curseforge_id}:${project.regions_unexplored_curseforge_file_id}") // compileOnly("curse.maven:geckolib-${project.geckolib_curseforge_id}:${project.geckolib_curseforge_file_id}") - compileOnly(files("$rootDir/infinite_dimensions_jars/infinity-2.7.1+1.21.1-neoforge.jar")) - compileOnly(files("$rootDir/infinite_dimensions_jars/infinity-2.7.1+1.21.1-fabric.jar")) - compileOnly(files("$rootDir/infinite_dimensions_jars/infinity-2.7.1+1.21.1-neoforge-sources.jar")) + compileOnly(files("$rootDir/infinite_dimensions_jars/infinity-2.7.2+1.21.1-neoforge.jar")) +// compileOnly(files("$rootDir/infinite_dimensions_jars/infinity-2.7.1+1.21.1-fabric.jar")) +// compileOnly(files("$rootDir/infinite_dimensions_jars/infinity-2.7.1+1.21.1-neoforge-sources.jar")) compileOnly(files("$rootDir/infinite_dimensions_jars/gravity-api-1.0.7-1.20.1.jar")) // compileOnly(files("$rootDir/infinite_dimensions_jars/Cloro's Gravity Gun Mod (Release 1.3.1).jar")) // compileOnly(files("$rootDir/infinite_dimensions_jars/antarchy-1.0.0+1.21.1-neoforge.jar")) @@ -34,6 +34,7 @@ dependencies { // names throughout, so this is the one common can safely compile against. compileOnly(files("$rootDir/sizeable_foliage_jars/sizeable_foliage-neoforge-1.21.1-1.0.0.jar")) compileOnly("software.bernie.geckolib:geckolib-neoforge-${minecraft_version}:${geckolib_version}") + compileOnly("mezz.jei:jei-${minecraft_version}-common-api:${jei_version}") // // compileOnly group: 'org.ow2.asm', name: 'asm-tree', version: '9.4' // implementation group: 'com.google.code.findbugs', name: 'jsr305', version: '3.0.2' diff --git a/common/src/main/java/com/craisinlord/antarchy/compat/infinity/InfinityCompatVersion.java b/common/src/main/java/com/craisinlord/antarchy/compat/infinity/InfinityCompatVersion.java new file mode 100644 index 00000000..00a52abb --- /dev/null +++ b/common/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/src/main/java/com/craisinlord/antarchy/compat/jei/AmericanizeJeiRecipeCategory.java b/common/src/main/java/com/craisinlord/antarchy/compat/jei/AmericanizeJeiRecipeCategory.java new file mode 100644 index 00000000..94efc7fc --- /dev/null +++ b/common/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/src/main/java/com/craisinlord/antarchy/compat/jei/AntarchyJeiPlugin.java b/common/src/main/java/com/craisinlord/antarchy/compat/jei/AntarchyJeiPlugin.java new file mode 100644 index 00000000..dbe6a041 --- /dev/null +++ b/common/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.AmericanizeRecipe; +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.AntarchyTags; +import com.craisinlord.antarchy.content.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 = ResourceLocation.fromNamespaceAndPath(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); + result.set(AntarchyObjects.AMERICAN_COMPONENT.get(), 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/src/main/java/com/craisinlord/antarchy/config/AntarchySettings.java b/common/src/main/java/com/craisinlord/antarchy/config/AntarchySettings.java index 1af8f10f..4b2856df 100644 --- a/common/src/main/java/com/craisinlord/antarchy/config/AntarchySettings.java +++ b/common/src/main/java/com/craisinlord/antarchy/config/AntarchySettings.java @@ -53,6 +53,16 @@ public final class AntarchySettings { private static double bigBerthaAttackDamage = 55.0D; private static double bigBerthaReachBonus = 3.0D; private static double bigBerthaAttackSpeed = -3.0D; + private static double krakensGraspAttackDamage = 16.0D; + private static double krakensGraspAttackSpeed = -2.9D; + private static double krakensGraspThrownDamage = 16.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 krakensGraspTentacleDamage = 3.0D; + private static double krakensGraspTentacleRadius = 3.0D; + private static int krakensGraspTentacleDamageIntervalTicks = 20; private static double scorpionWhipBaseDamage = 10.0D; private static double scorpionWhipReachBonus = 5.0D; private static int scorpionWhipPoisonDurationTicks = 100; @@ -117,6 +127,10 @@ public final class AntarchySettings { private static boolean krakenMassSpawnEnabled = true; private static double squidzookaCooldownSeconds = 1.0D; private static double squidzookaLaunchVelocity = 2.1D; + private static double rpoLauncherCooldownSeconds = 1.0D; + private static double rpoLauncherLaunchVelocity = 2.1D; + private static double rpoLauncherExplosionDamage = 14.0D; + private static double rpoLauncherExplosionRadius = 4.0D; private static double sizeRayCooldownSeconds = 1.0D; private static boolean invertProjectilesFromInvertedPlayers = false; private static boolean gravityGunEnabled = true; @@ -127,9 +141,19 @@ public final class AntarchySettings { private static double gravityGunBlastStrength = 1.4D; private static double gravityGunCooldownSeconds = 0.35D; private static double gravityGunMaxHoldDistance = 10.0D; + 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 int mogglesVisionRadius = 2; private static int mogglesVisionMaxLight = 7; private static float mogglesVisionAlpha = 0.35f; @@ -490,6 +514,7 @@ public final class AntarchySettings { 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() { @@ -763,6 +788,17 @@ public final class AntarchySettings { return krakenAttackDamage; } + public static double krakensGraspAttackDamage() { return krakensGraspAttackDamage; } + public static double krakensGraspAttackSpeed() { return krakensGraspAttackSpeed; } + public static double krakensGraspThrownDamage() { return krakensGraspThrownDamage; } + public static double krakensGraspLightningDamage() { return krakensGraspLightningDamage; } + public static boolean krakensGraspInnateLoyalty() { return krakensGraspInnateLoyalty; } + public static int krakensGraspInnateLoyaltyLevel() { return krakensGraspInnateLoyaltyLevel; } + public static int krakensGraspTentacleDurationTicks() { return krakensGraspTentacleDurationTicks; } + public static double krakensGraspTentacleDamage() { return krakensGraspTentacleDamage; } + public static double krakensGraspTentacleRadius() { return krakensGraspTentacleRadius; } + public static int krakensGraspTentacleDamageIntervalTicks() { return krakensGraspTentacleDamageIntervalTicks; } + public static double octopusBombHealth() { return octopusBombHealth; } @@ -907,6 +943,11 @@ public final class AntarchySettings { 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; } @@ -947,6 +988,26 @@ public final class AntarchySettings { return gravityGunMaxHoldDistance; } + 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; } @@ -1261,6 +1322,17 @@ public final class AntarchySettings { 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 setKrakensGraspTentacleDamage(double value) { krakensGraspTentacleDamage = value; } + public static void setKrakensGraspTentacleRadius(double value) { krakensGraspTentacleRadius = value; } + public static void setKrakensGraspTentacleDamageIntervalTicks(int value) { krakensGraspTentacleDamageIntervalTicks = value; } + public static void setBrutalflyHealth(double value) { brutalflyHealth = value; } @@ -1353,6 +1425,11 @@ public final class AntarchySettings { 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; } @@ -1393,6 +1470,26 @@ public final class AntarchySettings { gravityGunMaxHoldDistance = 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; } @@ -1417,6 +1514,46 @@ public final class AntarchySettings { 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 int mogglesVisionRadius() { return mogglesVisionRadius; } @@ -2548,6 +2685,8 @@ public final class AntarchySettings { 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/src/main/java/com/craisinlord/antarchy/content/AmericanizeRecipe.java b/common/src/main/java/com/craisinlord/antarchy/content/AmericanizeRecipe.java new file mode 100644 index 00000000..f8cf9dfb --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/AmericanizeRecipe.java @@ -0,0 +1,114 @@ +package com.craisinlord.antarchy.content; + +import com.craisinlord.antarchy.config.AntarchySettings; +import net.minecraft.core.HolderLookup; +import net.minecraft.core.NonNullList; +import net.minecraft.core.component.DataComponents; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.Unit; +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.CraftingInput; +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 = ResourceLocation.fromNamespaceAndPath("antarchy", "high_fructose_corn_syrup"); + + public static final RecipeSerializer SERIALIZER = new SimpleCraftingRecipeSerializer<>(AmericanizeRecipe::new); + + public AmericanizeRecipe(CraftingBookCategory category) { + super(category); + } + + @Override + public boolean matches(CraftingInput input, Level level) { + return findFood(input) != null; + } + + @Override + public ItemStack assemble(CraftingInput input, HolderLookup.Provider registries) { + ItemStack food = findFood(input); + if (food == null) { + return ItemStack.EMPTY; + } + + ItemStack result = food.copyWithCount(1); + result.set(AntarchyObjects.AMERICAN_COMPONENT.get(), Unit.INSTANCE); + return result; + } + + @Override + public boolean canCraftInDimensions(int width, int height) { + return width * height >= 2; + } + + @Override + public NonNullList getRemainingItems(CraftingInput input) { + NonNullList remaining = NonNullList.withSize(input.size(), ItemStack.EMPTY); + for (int i = 0; i < input.size(); 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(CraftingInput input) { + ItemStack food = ItemStack.EMPTY; + ItemStack hfcs = ItemStack.EMPTY; + for (int i = 0; i < input.size(); 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 (stack.has(AntarchyObjects.AMERICAN_COMPONENT.get())) { + return false; + } + if (stack.is(AntarchyTags.Items.HFCS_CANNOT_AMERICANIZE)) { + return false; + } + return stack.get(DataComponents.FOOD) != null; + } + + public static boolean isHighFructoseCornSyrup(ItemStack stack) { + return !stack.isEmpty() && stack.is(BuiltInRegistries.ITEM.get(HIGH_FRUCTOSE_CORN_SYRUP_ID)); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/AntarchyObjects.java b/common/src/main/java/com/craisinlord/antarchy/content/AntarchyObjects.java index 20caefd9..9b3adf8b 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/AntarchyObjects.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/AntarchyObjects.java @@ -21,6 +21,8 @@ import com.craisinlord.antarchy.content.entity.flying_squirrel.FlyingSquirrelEnt 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; @@ -34,12 +36,14 @@ 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 = () -> { @@ -55,6 +59,10 @@ public final class AntarchyObjects { @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> MOLEWORM = (Supplier>) UNBOUND; @@ -99,9 +107,40 @@ public final class AntarchyObjects { @SuppressWarnings("unchecked") public static Supplier> HERCULES_BEETLE = (Supplier>) UNBOUND; @SuppressWarnings("unchecked") - public static Supplier> GLIMMER = (Supplier>) UNBOUND; + public static Supplier> OURANWOOD_DEER = (Supplier>) UNBOUND; @SuppressWarnings("unchecked") - public static Supplier> GLIMMERS_GRACE = (Supplier>) UNBOUND; + public static Supplier> GLIMMER = (Supplier>) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier SPIRIT_APPLE = (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; + @SuppressWarnings("unchecked") + public static Supplier> GLIMMER_VARIANT_COMPONENT = + (Supplier>) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier> DORRIE_INVENTORY_MENU = (Supplier>) UNBOUND; @SuppressWarnings("unchecked") public static Supplier CHEEP_ITEM = (Supplier) UNBOUND; @SuppressWarnings("unchecked") @@ -185,6 +224,10 @@ public final class AntarchyObjects { @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; @@ -205,6 +248,16 @@ public final class AntarchyObjects { @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; @@ -223,12 +276,22 @@ public final class AntarchyObjects { @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> ANT_NEST_BLOCK_ENTITY = (Supplier>) UNBOUND; @SuppressWarnings("unchecked") public static Supplier> DREAM_CAMPFIRE_BLOCK_ENTITY = (Supplier>) UNBOUND; @@ -240,6 +303,11 @@ public final class AntarchyObjects { public static Supplier STINKY_GAS = (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> AMERICAN_COMPONENT = + (Supplier>) UNBOUND; private AntarchyObjects() { } @@ -319,6 +387,10 @@ public final class AntarchyObjects { Supplier ouranwoodAcornBlock, Supplier mossyOuranwoodLog, Supplier mossyOuranwoodWood, + Supplier umbralMossBlock, + Supplier umbralMossCarpet, + Supplier blushMossBlock, + Supplier blushMossCarpet, Supplier orangeMilkweed, Supplier pinkMilkweed, Supplier bedBugEggs, @@ -328,12 +400,14 @@ public final class AntarchyObjects { Supplier hushweed, Supplier squirrelNestBlock, Supplier brutalflyCocoonSpawner, + Supplier giantLilyPad, Supplier> antNestBlockEntity, Supplier> dreamCampfireBlockEntity, Supplier> waspNestBlockEntity, Supplier> hushweedBlockEntity, Supplier stinkyGas, Supplier stinkyFly, + Supplier peachLeaves, Supplier> doubleDamageChance, Supplier> bloodglassMaxHearts, Supplier> bloodglassWard @@ -412,6 +486,10 @@ public final class AntarchyObjects { 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; @@ -421,12 +499,14 @@ public final class AntarchyObjects { HUSHWEED = hushweed; SQUIRREL_NEST_BLOCK = squirrelNestBlock; BRUTALFLY_COCOON_SPAWNER = brutalflyCocoonSpawner; + GIANT_LILY_PAD = giantLilyPad; ANT_NEST_BLOCK_ENTITY = antNestBlockEntity; DREAM_CAMPFIRE_BLOCK_ENTITY = dreamCampfireBlockEntity; WASP_NEST_BLOCK_ENTITY = waspNestBlockEntity; HUSHWEED_BLOCK_ENTITY = hushweedBlockEntity; STINKY_GAS = stinkyGas; STINKY_FLY = stinkyFly; + PEACH_LEAVES_PARTICLE = peachLeaves; DOUBLE_DAMAGE_CHANCE = doubleDamageChance; BLOODGLASS_MAX_HEARTS = bloodglassMaxHearts; BLOODGLASS_WARD = bloodglassWard; @@ -440,16 +520,120 @@ public final class AntarchyObjects { OCTOPUS_BOMB = supplier; } + public static void setTentacle(Supplier> supplier) { + TENTACLE = 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 setGlimmer(Supplier> supplier) { + public static void setOuranwoodDeer(Supplier> supplier) { + OURANWOOD_DEER = supplier; + } + + public static void setGlimmer(Supplier> supplier) { GLIMMER = supplier; } - public static void setGlimmersGrace(Supplier> supplier) { - GLIMMERS_GRACE = 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 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 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 setPeachLeavesParticle(Supplier supplier) { + PEACH_LEAVES_PARTICLE = supplier; + } + + public static void setGlimmerVariantComponent(Supplier> supplier) { + GLIMMER_VARIANT_COMPONENT = supplier; + } + + public static void setDorrieInventoryMenu(Supplier> supplier) { + DORRIE_INVENTORY_MENU = supplier; + } + + public static void setAmericanComponent(Supplier> supplier) { + AMERICAN_COMPONENT = supplier; } public static BlockBehaviour.Properties shellstoneProperties() { diff --git a/common/src/main/java/com/craisinlord/antarchy/content/AntarchyTags.java b/common/src/main/java/com/craisinlord/antarchy/content/AntarchyTags.java index ae5cd781..baf200b2 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/AntarchyTags.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/AntarchyTags.java @@ -10,6 +10,7 @@ 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() { @@ -30,10 +31,12 @@ public final class AntarchyTags { 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 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 MINERS_DREAM_CARVABLE = TagKey.create(Registries.BLOCK, id("miners_dream_carvable")); private Blocks() { } @@ -94,16 +97,31 @@ public final class AntarchyTags { 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 GLIMMER_FOOD = TagKey.create(Registries.ITEM, id("glimmer_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")); 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")); + + 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")); private Biomes() { } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/CreativeTabOrder.java b/common/src/main/java/com/craisinlord/antarchy/content/CreativeTabOrder.java new file mode 100644 index 00000000..8ce4587f --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/CreativeTabOrder.java @@ -0,0 +1,334 @@ +package com.craisinlord.antarchy.content; + +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(CreativeTabOrder::group) + .thenComparingInt(CreativeTabOrder::subOrder); + + public static int group(Item item) { + String path = BuiltInRegistries.ITEM.getKey(item).getPath(); + return switch (path) { + case "ouranwood_log", "ouranwood_wood", "mossy_ouranwood_log", "mossy_ouranwood_wood", + "stripped_ouranwood_log", "stripped_ouranwood_wood", "duplicator_log", + "ouranwood_planks", "ouranwood_stairs", "ouranwood_slab", + "ouranwood_fence", "ouranwood_fence_gate", + "ouranwood_door", "ouranwood_trapdoor", + "ouranwood_pressure_plate", "ouranwood_button", + "ouranwood_sign", "ouranwood_hanging_sign", + "ouranwood_boat", "ouranwood_chest_boat", + "peach_log", "peach_wood", "stripped_peach_log", "stripped_peach_wood", + "peach_planks", "peach_stairs", "peach_slab", "peach_fence", "peach_fence_gate", + "peach_door", "peach_trapdoor", "peach_pressure_plate", "peach_button", + "peach_sign", "peach_hanging_sign", "peach_boat", "peach_chest_boat" -> 0; + case "nyxite", "polished_nyxite", "chiseled_nyxite", "nyxite_bricks", + "nyxite_stairs", "nyxite_slab", "nyxite_wall", + "polished_nyxite_stairs", "polished_nyxite_slab", "polished_nyxite_wall", + "nyxite_brick_stairs", "nyxite_brick_slab", "nyxite_brick_wall", + "pale_nyxite", "nyxite_spike", "potent_nyxite" -> 1; + case "shellstone", "polished_shellstone", "shellstone_bricks", "chiseled_shellstone", + "mossy_shellstone_bricks", "cracked_shellstone_bricks", + "shellstone_stairs", "shellstone_slab", "shellstone_wall", + "polished_shellstone_stairs", "polished_shellstone_slab", "polished_shellstone_wall", + "shellstone_brick_stairs", "shellstone_brick_slab", "shellstone_brick_wall", + "mossy_shellstone_brick_stairs", "mossy_shellstone_brick_slab", "mossy_shellstone_brick_wall" -> 2; + case "antimetal", "polished_antimetal" -> 3; + case "dream_sand", "dream_sandstone", "chiseled_dream_sandstone", + "cut_dream_sandstone", "smooth_dream_sandstone", + "dream_sandstone_stairs", "dream_sandstone_slab", "dream_sandstone_wall", + "smooth_dream_sandstone_stairs", "smooth_dream_sandstone_slab", + "cut_dream_sandstone_slab" -> 4; + case "umbral_moss_block", "umbral_moss_carpet", + "blush_moss_block", "blush_moss_carpet" -> 4; + case "uranium_ore", "deepslate_uranium_ore", "titanium_ore", "deepslate_titanium_ore", + "uranium_block", "titanium_block", + "cut_uranium", "cut_titanium", "cut_uranium_slab", "cut_titanium_slab", + "cut_uranium_stairs", "cut_titanium_stairs", + "chiseled_uranium", "chiseled_titanium", + "uranium_door", "titanium_door", "uranium_trapdoor", "titanium_trapdoor", + "uranium_bars", "titanium_bars", "uranium_bulb", "titanium_bulb" -> 6; + case "raw_uranium", "raw_titanium", "raw_uranium_scrap", "raw_titanium_scrap", + "raw_uranium_block", "raw_titanium_block" -> 7; + case "blood_crystal_block", "small_blood_crystal_bud", "medium_blood_crystal_bud", + "large_blood_crystal_bud", "budding_blood_crystal", "blood_crystal_cluster", + "myrmite", "broodstone", "chiten_block", "chiten_spike", "amber_moss_block", "amber_moss_carpet" -> 8; + case "ouranwood_leaves", "peach_leaves" -> 9; + case "duplicator_sapling", "ouranwood_acorn", "peach_sapling", "corn_seeds" -> 10; + case "orange_milkweed", "pink_milkweed", "camellia", "spider_lily", "hushweed", "amber_lichen", "creepvine", + "triffid_goo_block", "cloud_block", "wasp_nest", + "red_ant_nest", "brown_ant_nest", "rainbow_ant_nest", "termite_nest", + "star_coral", "star_coral_fan", "star_coral_block", + "dead_star_coral", "dead_star_coral_fan", "dead_star_coral_block" -> 11; + case "dream_torch", "dream_lantern", "dream_campfire", "dream_fire", "dream_fire_ceiling", + "lumen_froglight", "roseate_froglight" -> 12; + case "antimetal_scaffolding" -> 13; + case "infested_rooted_dirt", "infested_coarse_dirt", "bed_bug_egg", + "creeping_horror_egg", "lurking_terror_egg" -> 14; + case "ultimate_pickaxe", "ultimate_axe", "ultimate_shovel", "ultimate_hoe", + "duct_tape", "diamond_minecart", "gravity_sculk_sensor", "miners_dream" -> 15; + case "bile_bucket", "ichor_bucket", "antiwater_bucket", "cloud_bucket", "lumen_bucket" -> 16; + case "moggles", "brutalfly_elytra", "fallen_king_crown", "jumpy_boots" -> 17; + case "battle_axe", "basilisk_dagger", "squidzooka", "rpo_launcher", "shrink_ray", "growth_ray", + "gravity_gun", "water_cannon", "nightmare_sword", "lucid_pearl", "scorpion_whip", "blood_crystal_katana", + "big_bertha", "big_bertha_blade", "big_bertha_handle", "big_bertha_hilt", + "ultimate_sword", "ultimate_mace", "krakens_grasp" -> 18; + case "primordial_helmet", "primordial_chestplate", + "primordial_leggings", "primordial_boots", + "blood_crystal_helmet", "blood_crystal_chestplate", + "blood_crystal_leggings", "blood_crystal_boots", + "nightmare_helmet", "nightmare_chestplate", + "nightmare_leggings", "nightmare_boots", + "ultimate_helmet", "ultimate_chestplate", + "ultimate_leggings", "ultimate_boots" -> 19; + case "ultimate_bow", "ultimate_crossbow" -> 20; + case "cloud_shark_fin_soup", "mud_pie", "peach_pie", "cornbread", "popcorn", "rainbow_sugar", + "blood_crystal_apple", "spirit_apple", "peach", "raw_corndog", "cooked_corndog", + "raw_venison", "cooked_venison" -> 21; + case "blood_crystal_shard", "cloud_shark_fin", "basilisk_fang", "kraken_tooth", "kraken_tentacle", + "emperor_scorpion_stinger", "nightmare_scale", "molevore_nose", + "moleworm", "uranium_nugget", "titanium_nugget", + "uranium_ingot", "titanium_ingot", "lucid_eye", + "mantis_claw", "jumpy_bug_leg", "brutalfly_wing", "cornea_ear", + "primordial_scute", "triffid_goo", "vortex_eye", + "king_scale", "queen_scale", "chiten", "stink_bug", "corn", "high_fructose_corn_syrup" -> 22; + case "reverie_bottle", "glimmer_bottle", "root_beer" -> 24; + case "easter_bunny_spawn_egg", "flying_squirrel_spawn_egg", "caterpillar_spawn_egg", + "butterfly_spawn_egg", "reverie_spawn_egg", "brutalfly_spawn_egg", + "red_ant_spawn_egg", "brown_ant_spawn_egg", "rainbow_ant_spawn_egg", "termite_spawn_egg", + "moleworm_spawn_egg", "mantis_spawn_egg", "alpha_mantis_spawn_egg", "rolly_polly_spawn_egg", + "molevore_spawn_egg", "triffid_spawn_egg", "apple_cow_spawn_egg", "golden_apple_cow_spawn_egg", + "enchanted_golden_apple_cow_spawn_egg", "dr_trayaurus_spawn_egg", "wasp_spawn_egg", + "bomber_spawn_egg", "jumpy_bug_spawn_egg", "stink_bug_spawn_egg", "cloud_shark_spawn_egg", + "kraken_spawn_egg", "missile_squid_spawn_egg", "octopus_bomb_spawn_egg", + "nightmare_spawn_egg", "bed_bug_spawn_egg", "lucid_spawn_egg", "scorpion_spawn_egg", + "basilisk_spawn_egg", "emperor_scorpion_spawn_egg", "toreterror_spawn_egg", + "dorrie_spawn_egg", "glimmer_spawn_egg", "ouranwood_deer_spawn_egg", "elka_spawn_egg", + "hercules_beetle_spawn_egg", "creeping_horror_spawn_egg", "lurking_terror_spawn_egg" -> 25; + default -> 99; + }; + } + + public static int subOrder(Item item) { + String path = BuiltInRegistries.ITEM.getKey(item).getPath(); + return switch (path) { + case "ouranwood_log" -> 0; + case "ouranwood_wood" -> 1; + case "mossy_ouranwood_log" -> 2; + case "mossy_ouranwood_wood" -> 3; + case "stripped_ouranwood_log" -> 4; + case "stripped_ouranwood_wood" -> 5; + case "duplicator_log" -> 6; + case "ouranwood_planks" -> 7; + case "ouranwood_stairs" -> 8; + case "ouranwood_slab" -> 9; + case "ouranwood_fence" -> 10; + case "ouranwood_fence_gate" -> 11; + case "ouranwood_door" -> 12; + case "ouranwood_trapdoor" -> 13; + case "ouranwood_pressure_plate" -> 14; + case "ouranwood_button" -> 15; + case "ouranwood_sign" -> 16; + case "ouranwood_hanging_sign" -> 17; + case "ouranwood_boat" -> 18; + case "ouranwood_chest_boat" -> 19; + case "peach_log" -> 20; + case "peach_wood" -> 21; + case "stripped_peach_log" -> 22; + case "stripped_peach_wood" -> 23; + case "peach_planks" -> 24; + case "peach_stairs" -> 25; + case "peach_slab" -> 26; + case "peach_fence" -> 27; + case "peach_fence_gate" -> 28; + case "peach_door" -> 29; + case "peach_trapdoor" -> 30; + case "peach_pressure_plate" -> 31; + case "peach_button" -> 32; + case "peach_sign" -> 33; + case "peach_hanging_sign" -> 34; + case "peach_boat" -> 35; + case "peach_chest_boat" -> 36; + case "ouranwood_leaves" -> 0; + case "peach_leaves" -> 1; + case "duplicator_sapling" -> 0; + case "ouranwood_acorn" -> 1; + case "peach_sapling" -> 2; + case "corn_seeds" -> 3; + case "orange_milkweed" -> 0; + case "pink_milkweed" -> 1; + case "camellia" -> 2; + case "spider_lily" -> 3; + case "hushweed" -> 4; + case "amber_lichen" -> 5; + case "creepvine" -> 6; + case "triffid_goo_block" -> 7; + case "cloud_block" -> 8; + case "wasp_nest" -> 9; + case "red_ant_nest" -> 10; + case "brown_ant_nest" -> 11; + case "rainbow_ant_nest" -> 12; + case "termite_nest" -> 13; + case "star_coral" -> 14; + case "star_coral_fan" -> 15; + case "star_coral_block" -> 16; + case "dead_star_coral" -> 17; + case "dead_star_coral_fan" -> 18; + case "dead_star_coral_block" -> 19; + case "blood_crystal_block" -> 0; + case "small_blood_crystal_bud" -> 1; + case "medium_blood_crystal_bud" -> 2; + case "large_blood_crystal_bud" -> 3; + case "budding_blood_crystal" -> 4; + case "blood_crystal_cluster" -> 5; + case "myrmite" -> 6; + case "broodstone" -> 7; + case "chiten_block" -> 8; + case "chiten_spike" -> 9; + case "amber_moss_block" -> 10; + case "amber_moss_carpet" -> 11; + case "uranium_ore" -> 0; + case "deepslate_uranium_ore" -> 1; + case "titanium_ore" -> 2; + case "deepslate_titanium_ore" -> 3; + case "uranium_block" -> 4; + case "titanium_block" -> 5; + case "cut_uranium" -> 6; + case "cut_titanium" -> 7; + case "cut_uranium_slab" -> 8; + case "cut_titanium_slab" -> 9; + case "cut_uranium_stairs" -> 10; + case "cut_titanium_stairs" -> 11; + case "chiseled_uranium" -> 12; + case "chiseled_titanium" -> 13; + case "uranium_door" -> 14; + case "titanium_door" -> 15; + case "uranium_trapdoor" -> 16; + case "titanium_trapdoor" -> 17; + case "uranium_bars" -> 18; + case "titanium_bars" -> 19; + case "uranium_bulb" -> 20; + case "titanium_bulb" -> 21; + case "raw_uranium" -> 0; + case "raw_titanium" -> 1; + case "raw_uranium_scrap" -> 2; + case "raw_titanium_scrap" -> 3; + case "raw_uranium_block" -> 4; + case "raw_titanium_block" -> 5; + case "dream_torch" -> 0; + case "dream_lantern" -> 1; + case "dream_campfire" -> 2; + case "dream_fire" -> 3; + case "dream_fire_ceiling" -> 4; + case "lumen_froglight" -> 5; + case "roseate_froglight" -> 6; + case "infested_rooted_dirt" -> 0; + case "infested_coarse_dirt" -> 1; + case "bed_bug_egg" -> 2; + case "creeping_horror_egg" -> 3; + case "lurking_terror_egg" -> 4; + case "ultimate_pickaxe" -> 0; + case "ultimate_axe" -> 1; + case "ultimate_shovel" -> 2; + case "ultimate_hoe" -> 3; + case "duct_tape" -> 4; + case "diamond_minecart" -> 5; + case "gravity_sculk_sensor" -> 6; + case "miners_dream" -> 7; + case "bile_bucket" -> 0; + case "ichor_bucket" -> 1; + case "antiwater_bucket" -> 2; + case "cloud_bucket" -> 3; + case "lumen_bucket" -> 4; + case "moggles" -> 0; + case "brutalfly_elytra" -> 1; + case "fallen_king_crown" -> 2; + case "jumpy_boots" -> 3; + case "battle_axe" -> 0; + case "basilisk_dagger" -> 1; + case "squidzooka" -> 2; + case "rpo_launcher" -> 3; + case "shrink_ray" -> 4; + case "growth_ray" -> 5; + case "gravity_gun" -> 6; + case "water_cannon" -> 7; + case "nightmare_sword" -> 8; + case "lucid_pearl" -> 9; + case "scorpion_whip" -> 10; + case "blood_crystal_katana" -> 11; + case "big_bertha" -> 12; + case "big_bertha_blade" -> 13; + case "big_bertha_handle" -> 14; + case "big_bertha_hilt" -> 15; + case "ultimate_sword" -> 16; + case "ultimate_mace" -> 17; + case "krakens_grasp" -> 18; + case "primordial_helmet" -> 0; + case "primordial_chestplate" -> 1; + case "primordial_leggings" -> 2; + case "primordial_boots" -> 3; + case "blood_crystal_helmet" -> 4; + case "blood_crystal_chestplate" -> 5; + case "blood_crystal_leggings" -> 6; + case "blood_crystal_boots" -> 7; + case "nightmare_helmet" -> 8; + case "nightmare_chestplate" -> 9; + case "nightmare_leggings" -> 10; + case "nightmare_boots" -> 11; + case "ultimate_helmet" -> 12; + case "ultimate_chestplate" -> 13; + case "ultimate_leggings" -> 14; + case "ultimate_boots" -> 15; + case "ultimate_bow" -> 0; + case "ultimate_crossbow" -> 1; + case "cloud_shark_fin_soup" -> 0; + case "mud_pie" -> 1; + case "peach_pie" -> 2; + case "cornbread" -> 3; + case "popcorn" -> 4; + case "rainbow_sugar" -> 5; + case "raw_corndog" -> 6; + case "cooked_corndog" -> 7; + case "raw_venison" -> 8; + case "cooked_venison" -> 9; + case "blood_crystal_apple" -> 10; + case "spirit_apple" -> 11; + case "peach" -> 12; + case "reverie_bottle" -> 0; + case "glimmer_bottle" -> 1; + case "root_beer" -> 2; + case "blood_crystal_shard" -> 0; + case "cloud_shark_fin" -> 1; + case "basilisk_fang" -> 2; + case "kraken_tooth" -> 3; + case "kraken_tentacle" -> 4; + case "emperor_scorpion_stinger" -> 5; + case "nightmare_scale" -> 6; + case "molevore_nose" -> 7; + case "moleworm" -> 8; + case "uranium_nugget" -> 9; + case "titanium_nugget" -> 10; + case "uranium_ingot" -> 11; + case "titanium_ingot" -> 12; + case "lucid_eye" -> 13; + case "mantis_claw" -> 14; + case "jumpy_bug_leg" -> 15; + case "brutalfly_wing" -> 16; + case "cornea_ear" -> 17; + case "primordial_scute" -> 18; + case "triffid_goo" -> 19; + case "vortex_eye" -> 20; + case "king_scale" -> 21; + case "queen_scale" -> 22; + case "chiten" -> 23; + case "stink_bug" -> 24; + case "corn" -> 25; + case "high_fructose_corn_syrup" -> 26; + default -> 0; + }; + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/CustomBrewingRecipes.java b/common/src/main/java/com/craisinlord/antarchy/content/CustomBrewingRecipes.java new file mode 100644 index 00000000..8f4ea530 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/CustomBrewingRecipes.java @@ -0,0 +1,119 @@ +package com.craisinlord.antarchy.content; + +import com.craisinlord.antarchy.content.entity.glimmer.GlimmerVariant; +import com.craisinlord.antarchy.content.item.GlimmerBottleItem; +import net.minecraft.core.Holder; +import net.minecraft.core.component.DataComponents; +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.PotionContents; +import net.minecraft.world.item.alchemy.Potions; + +public final class CustomBrewingRecipes { + private static final ResourceLocation CORN_ID = ResourceLocation.fromNamespaceAndPath("antarchy", "corn"); + private static final ResourceLocation HIGH_FRUCTOSE_CORN_SYRUP_ID = ResourceLocation.fromNamespaceAndPath("antarchy", "high_fructose_corn_syrup"); + private static final ResourceLocation ROOT_BEER_ID = ResourceLocation.fromNamespaceAndPath("antarchy", "root_beer"); + private static final TagKey ROOTS = TagKey.create(net.minecraft.core.registries.Registries.ITEM, ResourceLocation.fromNamespaceAndPath("antarchy", "roots")); + + private CustomBrewingRecipes() { + } + + public static boolean hasMix(ItemStack input, ItemStack ingredient) { + return !getOutput(input, ingredient).isEmpty(); + } + + 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; + } + PotionContents contents = stack.getOrDefault(DataComponents.POTION_CONTENTS, PotionContents.EMPTY); + return contents.is(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() { + ItemStack stack = new ItemStack(Items.POTION); + stack.set(DataComponents.POTION_CONTENTS, new PotionContents(Potions.WATER)); + return stack; + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/RpoLauncherDispenseBehavior.java b/common/src/main/java/com/craisinlord/antarchy/content/RpoLauncherDispenseBehavior.java new file mode 100644 index 00000000..8b5f0b5e --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/RpoLauncherDispenseBehavior.java @@ -0,0 +1,41 @@ +package com.craisinlord.antarchy.content; + +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.entity.OctopusBombEntity; +import net.minecraft.core.Direction; +import net.minecraft.core.Position; +import net.minecraft.core.dispenser.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.state().getValue(DispenserBlock.FACING); + Position position = DispenserBlock.getDispensePosition(source); + + OctopusBombEntity bomb = AntarchyObjects.OCTOPUS_BOMB.get().create(source.level()); + 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.level().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/src/main/java/com/craisinlord/antarchy/content/block/BigBushBlock.java b/common/src/main/java/com/craisinlord/antarchy/content/block/BigBushBlock.java deleted file mode 100644 index 8d4264e8..00000000 --- a/common/src/main/java/com/craisinlord/antarchy/content/block/BigBushBlock.java +++ /dev/null @@ -1,291 +0,0 @@ -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.server.level.ServerLevel; -import net.minecraft.util.RandomSource; -import net.minecraft.world.InteractionHand; -import net.minecraft.world.ItemInteractionResult; -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.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.DirectionProperty; -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; -import org.jetbrains.annotations.Nullable; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -/** - * Multiblock bush grown with bonemeal. The origin block carries the - * loot/age; the rest of the footprint is filled with invisible - * {@link BigBushPartBlock}s. - * - * age 0: single block (1x1x1) - * age 1: 2x2x2 footprint; FACING + FACING.getClockWise() pick the horizontal quadrant - * age 2: 3x3x3 footprint centered on the origin column - * - * Grown stages require a sturdy support block under every column of their - * footprint. Growing from 2x2 to 3x3 may relocate the origin to any of the four - * occupied columns to find room. - */ -public class BigBushBlock extends BushBlock implements BonemealableBlock { - public static final MapCodec CODEC = Block.simpleCodec(BigBushBlock::new); - - public static final IntegerProperty AGE = BlockStateProperties.AGE_2; - public static final DirectionProperty FACING = BlockStateProperties.HORIZONTAL_FACING; - - private static final VoxelShape SMALL_SHAPE = Block.box(2.0, 0.0, 2.0, 14.0, 13.0, 14.0); - - public BigBushBlock(BlockBehaviour.Properties properties) { - super(properties); - this.registerDefaultState(this.stateDefinition.any() - .setValue(AGE, 0) - .setValue(FACING, Direction.EAST)); - } - - @Override - public MapCodec codec() { - return CODEC; - } - - @Override - protected void createBlockStateDefinition(StateDefinition.Builder builder) { - builder.add(AGE, FACING); - } - - @Override - protected VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { - return state.getValue(AGE) == 0 ? SMALL_SHAPE : Shapes.block(); - } - - /** All part positions belonging to a bush with the given origin state/pos */ - public static List partPositions(BlockState state, BlockPos origin) { - List positions = new ArrayList<>(); - int age = state.getValue(AGE); - if (age == 1) { - Direction forward = state.getValue(FACING); - Direction side = forward.getClockWise(); - for (int dy = 0; dy <= 1; dy++) { - for (BlockPos column : new BlockPos[]{ - origin, origin.relative(forward), origin.relative(side), origin.relative(forward).relative(side)}) { - BlockPos pos = column.above(dy); - if (!pos.equals(origin)) { - positions.add(pos); - } - } - } - } else if (age == 2) { - for (int dx = -1; dx <= 1; dx++) { - for (int dy = 0; dy <= 2; dy++) { - for (int dz = -1; dz <= 1; dz++) { - if (dx == 0 && dy == 0 && dz == 0) { - continue; - } - positions.add(origin.offset(dx, dy, dz)); - } - } - } - } - return positions; - } - - /** Ground columns of the footprint, each needs a sturdy block below it. */ - public static List supportColumns(BlockState state, BlockPos origin) { - List columns = new ArrayList<>(); - int age = state.getValue(AGE); - if (age == 1) { - Direction forward = state.getValue(FACING); - Direction side = forward.getClockWise(); - columns.add(origin); - columns.add(origin.relative(forward)); - columns.add(origin.relative(side)); - columns.add(origin.relative(forward).relative(side)); - } else if (age == 2) { - for (int dx = -1; dx <= 1; dx++) { - for (int dz = -1; dz <= 1; dz++) { - columns.add(origin.offset(dx, 0, dz)); - } - } - } else { - columns.add(origin); - } - return columns; - } - - public static boolean hasFullSupport(BlockState state, LevelReader level, BlockPos origin) { - for (BlockPos column : supportColumns(state, origin)) { - BlockPos below = column.below(); - if (!level.getBlockState(below).isFaceSturdy(level, below, Direction.UP)) { - return false; - } - } - return true; - } - - @Override - protected boolean canSurvive(BlockState state, LevelReader level, BlockPos pos) { - if (state.getValue(AGE) == 0) { - return super.canSurvive(state, level, pos); - } - return hasFullSupport(state, level, pos); - } - - private static Block partBlock() { - return BuiltInRegistries.BLOCK.get(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "big_bush_part")); - } - - private record GrowthTarget(BlockPos origin, BlockState state) {} - - @Nullable - private GrowthTarget findGrowthTarget(LevelReader level, BlockPos pos, BlockState state, RandomSource random) { - int age = state.getValue(AGE); - if (age == 0) { - List facings = new ArrayList<>(Direction.Plane.HORIZONTAL.stream().toList()); - for (int i = facings.size() - 1; i > 0; i--) { - Direction swap = facings.set(random.nextInt(i + 1), facings.get(i)); - facings.set(i, swap); - } - for (Direction facing : facings) { - BlockState grown = state.setValue(AGE, 1).setValue(FACING, facing); - if (canGrowTo(level, pos, grown, Set.of(pos))) { - return new GrowthTarget(pos, grown); - } - } - return null; - } - if (age == 1) { - Direction forward = state.getValue(FACING); - Direction side = forward.getClockWise(); - Set owned = new HashSet<>(partPositions(state, pos)); - owned.add(pos); - BlockState grown = state.setValue(AGE, 2); - // Any of the four occupied columns can become the new center of the 3x3. - for (BlockPos candidate : new BlockPos[]{ - pos, pos.relative(forward).relative(side), pos.relative(forward), pos.relative(side)}) { - if (canGrowTo(level, candidate, grown, owned)) { - return new GrowthTarget(candidate, grown); - } - } - } - return null; - } - - private boolean canGrowTo(LevelReader level, BlockPos newOrigin, BlockState grownState, Set owned) { - if (!hasFullSupport(grownState, level, newOrigin)) { - return false; - } - List positions = new ArrayList<>(partPositions(grownState, newOrigin)); - positions.add(newOrigin); - for (BlockPos pos : positions) { - if (owned.contains(pos)) { - continue; - } - if (!level.getBlockState(pos).canBeReplaced()) { - return false; - } - } - return true; - } - - public static void placeBushBlocks(LevelAccessor level, BlockPos origin, BlockState grownState, int flags) { - level.setBlock(origin, grownState, flags); - Block part = partBlock(); - BlockPos capPos = grownState.getValue(AGE) == 2 ? origin.above(2) : null; - for (BlockPos pos : partPositions(grownState, origin)) { - level.setBlock(pos, part.defaultBlockState() - .setValue(BigBushPartBlock.CAP, pos.equals(capPos)), flags); - } - } - - private void placeStage(ServerLevel level, BlockPos origin, BlockState grownState) { - placeBushBlocks(level, origin, grownState, 3); - } - - @Override - protected void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean movedByPiston) { - if (!state.is(newState.getBlock())) { - for (BlockPos partPos : partPositions(state, pos)) { - if (level.getBlockState(partPos).getBlock() instanceof BigBushPartBlock) { - level.setBlock(partPos, Blocks.AIR.defaultBlockState(), 35); - } - } - } - super.onRemove(state, level, pos, newState, movedByPiston); - } - - @Override - public boolean isValidBonemealTarget(LevelReader level, BlockPos pos, BlockState state) { - return state.getValue(AGE) < 2; - } - - @Override - public boolean isBonemealSuccess(Level level, RandomSource random, BlockPos pos, BlockState state) { - return findGrowthTarget(level, pos, state, random) != null; - } - - @Override - public void performBonemeal(ServerLevel level, RandomSource random, BlockPos pos, BlockState state) { - GrowthTarget target = findGrowthTarget(level, pos, state, random); - if (target == null) { - return; - } - if (!target.origin().equals(pos)) { - level.removeBlock(pos, false); - } - placeStage(level, target.origin(), target.state()); - } - - /** Pops a bonus item when bone meal is used on a fully-grown (age 2) bush; shared with {@link BigBushPartBlock}. */ - public static boolean grantBonemealBonus(Level level, BlockPos originPos, BlockState originState, Player player, ItemStack stack) { - if (!(originState.getBlock() instanceof BigBushBlock bigBush) || originState.getValue(AGE) != 2) { - return false; - } - if (!level.isClientSide) { - bigBush.popResource(level, originPos, new ItemStack(bigBush, 1)); - if (!player.getAbilities().instabuild) { - stack.shrink(1); - } - level.levelEvent(1505, originPos, 15); - } - return true; - } - - @Override - protected ItemInteractionResult useItemOn( - ItemStack stack, - BlockState state, - Level level, - BlockPos pos, - Player player, - InteractionHand hand, - BlockHitResult hitResult - ) { - if (stack.is(Items.BONE_MEAL) && grantBonemealBonus(level, pos, state, player, stack)) { - return ItemInteractionResult.sidedSuccess(level.isClientSide); - } - return super.useItemOn(stack, state, level, pos, player, hand, hitResult); - } -} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/block/BigBushPartBlock.java b/common/src/main/java/com/craisinlord/antarchy/content/block/BigBushPartBlock.java deleted file mode 100644 index 56a0731e..00000000 --- a/common/src/main/java/com/craisinlord/antarchy/content/block/BigBushPartBlock.java +++ /dev/null @@ -1,177 +0,0 @@ -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.util.RandomSource; -import net.minecraft.world.InteractionHand; -import net.minecraft.world.ItemInteractionResult; -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.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.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; -import net.minecraft.world.phys.shapes.CollisionContext; -import net.minecraft.world.phys.shapes.Shapes; -import net.minecraft.world.phys.shapes.VoxelShape; -import org.jetbrains.annotations.Nullable; - -/** - * Invisible filler block for the grown {@link BigBushBlock} footprint. Breaking a - * part destroys the whole bush (drops come from the origin's loot table). The one - * part directly two above the origin of a stage-3 bush renders the top slice of - * the oversized cross model - */ -public class BigBushPartBlock extends Block implements BonemealableBlock { - public static final MapCodec CODEC = Block.simpleCodec(BigBushPartBlock::new); - - public static final BooleanProperty CAP = BooleanProperty.create("cap"); - - public BigBushPartBlock(BlockBehaviour.Properties properties) { - super(properties); - this.registerDefaultState(this.stateDefinition.any().setValue(CAP, false)); - } - - @Override - public MapCodec codec() { - return CODEC; - } - - @Override - protected void createBlockStateDefinition(StateDefinition.Builder builder) { - builder.add(CAP); - } - - @Override - protected VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { - return Shapes.block(); - } - - /** Finds the origin bush this part belongs to, or null if orphaned. */ - @Nullable - public static BlockPos findOrigin(LevelReader level, BlockPos partPos) { - for (int dx = -1; dx <= 1; dx++) { - for (int dy = -2; dy <= 0; dy++) { - for (int dz = -1; dz <= 1; dz++) { - if (dx == 0 && dy == 0 && dz == 0) { - continue; - } - BlockPos candidate = partPos.offset(dx, dy, dz); - BlockState state = level.getBlockState(candidate); - if (state.getBlock() instanceof BigBushBlock - && BigBushBlock.partPositions(state, candidate).contains(partPos)) { - return candidate; - } - } - } - } - return null; - } - - @Override - public BlockState playerWillDestroy(Level level, BlockPos pos, BlockState state, Player player) { - if (!level.isClientSide) { - BlockPos origin = findOrigin(level, pos); - if (origin != null) { - BlockState originState = level.getBlockState(origin); - if (!player.getAbilities().instabuild) { - Block.dropResources(originState, level, origin, null, player, player.getMainHandItem()); - } - level.destroyBlock(origin, false); - } - } - return super.playerWillDestroy(level, pos, state, player); - } - - @Override - protected void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean movedByPiston) { - if (!state.is(newState.getBlock()) && !level.isClientSide) { - BlockPos origin = findOrigin(level, pos); - if (origin != null) { - level.destroyBlock(origin, true); - } - } - super.onRemove(state, level, pos, newState, movedByPiston); - } - - @Override - protected BlockState updateShape(BlockState state, Direction direction, BlockState neighborState, - LevelAccessor level, BlockPos pos, BlockPos neighborPos) { - level.scheduleTick(pos, this, 1); - return super.updateShape(state, direction, neighborState, level, pos, neighborPos); - } - - @Override - protected void tick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { - BlockPos origin = findOrigin(level, pos); - if (origin == null) { - level.removeBlock(pos, false); - return; - } - BlockState originState = level.getBlockState(origin); - if (!originState.canSurvive(level, origin)) { - level.destroyBlock(origin, true); - } - } - - /** Bonemeal applied to any part of a growing bush grows the whole thing, same as clicking the origin. */ - @Override - public boolean isValidBonemealTarget(LevelReader level, BlockPos pos, BlockState state) { - BlockPos origin = findOrigin(level, pos); - return origin != null && level.getBlockState(origin).getBlock() instanceof BigBushBlock bigBush - && bigBush.isValidBonemealTarget(level, origin, level.getBlockState(origin)); - } - - @Override - public boolean isBonemealSuccess(Level level, RandomSource random, BlockPos pos, BlockState state) { - BlockPos origin = findOrigin(level, pos); - return origin != null && level.getBlockState(origin).getBlock() instanceof BigBushBlock bigBush - && bigBush.isBonemealSuccess(level, random, origin, level.getBlockState(origin)); - } - - @Override - public void performBonemeal(ServerLevel level, RandomSource random, BlockPos pos, BlockState state) { - BlockPos origin = findOrigin(level, pos); - if (origin != null && level.getBlockState(origin).getBlock() instanceof BigBushBlock bigBush) { - bigBush.performBonemeal(level, random, origin, level.getBlockState(origin)); - } - } - - @Override - protected ItemInteractionResult useItemOn( - ItemStack stack, - BlockState state, - Level level, - BlockPos pos, - Player player, - InteractionHand hand, - BlockHitResult hitResult - ) { - if (stack.is(Items.BONE_MEAL)) { - BlockPos origin = findOrigin(level, pos); - if (origin != null && BigBushBlock.grantBonemealBonus(level, origin, level.getBlockState(origin), player, stack)) { - return ItemInteractionResult.sidedSuccess(level.isClientSide); - } - } - return super.useItemOn(stack, state, level, pos, player, hand, hitResult); - } - - @Override - public ItemStack getCloneItemStack(LevelReader level, BlockPos pos, BlockState state) { - BlockPos origin = findOrigin(level, pos); - if (origin != null) { - return new ItemStack(level.getBlockState(origin).getBlock()); - } - return ItemStack.EMPTY; - } -} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/block/BlushMossBlock.java b/common/src/main/java/com/craisinlord/antarchy/content/block/BlushMossBlock.java new file mode 100644 index 00000000..03ac77bc --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/block/BlushMossBlock.java @@ -0,0 +1,53 @@ +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 { + public static final MapCodec CODEC = Block.simpleCodec(BlushMossBlock::new); + private static final ResourceKey> BLUSH_MOSS_PATCH_BONEMEAL = ResourceKey.create( + Registries.CONFIGURED_FEATURE, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "blush_moss_patch_bonemeal") + ); + + public BlushMossBlock(BlockBehaviour.Properties properties) { + super(properties); + } + + @Override + public MapCodec codec() { + return CODEC; + } + + @Override + public boolean isValidBonemealTarget(LevelReader level, BlockPos pos, BlockState state) { + 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/src/main/java/com/craisinlord/antarchy/content/block/BlushMossCarpetBlock.java b/common/src/main/java/com/craisinlord/antarchy/content/block/BlushMossCarpetBlock.java new file mode 100644 index 00000000..17dd3464 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/block/BlushMossCarpetBlock.java @@ -0,0 +1,136 @@ +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 MapCodec CODEC = Block.simpleCodec(BlushMossCarpetBlock::new); + 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 + public MapCodec codec() { + return CODEC; + } + + @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 + protected 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 + protected 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 + protected 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/src/main/java/com/craisinlord/antarchy/content/block/CamelliaBlock.java b/common/src/main/java/com/craisinlord/antarchy/content/block/CamelliaBlock.java new file mode 100644 index 00000000..5ba3ed23 --- /dev/null +++ b/common/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/src/main/java/com/craisinlord/antarchy/content/block/CornCropBlock.java b/common/src/main/java/com/craisinlord/antarchy/content/block/CornCropBlock.java new file mode 100644 index 00000000..b5d5cbe4 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/block/CornCropBlock.java @@ -0,0 +1,179 @@ +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 MapCodec CODEC = Block.simpleCodec(CornCropBlock::new); + 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 = ResourceLocation.fromNamespaceAndPath("antarchy", "corn_seeds"); + + public CornCropBlock(BlockBehaviour.Properties properties) { + super(properties); + this.registerDefaultState(this.stateDefinition.any().setValue(AGE, 0).setValue(HALF, DoubleBlockHalf.LOWER)); + } + + @Override + public MapCodec codec() { + return CODEC; + } + + @Override + protected 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 + protected boolean mayPlaceOn(BlockState state, BlockGetter level, BlockPos pos) { + return state.is(Blocks.FARMLAND); + } + + @Override + protected 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 + protected 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 + protected boolean isRandomlyTicking(BlockState state) { + return state.getValue(HALF) == DoubleBlockHalf.LOWER && state.getValue(AGE) < MAX_AGE; + } + + @Override + protected 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) { + 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(LevelReader 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/src/main/java/com/craisinlord/antarchy/content/block/GiantLilyPadBlock.java b/common/src/main/java/com/craisinlord/antarchy/content/block/GiantLilyPadBlock.java new file mode 100644 index 00000000..be01b968 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/block/GiantLilyPadBlock.java @@ -0,0 +1,345 @@ +package com.craisinlord.antarchy.content.block; + +import com.craisinlord.antarchy.content.AntarchyTags; +import com.mojang.serialization.MapCodec; +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.server.level.ServerLevel; +import net.minecraft.util.StringRepresentable; +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.EnumProperty; +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 { + public static final MapCodec CODEC = Block.simpleCodec(GiantLilyPadBlock::new); + public static final EnumProperty SHAPE = EnumProperty.create("shape", Shape.class); + public static final EnumProperty TILE_POSITION = EnumProperty.create("tile_position", TilePosition.class); + public static final EnumProperty ROTATION = EnumProperty.create("rotation", PadRotation.class); + + private static final VoxelShape SHAPE_BOX = Block.box(0.0D, 0.0D, 0.0D, 16.0D, 0.5D, 16.0D); + private static final int SEARCH_RADIUS = 2; + private static final ThreadLocal RESTRUCTURING_DEPTH = ThreadLocal.withInitial(() -> 0); + + public GiantLilyPadBlock(BlockBehaviour.Properties properties) { + super(properties); + this.registerDefaultState(this.stateDefinition.any() + .setValue(SHAPE, Shape.SINGLE) + .setValue(TILE_POSITION, TilePosition.SINGLE) + .setValue(ROTATION, PadRotation.DEG_0)); + } + + @Override + public MapCodec codec() { + return CODEC; + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(SHAPE, TILE_POSITION, ROTATION); + } + + @Override + public BlockState getStateForPlacement(BlockPlaceContext context) { + return canSurvive(defaultBlockState(), context.getLevel(), context.getClickedPos()) ? defaultBlockState() : null; + } + + @Override + protected RenderShape getRenderShape(BlockState state) { + return RenderShape.MODEL; + } + + @Override + protected VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + return SHAPE_BOX; + } + + @Override + protected boolean canSurvive(BlockState state, LevelReader level, BlockPos pos) { + return isSupported(level, pos); + } + + @Override + protected BlockState updateShape(BlockState state, Direction direction, BlockState neighborState, LevelAccessor level, BlockPos pos, BlockPos neighborPos) { + if (!state.canSurvive(level, pos)) { + if (level instanceof ServerLevel serverLevel) { + recalculateNearbyPads(serverLevel, pos); + } + return Blocks.AIR.defaultBlockState(); + } + + if (level instanceof ServerLevel serverLevel) { + recalculateNearbyPads(serverLevel, pos); + } + + return super.updateShape(state, direction, neighborState, level, pos, neighborPos); + } + + @Override + protected void onPlace(BlockState state, Level level, BlockPos pos, BlockState oldState, boolean movedByPiston) { + super.onPlace(state, level, pos, oldState, movedByPiston); + if (!level.isClientSide && !oldState.is(state.getBlock()) && level instanceof ServerLevel serverLevel) { + recalculateNearbyPads(serverLevel, pos); + } + } + + @Override + protected void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean movedByPiston) { + super.onRemove(state, level, pos, newState, movedByPiston); + if (!level.isClientSide && !state.is(newState.getBlock()) && level instanceof ServerLevel serverLevel) { + recalculateNearbyPads(serverLevel, pos); + } + } + + private static boolean isSupported(LevelReader level, BlockPos pos) { + return level.getFluidState(pos).is(AntarchyTags.Fluids.GIANT_LILY_PAD_SUPPORTING_FLUIDS) + || level.getFluidState(pos.below()).is(AntarchyTags.Fluids.GIANT_LILY_PAD_SUPPORTING_FLUIDS); + } + + private static void recalculateNearbyPads(ServerLevel level, BlockPos center) { + if (isRestructuring()) { + return; + } + + withRestructuringGuard(() -> { + int minX = center.getX() - SEARCH_RADIUS; + int maxX = center.getX() + SEARCH_RADIUS; + int minZ = center.getZ() - SEARCH_RADIUS; + int maxZ = center.getZ() + SEARCH_RADIUS; + int y = center.getY(); + + List candidates = new ArrayList<>(); + collectCandidates(level, y, minX, maxX, minZ, maxZ, candidates); + + candidates.sort(Comparator + .comparingInt(ShapeCandidate::area).reversed() + .thenComparingInt(candidate -> candidate.anchor().getX()) + .thenComparingInt(candidate -> candidate.anchor().getZ()) + .thenComparingInt(candidate -> candidate.shape().ordinal())); + + List assigned = new ArrayList<>(); + for (ShapeCandidate candidate : candidates) { + boolean blocked = false; + for (BlockPos pos : candidate.positions()) { + if (assigned.contains(pos)) { + blocked = true; + break; + } + } + if (blocked) { + continue; + } + + PadRotation rotation = rotationFor(level, candidate.anchor()); + for (TileAssignment tile : candidate.tiles()) { + BlockPos pos = tile.pos(); + BlockState newState = level.getBlockState(pos); + if (!newState.is(candidate.block())) { + continue; + } + BlockState shapedState = candidate.block().defaultBlockState() + .setValue(SHAPE, candidate.shape()) + .setValue(TILE_POSITION, tile.tilePosition()) + .setValue(ROTATION, rotation); + if (!newState.equals(shapedState)) { + level.setBlock(pos, shapedState, Block.UPDATE_CLIENTS); + } + assigned.add(pos); + } + } + }); + } + + private static void collectCandidates(ServerLevel level, int y, int minX, int maxX, int minZ, int maxZ, List out) { + addRectCandidates(level, y, minX, maxX, minZ, maxZ, Shape.THREE_BY_THREE, GridLayouts.THREE_BY_THREE, out); + addRectCandidates(level, y, minX, maxX, minZ, maxZ, Shape.TWO_BY_TWO, GridLayouts.TWO_BY_TWO, out); + addRectCandidates(level, y, minX, maxX, minZ, maxZ, Shape.TWO_BY_ONE, GridLayouts.TWO_BY_ONE_HORIZONTAL, out); + addRectCandidates(level, y, minX, maxX, minZ, maxZ, Shape.TWO_BY_ONE, GridLayouts.TWO_BY_ONE_VERTICAL, out); + addRectCandidates(level, y, minX, maxX, minZ, maxZ, Shape.SINGLE, GridLayouts.SINGLE, out); + } + + private static void addRectCandidates(ServerLevel level, int y, int minX, int maxX, int minZ, int maxZ, Shape shape, GridLayout layout, List out) { + int width = layout.width(); + int height = layout.height(); + for (int anchorX = minX; anchorX <= maxX - width + 1; anchorX++) { + for (int anchorZ = minZ; anchorZ <= maxZ - height + 1; anchorZ++) { + BlockPos anchor = new BlockPos(anchorX, y, anchorZ); + ShapeCandidate candidate = createCandidate(level, anchor, shape, layout); + if (candidate != null) { + out.add(candidate); + } + } + } + } + + @Nullable + private static ShapeCandidate createCandidate(ServerLevel level, BlockPos anchor, Shape shape, GridLayout layout) { + BlockState anchorState = level.getBlockState(anchor); + if (!(anchorState.getBlock() instanceof GiantLilyPadBlock giantLilyPadBlock)) { + return null; + } + + List tiles = new ArrayList<>(layout.width() * layout.height()); + for (int row = 0; row < layout.height(); row++) { + for (int column = 0; column < layout.width(); column++) { + BlockPos pos = anchor.offset(column, 0, row); + if (!level.getBlockState(pos).is(giantLilyPadBlock)) { + return null; + } + TilePosition tilePosition = layout.tiles()[row][column]; + tiles.add(new TileAssignment(pos, tilePosition)); + } + } + + return new ShapeCandidate(giantLilyPadBlock, shape, anchor, tiles); + } + + private static boolean isRestructuring() { + return RESTRUCTURING_DEPTH.get() > 0; + } + + private static void withRestructuringGuard(Runnable action) { + RESTRUCTURING_DEPTH.set(RESTRUCTURING_DEPTH.get() + 1); + try { + action.run(); + } finally { + RESTRUCTURING_DEPTH.set(Math.max(0, RESTRUCTURING_DEPTH.get() - 1)); + } + } + + private static PadRotation rotationFor(ServerLevel level, BlockPos anchor) { + long seed = level.getSeed(); + long mix = seed + ^ anchor.asLong() + ^ Long.rotateLeft(seed, 17) + ^ Long.rotateLeft(anchor.asLong(), 31); + int index = (int) Math.floorMod(mix, 4L); + return PadRotation.values()[index]; + } + + private record ShapeCandidate(GiantLilyPadBlock block, Shape shape, BlockPos anchor, List tiles) { + int area() { + return this.tiles.size(); + } + + List positions() { + return this.tiles.stream().map(TileAssignment::pos).toList(); + } + } + + private record TileAssignment(BlockPos pos, TilePosition tilePosition) { + } + + private record GridLayout(TilePosition[][] tiles) { + int width() { + return this.tiles[0].length; + } + + int height() { + return this.tiles.length; + } + } + + private static final class GridLayouts { + private static final GridLayout SINGLE = new GridLayout(new TilePosition[][]{ + {TilePosition.SINGLE} + }); + + private static final GridLayout TWO_BY_ONE_HORIZONTAL = new GridLayout(new TilePosition[][]{ + {TilePosition.MIDDLE_LEFT, TilePosition.MIDDLE_RIGHT} + }); + + private static final GridLayout TWO_BY_ONE_VERTICAL = new GridLayout(new TilePosition[][]{ + {TilePosition.TOP_MIDDLE}, + {TilePosition.BOTTOM_MIDDLE} + }); + + private static final GridLayout TWO_BY_TWO = new GridLayout(new TilePosition[][]{ + {TilePosition.TOP_LEFT, TilePosition.TOP_RIGHT}, + {TilePosition.BOTTOM_LEFT, TilePosition.BOTTOM_RIGHT} + }); + + private static final GridLayout THREE_BY_THREE = new GridLayout(new TilePosition[][]{ + {TilePosition.TOP_LEFT, TilePosition.TOP_MIDDLE, TilePosition.TOP_RIGHT}, + {TilePosition.MIDDLE_LEFT, TilePosition.CENTER, TilePosition.MIDDLE_RIGHT}, + {TilePosition.BOTTOM_LEFT, TilePosition.BOTTOM_MIDDLE, TilePosition.BOTTOM_RIGHT} + }); + + private GridLayouts() { + } + } + + public enum Shape implements StringRepresentable { + SINGLE("single"), + TWO_BY_ONE("two_by_one"), + TWO_BY_TWO("two_by_two"), + THREE_BY_THREE("three_by_three"); + + private final String name; + + Shape(String name) { + this.name = name; + } + + @Override + public String getSerializedName() { + return this.name; + } + } + + public enum TilePosition implements StringRepresentable { + SINGLE("single"), + 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/src/main/java/com/craisinlord/antarchy/content/block/HangingPeachBlock.java b/common/src/main/java/com/craisinlord/antarchy/content/block/HangingPeachBlock.java new file mode 100644 index 00000000..6eead20a --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/block/HangingPeachBlock.java @@ -0,0 +1,70 @@ +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 { + public static final MapCodec CODEC = Block.simpleCodec(HangingPeachBlock::new); + private static final ResourceLocation PEACH_LEAVES_ID = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "peach_leaves"); + private static final ResourceLocation PEACH_ITEM_ID = ResourceLocation.fromNamespaceAndPath(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 MapCodec codec() { + return CODEC; + } + + @Override + protected VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + return SHAPE; + } + + @Override + protected VoxelShape getCollisionShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + return Shapes.empty(); + } + + @Override + public ItemStack getCloneItemStack(LevelReader level, BlockPos pos, BlockState state) { + return new ItemStack(BuiltInRegistries.ITEM.getOptional(PEACH_ITEM_ID).orElse(Blocks.AIR.asItem())); + } + + @Override + protected 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 + 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/src/main/java/com/craisinlord/antarchy/content/block/OuranwoodVineBlock.java b/common/src/main/java/com/craisinlord/antarchy/content/block/OuranwoodVineBlock.java deleted file mode 100644 index a8c023c9..00000000 --- a/common/src/main/java/com/craisinlord/antarchy/content/block/OuranwoodVineBlock.java +++ /dev/null @@ -1,41 +0,0 @@ -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.WeepingVinesBlock; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.block.state.BlockBehaviour; -import net.minecraft.world.phys.shapes.CollisionContext; -import net.minecraft.world.phys.shapes.Shapes; -import net.minecraft.world.phys.shapes.VoxelShape; - -@SuppressWarnings({"rawtypes", "unchecked"}) -public class OuranwoodVineBlock extends WeepingVinesBlock { - public static final MapCodec CODEC = simpleCodec(OuranwoodVineBlock::new); - private static Block bodyBlock; - - public OuranwoodVineBlock(BlockBehaviour.Properties properties) { - super(properties); - } - - @Override - public MapCodec codec() { - return (MapCodec) CODEC; - } - - @Override - protected Block getBodyBlock() { - return bodyBlock; - } - - @Override - protected VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { - return Shapes.block(); - } - - public static void bindBodyBlock(Block block) { - bodyBlock = block; - } -} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/block/OuranwoodVinePlantBlock.java b/common/src/main/java/com/craisinlord/antarchy/content/block/OuranwoodVinePlantBlock.java deleted file mode 100644 index 4d663c0b..00000000 --- a/common/src/main/java/com/craisinlord/antarchy/content/block/OuranwoodVinePlantBlock.java +++ /dev/null @@ -1,42 +0,0 @@ -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.GrowingPlantHeadBlock; -import net.minecraft.world.level.block.WeepingVinesBlock; -import net.minecraft.world.level.block.WeepingVinesPlantBlock; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.block.state.BlockBehaviour; -import net.minecraft.world.phys.shapes.CollisionContext; -import net.minecraft.world.phys.shapes.Shapes; -import net.minecraft.world.phys.shapes.VoxelShape; - -@SuppressWarnings({"rawtypes", "unchecked"}) -public class OuranwoodVinePlantBlock extends WeepingVinesPlantBlock { - public static final MapCodec CODEC = simpleCodec(OuranwoodVinePlantBlock::new); - private static GrowingPlantHeadBlock headBlock; - - public OuranwoodVinePlantBlock(BlockBehaviour.Properties properties) { - super(properties); - } - - @Override - public MapCodec codec() { - return (MapCodec) CODEC; - } - - @Override - protected GrowingPlantHeadBlock getHeadBlock() { - return headBlock; - } - - @Override - protected VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { - return Shapes.block(); - } - - public static void bindHeadBlock(WeepingVinesBlock block) { - headBlock = block; - } -} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/block/PeachLeavesBlock.java b/common/src/main/java/com/craisinlord/antarchy/content/block/PeachLeavesBlock.java new file mode 100644 index 00000000..1ac4bc33 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/block/PeachLeavesBlock.java @@ -0,0 +1,88 @@ +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.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +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.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.material.FluidState; +import net.minecraft.world.level.material.Fluids; + +public class PeachLeavesBlock extends LeavesBlock implements BonemealableBlock { + public static final MapCodec CODEC = Block.simpleCodec(PeachLeavesBlock::new); + private static final ResourceLocation HANGING_PEACH_ID = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "hanging_peach"); + + public PeachLeavesBlock(BlockBehaviour.Properties properties) { + super(properties); + this.registerDefaultState(this.defaultBlockState() + .setValue(DISTANCE, DECAY_DISTANCE) + .setValue(PERSISTENT, false) + .setValue(WATERLOGGED, false)); + } + + @Override + public MapCodec codec() { + return CODEC; + } + + @Override + public BlockState getStateForPlacement(BlockPlaceContext context) { + FluidState fluidState = context.getLevel().getFluidState(context.getClickedPos()); + return this.defaultBlockState() + .setValue(PERSISTENT, true) + .setValue(WATERLOGGED, fluidState.getType() == Fluids.WATER); + } + + @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) { + 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)); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/block/PeachSaplingBlock.java b/common/src/main/java/com/craisinlord/antarchy/content/block/PeachSaplingBlock.java new file mode 100644 index 00000000..d6363788 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/block/PeachSaplingBlock.java @@ -0,0 +1,134 @@ +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 static final MapCodec CODEC = Block.simpleCodec(PeachSaplingBlock::new); + + public PeachSaplingBlock(BlockBehaviour.Properties properties) { + super(properties); + } + + @Override + public MapCodec codec() { + return CODEC; + } + + @Override + protected 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 + protected 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) { + 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/src/main/java/com/craisinlord/antarchy/content/block/SpiderLilyBlock.java b/common/src/main/java/com/craisinlord/antarchy/content/block/SpiderLilyBlock.java new file mode 100644 index 00000000..3378d48f --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/block/SpiderLilyBlock.java @@ -0,0 +1,30 @@ +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 { + public static final MapCodec CODEC = Block.simpleCodec(SpiderLilyBlock::new); + 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 MapCodec codec() { + return CODEC; + } + + @Override + protected VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + return SHAPE; + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/block/StarCoralBlock.java b/common/src/main/java/com/craisinlord/antarchy/content/block/StarCoralBlock.java new file mode 100644 index 00000000..c89a97df --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/block/StarCoralBlock.java @@ -0,0 +1,73 @@ +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 { + public static final MapCodec DEAD_CORAL_FIELD = BuiltInRegistries.BLOCK.byNameCodec().fieldOf("dead"); + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec( + instance -> instance.group(DEAD_CORAL_FIELD.forGetter(block -> block.deadBlock), propertiesCodec()).apply(instance, StarCoralBlock::new) + ); + private final Block deadBlock; + + public StarCoralBlock(Block deadBlock, Properties properties) { + super(properties); + this.deadBlock = deadBlock; + } + + @Override + public MapCodec codec() { + return CODEC; + } + + @Override + protected void tick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { + if (!this.scanForWater(level, pos)) { + level.setBlock(pos, this.deadBlock.defaultBlockState(), 2); + } + } + + @Override + protected 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/src/main/java/com/craisinlord/antarchy/content/block/StarCoralFanBlock.java b/common/src/main/java/com/craisinlord/antarchy/content/block/StarCoralFanBlock.java new file mode 100644 index 00000000..0adb2154 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/block/StarCoralFanBlock.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.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 { + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec( + instance -> instance.group(StarCoralBlock.DEAD_CORAL_FIELD.forGetter(block -> block.deadBlock), propertiesCodec()) + .apply(instance, StarCoralFanBlock::new) + ); + private final Block deadBlock; + + public StarCoralFanBlock(Block deadBlock, Properties properties) { + super(properties); + this.deadBlock = deadBlock; + } + + @Override + public MapCodec codec() { + return CODEC; + } + + @Override + protected void onPlace(BlockState state, Level level, BlockPos pos, BlockState oldState, boolean movedByPiston) { + this.tryScheduleDieTick(state, level, pos); + } + + @Override + protected 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 + protected 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/src/main/java/com/craisinlord/antarchy/content/block/StarCoralPlantBlock.java b/common/src/main/java/com/craisinlord/antarchy/content/block/StarCoralPlantBlock.java new file mode 100644 index 00000000..8330dee8 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/block/StarCoralPlantBlock.java @@ -0,0 +1,69 @@ +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 { + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec( + instance -> instance.group(StarCoralBlock.DEAD_CORAL_FIELD.forGetter(block -> block.deadBlock), propertiesCodec()) + .apply(instance, StarCoralPlantBlock::new) + ); + 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 MapCodec codec() { + return CODEC; + } + + @Override + protected void onPlace(BlockState state, Level level, BlockPos pos, BlockState oldState, boolean movedByPiston) { + this.tryScheduleDieTick(state, level, pos); + } + + @Override + protected 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 + protected 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 + protected VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + return SHAPE; + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/block/StarCoralWallFanBlock.java b/common/src/main/java/com/craisinlord/antarchy/content/block/StarCoralWallFanBlock.java new file mode 100644 index 00000000..7b91b2a3 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/block/StarCoralWallFanBlock.java @@ -0,0 +1,64 @@ +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 { + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec( + instance -> instance.group(StarCoralBlock.DEAD_CORAL_FIELD.forGetter(block -> block.deadBlock), propertiesCodec()) + .apply(instance, StarCoralWallFanBlock::new) + ); + private final Block deadBlock; + + public StarCoralWallFanBlock(Block deadBlock, Properties properties) { + super(properties); + this.deadBlock = deadBlock; + } + + @Override + public MapCodec codec() { + return CODEC; + } + + @Override + protected void onPlace(BlockState state, Level level, BlockPos pos, BlockState oldState, boolean movedByPiston) { + this.tryScheduleDieTick(state, level, pos); + } + + @Override + protected 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 + protected 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/src/main/java/com/craisinlord/antarchy/content/block/TorchflowerBushBlock.java b/common/src/main/java/com/craisinlord/antarchy/content/block/TorchflowerBushBlock.java deleted file mode 100644 index 00cf1a0d..00000000 --- a/common/src/main/java/com/craisinlord/antarchy/content/block/TorchflowerBushBlock.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.craisinlord.antarchy.content.block; - -import com.mojang.serialization.MapCodec; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.state.BlockBehaviour; - -public class TorchflowerBushBlock extends MilkweedBlock { - public static final MapCodec CODEC = Block.simpleCodec(TorchflowerBushBlock::new); - - public TorchflowerBushBlock(BlockBehaviour.Properties properties) { - super(properties); - } - - @Override - public MapCodec codec() { - return (MapCodec) (MapCodec) CODEC; - } -} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/block/VeryShortGrassBlock.java b/common/src/main/java/com/craisinlord/antarchy/content/block/VeryShortGrassBlock.java deleted file mode 100644 index eca0a8e4..00000000 --- a/common/src/main/java/com/craisinlord/antarchy/content/block/VeryShortGrassBlock.java +++ /dev/null @@ -1,52 +0,0 @@ -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.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.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.phys.shapes.CollisionContext; -import net.minecraft.world.phys.shapes.VoxelShape; - -public class VeryShortGrassBlock extends BushBlock implements BonemealableBlock { - public static final MapCodec CODEC = Block.simpleCodec(VeryShortGrassBlock::new); - - private static final VoxelShape SHAPE = Block.box(2.0, 0.0, 2.0, 14.0, 8.0, 14.0); - - public VeryShortGrassBlock(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 - public boolean isValidBonemealTarget(LevelReader level, BlockPos pos, BlockState state) { - 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) { - level.setBlock(pos, Blocks.SHORT_GRASS.defaultBlockState(), 3); - } -} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/block/VeryTallGrassBlock.java b/common/src/main/java/com/craisinlord/antarchy/content/block/VeryTallGrassBlock.java deleted file mode 100644 index 1bf0808a..00000000 --- a/common/src/main/java/com/craisinlord/antarchy/content/block/VeryTallGrassBlock.java +++ /dev/null @@ -1,170 +0,0 @@ -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.util.RandomSource; -import net.minecraft.util.StringRepresentable; -import net.minecraft.world.InteractionHand; -import net.minecraft.world.ItemInteractionResult; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.Items; -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.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.EnumProperty; -import net.minecraft.world.phys.BlockHitResult; -import org.jetbrains.annotations.Nullable; - -public class VeryTallGrassBlock extends BushBlock implements BonemealableBlock { - public static final MapCodec CODEC = Block.simpleCodec(VeryTallGrassBlock::new); - public static final EnumProperty PART = EnumProperty.create("part", Part.class); - - public VeryTallGrassBlock(BlockBehaviour.Properties properties) { - super(properties); - this.registerDefaultState(this.stateDefinition.any().setValue(PART, Part.LOWER)); - } - - @Override - public MapCodec codec() { - return CODEC; - } - - @Override - protected void createBlockStateDefinition(StateDefinition.Builder builder) { - builder.add(PART); - } - - @Override - protected boolean canSurvive(BlockState state, LevelReader level, BlockPos pos) { - return switch (state.getValue(PART)) { - case LOWER -> super.canSurvive(state, level, pos); - case MIDDLE -> level.getBlockState(pos.below()).is(this) - && level.getBlockState(pos.below()).getValue(PART) == Part.LOWER - && level.getBlockState(pos.above()).is(this) - && level.getBlockState(pos.above()).getValue(PART) == Part.UPPER; - case UPPER -> level.getBlockState(pos.below()).is(this) - && level.getBlockState(pos.below()).getValue(PART) == Part.MIDDLE; - }; - } - - @Override - protected BlockState updateShape( - BlockState state, - Direction direction, - BlockState neighborState, - LevelAccessor level, - BlockPos pos, - BlockPos neighborPos - ) { - Part part = state.getValue(PART); - if (part == Part.LOWER && direction == Direction.UP && (!neighborState.is(this) || neighborState.getValue(PART) != Part.MIDDLE)) { - return Blocks.AIR.defaultBlockState(); - } - if (part == Part.MIDDLE) { - if (direction == Direction.DOWN && (!neighborState.is(this) || neighborState.getValue(PART) != Part.LOWER)) { - return Blocks.AIR.defaultBlockState(); - } - if (direction == Direction.UP && (!neighborState.is(this) || neighborState.getValue(PART) != Part.UPPER)) { - return Blocks.AIR.defaultBlockState(); - } - } - if (part == Part.UPPER && direction == Direction.DOWN && (!neighborState.is(this) || neighborState.getValue(PART) != Part.MIDDLE)) { - return Blocks.AIR.defaultBlockState(); - } - return state.canSurvive(level, pos) ? super.updateShape(state, direction, neighborState, level, pos, neighborPos) : Blocks.AIR.defaultBlockState(); - } - - @Override - protected ItemInteractionResult useItemOn( - ItemStack stack, - 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 ItemInteractionResult.PASS_TO_DEFAULT_BLOCK_INTERACTION; - } - - return super.useItemOn(stack, state, level, pos, player, hand, hitResult); - } - - @Override - public boolean isValidBonemealTarget(LevelReader level, BlockPos pos, BlockState state) { - 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 - protected boolean canBeReplaced(BlockState state, BlockPlaceContext context) { - return false; - } - - @Nullable - @Override - public BlockState getStateForPlacement(BlockPlaceContext context) { - BlockPos pos = context.getClickedPos(); - Level level = context.getLevel(); - if (!level.getBlockState(pos.above()).canBeReplaced(context) || !level.getBlockState(pos.above(2)).canBeReplaced(context)) { - return null; - } - return super.getStateForPlacement(context); - } - - @Override - public void setPlacedBy(Level level, BlockPos pos, BlockState state, @Nullable net.minecraft.world.entity.LivingEntity placer, ItemStack stack) { - placeAt(level, pos, Block.UPDATE_ALL); - } - - public static void placeAt(LevelAccessor level, BlockPos pos, int flags) { - level.setBlock(pos, defaultState(Part.LOWER), flags); - level.setBlock(pos.above(), defaultState(Part.MIDDLE), flags); - level.setBlock(pos.above(2), defaultState(Part.UPPER), flags); - } - - private static BlockState defaultState(Part part) { - return net.minecraft.core.registries.BuiltInRegistries.BLOCK - .get(net.minecraft.resources.ResourceLocation.fromNamespaceAndPath("antarchy", "very_tall_grass")) - .defaultBlockState() - .setValue(PART, part); - } - - public enum Part implements StringRepresentable { - LOWER("lower"), - MIDDLE("middle"), - UPPER("upper"); - - private final String name; - - Part(String name) { - this.name = name; - } - - @Override - public String getSerializedName() { - return this.name; - } - } -} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/block/WildCornBlock.java b/common/src/main/java/com/craisinlord/antarchy/content/block/WildCornBlock.java new file mode 100644 index 00000000..4c87b9dc --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/block/WildCornBlock.java @@ -0,0 +1,63 @@ +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 static final MapCodec CODEC = Block.simpleCodec(WildCornBlock::new); + + public WildCornBlock(BlockBehaviour.Properties properties) { + super(properties); + this.registerDefaultState(this.stateDefinition.any().setValue(AGE, 3).setValue(HALF, DoubleBlockHalf.LOWER)); + } + + @Override + public MapCodec codec() { + return CODEC; + } + + @Override + protected boolean mayPlaceOn(BlockState state, BlockGetter level, BlockPos pos) { + return state.is(Blocks.GRASS_BLOCK); + } + + @Override + protected boolean isRandomlyTicking(BlockState state) { + return false; + } + + @Override + protected void randomTick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { + } + + @Override + public boolean isValidBonemealTarget(LevelReader level, BlockPos pos, BlockState state) { + 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(LevelReader level, BlockPos pos, BlockState state) { + return new ItemStack(AntarchyObjects.CORN.get()); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/model/ElkaModel.java b/common/src/main/java/com/craisinlord/antarchy/content/client/model/ElkaModel.java new file mode 100644 index 00000000..7b08e13e --- /dev/null +++ b/common/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 ResourceLocation.fromNamespaceAndPath(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/src/main/java/com/craisinlord/antarchy/content/client/model/GlimmerModel.java b/common/src/main/java/com/craisinlord/antarchy/content/client/model/GlimmerModel.java deleted file mode 100644 index b17874e3..00000000 --- a/common/src/main/java/com/craisinlord/antarchy/content/client/model/GlimmerModel.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.craisinlord.antarchy.content.client.model; - -import com.craisinlord.antarchy.Antarchy; -import com.craisinlord.antarchy.content.entity.GlimmerEntity; -import net.minecraft.resources.ResourceLocation; -import software.bernie.geckolib.model.GeoModel; - -public class GlimmerModel extends GeoModel { - private static final ResourceLocation ADULT_GEO = rl("geo/glimmer.geo.json"); - private static final ResourceLocation BABY_GEO = rl("geo/glimmer_baby.geo.json"); - private static final ResourceLocation ADULT_ANIM = rl("animations/glimmer.animation.json"); - private static final ResourceLocation BABY_ANIM = rl("animations/glimmer_baby.animation.json"); - private static final ResourceLocation ADULT_DAY = rl("textures/entity/glimmer/glimmer_day.png"); - private static final ResourceLocation ADULT_NIGHT = rl("textures/entity/glimmer/glimmer.png"); - private static final ResourceLocation BABY_DAY = rl("textures/entity/glimmer/glimmer_baby_day.png"); - private static final ResourceLocation BABY_NIGHT = rl("textures/entity/glimmer/glimmer_baby.png"); - public static final ResourceLocation ADULT_EMISSIVE = rl("textures/entity/glimmer/glimmer_emissive.png"); - public static final ResourceLocation BABY_EMISSIVE = rl("textures/entity/glimmer/glimmer_baby_emissive.png"); - - private static ResourceLocation rl(String path) { - return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, path); - } - - @Override - public ResourceLocation getModelResource(GlimmerEntity animatable) { - return animatable.isBaby() ? BABY_GEO : ADULT_GEO; - } - - @Override - public ResourceLocation getAnimationResource(GlimmerEntity animatable) { - return animatable.isBaby() ? BABY_ANIM : ADULT_ANIM; - } - - @Override - public ResourceLocation getTextureResource(GlimmerEntity animatable) { - return textureFor(animatable, animatable.getGlowBlend(0.0F) >= 0.5F); - } - - public static ResourceLocation textureFor(GlimmerEntity animatable, boolean glowing) { - if (animatable.isBaby()) { - return glowing ? BABY_NIGHT : BABY_DAY; - } - return glowing ? ADULT_NIGHT : ADULT_DAY; - } -} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/model/OuranwoodDeerModel.java b/common/src/main/java/com/craisinlord/antarchy/content/client/model/OuranwoodDeerModel.java new file mode 100644 index 00000000..cfedeb41 --- /dev/null +++ b/common/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 ResourceLocation.fromNamespaceAndPath(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/src/main/java/com/craisinlord/antarchy/content/client/model/TentacleModel.java b/common/src/main/java/com/craisinlord/antarchy/content/client/model/TentacleModel.java new file mode 100644 index 00000000..95d1ce53 --- /dev/null +++ b/common/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 ResourceLocation.fromNamespaceAndPath("antarchy", "geo/tentacle.geo.json"); + } + + @Override + public ResourceLocation getTextureResource(TentacleEntity animatable) { + return ResourceLocation.fromNamespaceAndPath("antarchy", "textures/entity/tentacle.png"); + } + + @Override + public ResourceLocation getAnimationResource(TentacleEntity animatable) { + return ResourceLocation.fromNamespaceAndPath("antarchy", "animations/tenctacle.animation.json"); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/model/glimmer/GlimmerFrogModel.java b/common/src/main/java/com/craisinlord/antarchy/content/client/model/glimmer/GlimmerFrogModel.java new file mode 100644 index 00000000..a71dfd60 --- /dev/null +++ b/common/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, int color) { + this.root.render(poseStack, buffer, packedLight, packedOverlay, color); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/model/glimmer/GlimmerModel.java b/common/src/main/java/com/craisinlord/antarchy/content/client/model/glimmer/GlimmerModel.java new file mode 100644 index 00000000..82bf3761 --- /dev/null +++ b/common/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/src/main/java/com/craisinlord/antarchy/content/GlimmerParticles.java b/common/src/main/java/com/craisinlord/antarchy/content/client/particle/GlimmerParticles.java similarity index 74% rename from common/src/main/java/com/craisinlord/antarchy/content/GlimmerParticles.java rename to common/src/main/java/com/craisinlord/antarchy/content/client/particle/GlimmerParticles.java index 4be4e240..0b5d6400 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/GlimmerParticles.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/particle/GlimmerParticles.java @@ -1,4 +1,4 @@ -package com.craisinlord.antarchy.content; +package com.craisinlord.antarchy.content.client.particle; import net.minecraft.core.particles.DustParticleOptions; import net.minecraft.server.level.ServerLevel; @@ -42,4 +42,22 @@ public final class GlimmerParticles { 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/src/main/java/com/craisinlord/antarchy/content/client/particle/PeachLeavesParticle.java b/common/src/main/java/com/craisinlord/antarchy/content/client/particle/PeachLeavesParticle.java new file mode 100644 index 00000000..fc1b60e3 --- /dev/null +++ b/common/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/src/main/java/com/craisinlord/antarchy/content/client/renderer/AppleCowRenderer.java b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/AppleCowRenderer.java index a46c13aa..90dee763 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/AppleCowRenderer.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/AppleCowRenderer.java @@ -53,7 +53,7 @@ public class AppleCowRenderer extends GeoEntityRenderer { 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)) { + if (!(animatable instanceof EnchantedGoldenAppleCow) || animatable.isBaby()) { return; } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/ElkaRenderer.java b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/ElkaRenderer.java new file mode 100644 index 00000000..80a42c0d --- /dev/null +++ b/common/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/src/main/java/com/craisinlord/antarchy/content/client/renderer/GlimmerRenderer.java b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/GlimmerRenderer.java deleted file mode 100644 index 65e3344c..00000000 --- a/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/GlimmerRenderer.java +++ /dev/null @@ -1,108 +0,0 @@ -package com.craisinlord.antarchy.content.client.renderer; - -import com.craisinlord.antarchy.content.client.model.GlimmerModel; -import com.craisinlord.antarchy.content.entity.GlimmerEntity; -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 GlimmerRenderer extends GeoEntityRenderer { - private static final float SHADOW_RADIUS = 0.5F; - - public GlimmerRenderer(EntityRendererProvider.Context context) { - super(context, new GlimmerModel()); - this.shadowRadius = SHADOW_RADIUS; - this.addRenderLayer(new GlimmerCrossfadeLayer(this)); - this.addRenderLayer(new GlimmerEmissiveLayer(this)); - } - - @Override - public RenderType getRenderType(GlimmerEntity animatable, ResourceLocation texture, @Nullable MultiBufferSource bufferSource, float partialTick) { - return RenderType.entityTranslucent(texture); - } - - @Override - public void preRender(PoseStack poseStack, GlimmerEntity animatable, BakedGeoModel model, @Nullable MultiBufferSource bufferSource, - @Nullable VertexConsumer buffer, boolean isReRender, float partialTick, int packedLight, int packedOverlay, int colour) { - super.preRender(poseStack, animatable, model, bufferSource, buffer, isReRender, partialTick, packedLight, packedOverlay, colour); - this.shadowRadius = SHADOW_RADIUS; - } - - private static final class GlimmerCrossfadeLayer extends GeoRenderLayer { - private GlimmerCrossfadeLayer(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) { - float glowBlend = animatable.getGlowBlend(partialTick); - if (glowBlend <= 0.0F || glowBlend >= 1.0F) { - return; - } - - boolean baseGlowing = glowBlend >= 0.5F; - float overlayAlpha = baseGlowing ? 1.0F - glowBlend : glowBlend; - if (overlayAlpha <= 0.0F) { - return; - } - - ResourceLocation overlayTexture = GlimmerModel.textureFor(animatable, !baseGlowing); - RenderType overlayType = RenderType.entityTranslucent(overlayTexture); - VertexConsumer overlayBuffer = bufferSource.getBuffer(overlayType); - int color = ((Math.max(0, Math.min(255, Math.round(overlayAlpha * 255.0F))) & 0xFF) << 24) | 0x00FFFFFF; - this.getRenderer().reRender( - bakedModel, - poseStack, - bufferSource, - animatable, - overlayType, - overlayBuffer, - partialTick, - packedLight, - packedOverlay, - color - ); - } - } - - 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) { - if (!animatable.isGlowingState()) { - return; - } - - ResourceLocation texture = animatable.isBaby() ? GlimmerModel.BABY_EMISSIVE : GlimmerModel.ADULT_EMISSIVE; - RenderType emissiveType = RenderType.eyes(texture); - VertexConsumer emissiveBuffer = bufferSource.getBuffer(emissiveType); - this.getRenderer().reRender( - bakedModel, - poseStack, - bufferSource, - animatable, - emissiveType, - emissiveBuffer, - partialTick, - 0xF000F0, - OverlayTexture.NO_OVERLAY, - 0xFFFFFFFF - ); - } - } -} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/OuranwoodDeerRenderer.java b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/OuranwoodDeerRenderer.java new file mode 100644 index 00000000..c1a1e6ce --- /dev/null +++ b/common/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/src/main/java/com/craisinlord/antarchy/content/client/renderer/PeachBoatRenderer.java b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/PeachBoatRenderer.java new file mode 100644 index 00000000..ecd6111a --- /dev/null +++ b/common/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(ResourceLocation.fromNamespaceAndPath("antarchy", "boat/peach"), MAIN_LAYER); + } + + public static ModelLayerLocation chestBoatLayer() { + return new ModelLayerLocation(ResourceLocation.fromNamespaceAndPath("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); + 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/src/main/java/com/craisinlord/antarchy/content/client/renderer/TentacleRenderer.java b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/TentacleRenderer.java new file mode 100644 index 00000000..fe8e1027 --- /dev/null +++ b/common/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/src/main/java/com/craisinlord/antarchy/content/client/renderer/glimmer/GlimmerRenderer.java b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/glimmer/GlimmerRenderer.java new file mode 100644 index 00000000..3c2dff29 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/glimmer/GlimmerRenderer.java @@ -0,0 +1,137 @@ +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 are + // always self-consistent (this is what caused the head to look "detached" from the body). + 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); + + int color = packColor(entity.getFadeAlpha(partialTick), brightnessFor(entity, partialTick)); + + ResourceLocation texture = entity.getVariant().getBehavior().texture(entity); + VertexConsumer buffer = bufferSource.getBuffer(RenderType.entityCutoutNoCull(texture)); + model.renderToBuffer(poseStack, buffer, packedLight, OverlayTexture.NO_OVERLAY, color); + + ResourceLocation emissiveTexture = entity.getVariant().getBehavior().emissiveTexture(entity); + VertexConsumer emissiveBuffer = bufferSource.getBuffer(RenderType.eyes(emissiveTexture)); + model.renderToBuffer(poseStack, emissiveBuffer, 0xF000F0, OverlayTexture.NO_OVERLAY, color); + + 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.util.Color getRenderColor(GlimmerEntity animatable, float partialTick, int packedLight) { + float brightness = brightnessFor(animatable, partialTick); + return software.bernie.geckolib.util.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, int colour) { + super.preRender(poseStack, animatable, model, bufferSource, buffer, isReRender, partialTick, packedLight, packedOverlay, colour); + 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, + packColor(animatable.getFadeAlpha(partialTick), brightnessFor(animatable, partialTick)) + ); + } + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/screen/DorrieInventoryScreen.java b/common/src/main/java/com/craisinlord/antarchy/content/client/screen/DorrieInventoryScreen.java new file mode 100644 index 00000000..d9dfd3a9 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/screen/DorrieInventoryScreen.java @@ -0,0 +1,69 @@ +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 = + ResourceLocation.withDefaultNamespace("textures/gui/container/horse.png"); + private static final ResourceLocation CHEST_SLOTS_SPRITE = + ResourceLocation.withDefaultNamespace("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.blitSprite(CHEST_SLOTS_SPRITE, CHEST_SLOTS_TEX_WIDTH, CHEST_SLOTS_TEX_HEIGHT, 0, 0, + left + 79, top + 17, storageWidth, CHEST_SLOTS_TEX_HEIGHT); + guiGraphics.blitSprite(CHEST_SLOTS_SPRITE, CHEST_SLOTS_TEX_WIDTH, CHEST_SLOTS_TEX_HEIGHT, 0, 0, + left + 7, top + 17, 18, 18); + + DorrieEntity dorrie = this.menu.dorrie(); + if (dorrie != null) { + InventoryScreen.renderEntityInInventoryFollowsMouse( + guiGraphics, + left + 8, + top + 18, + left + 71, + top + 70, + 24, + 0.25F, + this.xMouse, + this.yMouse, + dorrie + ); + } + } + + @Override + public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTick) { + this.xMouse = mouseX; + this.yMouse = mouseY; + this.renderBackground(guiGraphics, mouseX, mouseY, partialTick); + super.render(guiGraphics, mouseX, mouseY, partialTick); + this.renderTooltip(guiGraphics, mouseX, mouseY); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/effect/GlimmersGraceMobEffect.java b/common/src/main/java/com/craisinlord/antarchy/content/effect/GlimmersGraceMobEffect.java deleted file mode 100644 index 4a44f095..00000000 --- a/common/src/main/java/com/craisinlord/antarchy/content/effect/GlimmersGraceMobEffect.java +++ /dev/null @@ -1,68 +0,0 @@ -package com.craisinlord.antarchy.content.effect; - -import com.craisinlord.antarchy.Antarchy; -import com.craisinlord.antarchy.content.GlimmerParticles; -import net.minecraft.core.Holder; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.effect.MobEffect; -import net.minecraft.world.effect.MobEffectCategory; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.entity.ai.attributes.Attribute; -import net.minecraft.world.entity.ai.attributes.AttributeInstance; -import net.minecraft.world.entity.ai.attributes.AttributeMap; -import net.minecraft.world.entity.ai.attributes.AttributeModifier; -import net.minecraft.world.entity.ai.attributes.Attributes; - -public final class GlimmersGraceMobEffect extends MobEffect { - private static final ResourceLocation SPEED_MODIFIER_ID = - ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "glimmers_grace_speed"); - private static final ResourceLocation JUMP_MODIFIER_ID = - ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "glimmers_grace_jump"); - private static final ResourceLocation FALL_DAMAGE_MODIFIER_ID = - ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "glimmers_grace_fall_damage"); - - public GlimmersGraceMobEffect() { - super(MobEffectCategory.BENEFICIAL, 0x7FDBFF); - } - - @Override - public void addAttributeModifiers(AttributeMap attributeMap, int amplifier) { - addModifier(attributeMap, Attributes.MOVEMENT_SPEED, SPEED_MODIFIER_ID, 0.35D * (amplifier + 1)); - addModifier(attributeMap, Attributes.JUMP_STRENGTH, JUMP_MODIFIER_ID, 0.5D * (amplifier + 1)); - addModifier(attributeMap, Attributes.FALL_DAMAGE_MULTIPLIER, FALL_DAMAGE_MODIFIER_ID, -0.6D * (amplifier + 1)); - } - - @Override - public void removeAttributeModifiers(AttributeMap attributeMap) { - removeModifier(attributeMap, Attributes.MOVEMENT_SPEED, SPEED_MODIFIER_ID); - removeModifier(attributeMap, Attributes.JUMP_STRENGTH, JUMP_MODIFIER_ID); - removeModifier(attributeMap, Attributes.FALL_DAMAGE_MULTIPLIER, FALL_DAMAGE_MODIFIER_ID); - } - - @Override - public boolean shouldApplyEffectTickThisTick(int duration, int amplifier) { - return true; - } - - @Override - public boolean applyEffectTick(LivingEntity livingEntity, int amplifier) { - GlimmerParticles.tickAmbient(livingEntity, livingEntity.getDeltaMovement().horizontalDistanceSqr() > 0.01D); - return true; - } - - private static void addModifier(AttributeMap attributeMap, Holder attribute, ResourceLocation id, double amount) { - AttributeInstance instance = attributeMap.getInstance(attribute); - if (instance == null) { - return; - } - instance.addTransientModifier(new AttributeModifier(id, amount, AttributeModifier.Operation.ADD_MULTIPLIED_TOTAL)); - } - - private static void removeModifier(AttributeMap attributeMap, Holder attribute, ResourceLocation id) { - AttributeInstance instance = attributeMap.getInstance(attribute); - if (instance == null) { - return; - } - instance.removeModifier(id); - } -} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/DorrieEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/DorrieEntity.java index 67a28023..00b629fb 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/entity/DorrieEntity.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/DorrieEntity.java @@ -6,6 +6,7 @@ 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; @@ -42,6 +43,8 @@ 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.PathType; import net.minecraft.world.phys.Vec3; @@ -57,6 +60,9 @@ import software.bernie.geckolib.util.GeckoLibUtil; public class DorrieEntity extends Animal implements GeoEntity { private static final ResourceLocation CHEEP_ITEM_ID = ResourceLocation.fromNamespaceAndPath("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); @@ -67,12 +73,13 @@ public class DorrieEntity extends Animal implements GeoEntity { private static final EntityDataAccessor QUIRK_TICKS = SynchedEntityData.defineId(DorrieEntity.class, EntityDataSerializers.INT); - private static final int MAX_CHARGE_TICKS = 40; - private static final float WATER_RIDE_SPEED = 0.78F; - private static final float LAND_BEACH_SPEED = 0.10F; + private static final int MAX_CHARGE_TICKS = 90; + 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 = 140; - private static final int MAX_QUIRK_COOLDOWN_TICKS = 260; + 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"); @@ -87,6 +94,13 @@ public class DorrieEntity extends Animal implements GeoEntity { 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; @@ -101,6 +115,7 @@ public class DorrieEntity extends Animal implements GeoEntity { 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); @@ -131,8 +146,8 @@ public class DorrieEntity extends Animal implements GeoEntity { 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.35D, 8)); - this.goalSelector.addGoal(4, new WaterAvoidingRandomStrollGoal(this, 0.72D, 40)); + 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)); } @@ -153,6 +168,10 @@ public class DorrieEntity extends Animal implements GeoEntity { this.entityData.set(HAS_SADDLE, saddle); } + public SimpleContainer inventory() { + return this.inventory; + } + public boolean isTamed() { return this.entityData.get(TAMED); } @@ -181,16 +200,38 @@ public class DorrieEntity extends Animal implements GeoEntity { public void addAdditionalSaveData(CompoundTag tag) { super.addAdditionalSaveData(tag); tag.putBoolean("Tamed", this.isTamed()); - tag.putBoolean("HasSaddle", this.hasSaddle()); 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(this.registryAccess())); + inventoryTag.add(stackTag); + } + tag.put(INVENTORY_TAG, inventoryTag); } @Override public void readAdditionalSaveData(CompoundTag tag) { super.readAdditionalSaveData(tag); this.setTamed(tag.getBoolean("Tamed")); - this.setSaddle(tag.getBoolean("HasSaddle")); 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.parseOptional(this.registryAccess(), stackTag.getCompound("Item"))); + } + this.syncSaddleState(); } @Override @@ -204,38 +245,24 @@ public class DorrieEntity extends Animal implements GeoEntity { return InteractionResult.sidedSuccess(this.level().isClientSide); } - if (this.hasSaddle() && !player.isPassengerOfSameVehicle(this)) { - if (!stack.isEmpty()) { - return super.mobInteract(player, hand); - } - - if (!player.isShiftKeyDown()) { - 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) { - this.setSaddle(false); - this.spawnAtLocation(new ItemStack(Items.SADDLE)); - this.playSound(SoundEvents.HORSE_SADDLE, 1.0F, 1.0F); + player.startRiding(this); } return InteractionResult.sidedSuccess(this.level().isClientSide); } - if (!this.hasSaddle() && stack.is(Items.SADDLE)) { - if (!this.level().isClientSide) { - this.setSaddle(true); - if (!player.getAbilities().instabuild) { - stack.shrink(1); - } - this.playSound(SoundEvents.HORSE_SADDLE, 1.0F, 1.0F); - } - return InteractionResult.sidedSuccess(this.level().isClientSide); + if (!stack.isEmpty() && this.isFood(stack)) { + return super.mobInteract(player, hand); } - return super.mobInteract(player, hand); + this.openInventory(player); + return InteractionResult.sidedSuccess(this.level().isClientSide); } @Override @@ -268,7 +295,7 @@ public class DorrieEntity extends Animal implements GeoEntity { @Override protected float getRiddenSpeed(Player player) { float speed = (this.isInWater() || this.isInLava()) - ? WATER_RIDE_SPEED * (1.0F + Math.min(this.swimForwardTicks, 60) * 0.03F) + ? WATER_RIDE_SPEED * (1.0F + Math.min(this.swimForwardTicks, 60) * 0.0125F) : LAND_BEACH_SPEED; return (float) this.getAttributeValue(Attributes.MOVEMENT_SPEED) * speed; } @@ -300,6 +327,10 @@ public class DorrieEntity extends Animal implements GeoEntity { 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) { @@ -338,7 +369,9 @@ public class DorrieEntity extends Animal implements GeoEntity { wasInAir = inAirNow; } - public void setPressingJump(boolean pressing) {} + public void setPressingJump(boolean pressing) { + this.pressingJump = pressing; + } public void startJumpCharge() { if (!this.level().isClientSide) { @@ -365,16 +398,22 @@ public class DorrieEntity extends Animal implements GeoEntity { Vec3 riddenInput = this.getRiddenInput(rider, travelVector); this.setSpeed(this.getRiddenSpeed(rider)); + if (this.isLeaping) { + super.travel(travelVector); + 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.isLeaping) { - if (this.isUnderWater()) { - vertical = riddenInput.y * 0.025D; - } else if (riddenInput.y < 0.0D) { - vertical = riddenInput.y * 0.02D; - } + 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, @@ -396,7 +435,7 @@ public class DorrieEntity extends Animal implements GeoEntity { Vec3 look = this.getLookAngle(); Vec3 current = this.getDeltaMovement(); double forwardAdd = 0.18D + power * 0.42D; - double vertical = 0.28D + power * 0.62D; + double vertical = 0.85D + power * 1.35D; this.setDeltaMovement( current.x + look.x * forwardAdd, current.y + vertical, @@ -429,9 +468,34 @@ public class DorrieEntity extends Animal implements GeoEntity { @Override protected void dropEquipment() { super.dropEquipment(); - if (this.hasSaddle()) { - this.spawnAtLocation(new ItemStack(Items.SADDLE)); + 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 @@ -567,7 +631,7 @@ public class DorrieEntity extends Animal implements GeoEntity { private boolean canUseQuirkAnimation() { return this.isInWater() && !this.isUnderWater() - && this.getControllingPassenger() == null + && !this.isVehicle() && !this.isLeaping && this.landAnimTicks <= 0 && !this.isCharging @@ -653,7 +717,7 @@ public class DorrieEntity extends Animal implements GeoEntity { private class DolphinSwimGoal extends Goal { private static final int COOLDOWN_MIN_TICKS = 120; - private static final int COOLDOWN_MAX_TICKS = 240; + 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; @@ -691,7 +755,7 @@ public class DorrieEntity extends Animal implements GeoEntity { this.cooldownTicks--; return false; } - if (DorrieEntity.this.random.nextInt(6) != 0) { + if (DorrieEntity.this.random.nextInt(3) != 0) { return false; } this.targetPos = DorrieEntity.this.isUnderWater() diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/ElkaEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/ElkaEntity.java new file mode 100644 index 00000000..0a3ea56e --- /dev/null +++ b/common/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.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 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(SynchedEntityData.Builder builder) { + super.defineSynchedData(builder); + builder.define(SITTING, false); + builder.define(QUIRK_TICKS, 0); + builder.define(QUIRK_VARIANT, 0); + builder.define(ATTACK_TICKS, 0); + builder.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 getDefaultDimensions(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/src/main/java/com/craisinlord/antarchy/content/entity/ElythiaFrog.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/ElythiaFrog.java new file mode 100644 index 00000000..5a1a130b --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/ElythiaFrog.java @@ -0,0 +1,38 @@ +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, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "elythia") + ); + public static final ResourceKey VARIANT = ResourceKey.create( + net.minecraft.core.registries.Registries.FROG_VARIANT, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "elythia") + ); + public static final ResourceLocation TEXTURE = + ResourceLocation.fromNamespaceAndPath(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) { + BuiltInRegistries.FROG_VARIANT.getHolder(VARIANT).ifPresent(frog::setVariant); + } + + public static boolean isElythiaFrog(Frog frog) { + return frog.getVariant().unwrapKey().filter(VARIANT::equals).isPresent(); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/GlimmerEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/GlimmerEntity.java deleted file mode 100644 index 79732784..00000000 --- a/common/src/main/java/com/craisinlord/antarchy/content/entity/GlimmerEntity.java +++ /dev/null @@ -1,430 +0,0 @@ -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.GlimmerParticles; -import java.util.EnumSet; -import java.util.HashMap; -import java.util.Map; -import java.util.UUID; -import net.minecraft.core.BlockPos; -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.sounds.SoundEvent; -import net.minecraft.sounds.SoundEvents; -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.effect.MobEffectInstance; -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.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.goal.WaterAvoidingRandomStrollGoal; -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.level.pathfinder.Path; -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.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 GlimmerEntity extends Animal implements GeoEntity { - private static final EntityDataAccessor GLOW_TICKS = - SynchedEntityData.defineId(GlimmerEntity.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 RUN_ANIM = RawAnimation.begin().thenLoop("run"); - private static final String QUIRK_CONTROLLER = "quirk_controller"; - private static final String QUIRK_TRIGGER = "quirk"; - - private static final int TRUST_REQUIRED_FEEDS = 3; - private static final int GRACE_DURATION_TICKS = 2400; - private static final int GRACE_COOLDOWN_TICKS = 6000; - private static final int GLOW_LIGHT_THRESHOLD = 7; - private static final int GLOW_CHECK_INTERVAL_TICKS = 20; - private static final int GLOW_TRANSITION_TICKS = 10; - private static final double WALK_SPEED_THRESHOLD_SQR = 0.0009D; - private static final double RUN_SPEED_THRESHOLD_SQR = 0.0035D; - - private static final int MIN_QUIRK_COOLDOWN = 20 * 8; - private static final int MAX_QUIRK_COOLDOWN = 20 * 25; - - private static final String TRUST_KEY = "GlimmerTrust"; - private static final String TRUST_PLAYER_KEY = "Player"; - private static final String TRUST_FEED_COUNT_KEY = "FeedCount"; - private static final String TRUST_TRUSTED_KEY = "Trusted"; - private static final String TRUST_COOLDOWN_KEY = "GraceCooldown"; - private static final String GLOWING_SAVE_KEY = "Glowing"; - - private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); - private final Map trustByPlayer = new HashMap<>(); - - private boolean glowing; - private int quirkCooldown = createQuirkCooldown(); - - public GlimmerEntity(EntityType entityType, Level level) { - super(entityType, level); - } - - public static AttributeSupplier.Builder createAttributes() { - return net.minecraft.world.entity.Mob.createMobAttributes() - .add(Attributes.MAX_HEALTH, AntarchySettings.glimmerHealth()) - .add(Attributes.MOVEMENT_SPEED, 0.3D) - .add(Attributes.FOLLOW_RANGE, 24.0D); - } - - @Override - protected void defineSynchedData(SynchedEntityData.Builder builder) { - super.defineSynchedData(builder); - builder.define(GLOW_TICKS, 0); - } - - @Override - protected void registerGoals() { - this.goalSelector.addGoal(0, new FloatGoal(this)); - this.goalSelector.addGoal(1, new PanicGoal(this, 1.6D)); - this.goalSelector.addGoal(2, new TemptGoal(this, 1.1D, Ingredient.of(AntarchyTags.Items.GLIMMER_FOOD), false)); - this.goalSelector.addGoal(3, new AvoidUntrustedPlayerGoal(10.0F, 1.15D)); - this.goalSelector.addGoal(4, new net.minecraft.world.entity.ai.goal.AvoidEntityGoal<>(this, Monster.class, 8.0F, 1.0D, 1.2D)); - this.goalSelector.addGoal(5, new FollowParentGoal(this, 1.25D)); - this.goalSelector.addGoal(6, new WaterAvoidingRandomStrollGoal(this, 1.0D)); - 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.GLIMMER_FOOD); - } - - @Override - public GlimmerEntity getBreedOffspring(ServerLevel level, AgeableMob otherParent) { - return null; - } - - @Override - public InteractionResult mobInteract(Player player, InteractionHand hand) { - ItemStack stack = player.getItemInHand(hand); - if (stack.is(AntarchyTags.Items.GLIMMER_FOOD)) { - return this.feedGlimmerFood(player, stack, hand); - } - return super.mobInteract(player, hand); - } - - private InteractionResult feedGlimmerFood(Player player, ItemStack stack, InteractionHand hand) { - if (this.level().isClientSide) { - return InteractionResult.CONSUME; - } - - this.usePlayerItem(player, hand, stack); - this.playSound(SoundEvents.GENERIC_EAT, 1.0F, 1.0F + (this.random.nextFloat() - 0.5F) * 0.2F); - - if (!this.isBaby()) { - TrustEntry entry = this.trustByPlayer.computeIfAbsent(player.getUUID(), id -> new TrustEntry()); - if (!entry.trusted) { - entry.feedCount++; - if (entry.feedCount >= TRUST_REQUIRED_FEEDS) { - entry.trusted = true; - } - } else if (this.glowing && entry.graceCooldown <= 0) { - player.addEffect(new MobEffectInstance(AntarchyObjects.GLIMMERS_GRACE.get(), GRACE_DURATION_TICKS, 0, false, true, true)); - entry.graceCooldown = GRACE_COOLDOWN_TICKS; - } - } - - return InteractionResult.SUCCESS; - } - - public boolean isTrusted(UUID playerId) { - TrustEntry entry = this.trustByPlayer.get(playerId); - return entry != null && entry.trusted; - } - - private boolean hasAnyTrustProgress() { - for (TrustEntry entry : this.trustByPlayer.values()) { - if (entry.trusted || entry.feedCount > 0) { - return true; - } - } - return false; - } - - @Override - public boolean isPersistenceRequired() { - return super.isPersistenceRequired() || (!this.isBaby() && this.hasAnyTrustProgress()); - } - - public boolean isGlowingState() { - return this.getGlowTicks() > 0; - } - - public float getGlowBlend(float partialTick) { - return Mth.clamp((this.getGlowTicks() + partialTick) / (float) GLOW_TRANSITION_TICKS, 0.0F, 1.0F); - } - - @Override - public void tick() { - super.tick(); - - if (this.quirkCooldown > 0) { - this.quirkCooldown--; - } - - if (!this.level().isClientSide && this.tickCount % GLOW_CHECK_INTERVAL_TICKS == 0) { - this.glowing = this.level().getMaxLocalRawBrightness(this.blockPosition()) <= GLOW_LIGHT_THRESHOLD; - } - - if (!this.level().isClientSide) { - int glowTicks = this.getGlowTicks(); - if (this.glowing && glowTicks < GLOW_TRANSITION_TICKS) { - this.setGlowTicks(glowTicks + 1); - } else if (!this.glowing && glowTicks > 0) { - this.setGlowTicks(glowTicks - 1); - } - } - - if (this.isGlowingState()) { - GlimmerParticles.tickAmbient(this, this.getDeltaMovement().horizontalDistanceSqr() > RUN_SPEED_THRESHOLD_SQR); - } - - if (this.level().isClientSide) { - return; - } - - for (TrustEntry entry : this.trustByPlayer.values()) { - if (entry.graceCooldown > 0) { - entry.graceCooldown--; - } - } - } - - @Override - public void addAdditionalSaveData(CompoundTag tag) { - super.addAdditionalSaveData(tag); - tag.putBoolean(GLOWING_SAVE_KEY, this.glowing); - - ListTag trustList = new ListTag(); - for (Map.Entry entry : this.trustByPlayer.entrySet()) { - CompoundTag entryTag = new CompoundTag(); - entryTag.putUUID(TRUST_PLAYER_KEY, entry.getKey()); - entryTag.putInt(TRUST_FEED_COUNT_KEY, entry.getValue().feedCount); - entryTag.putBoolean(TRUST_TRUSTED_KEY, entry.getValue().trusted); - entryTag.putInt(TRUST_COOLDOWN_KEY, entry.getValue().graceCooldown); - trustList.add(entryTag); - } - tag.put(TRUST_KEY, trustList); - } - - @Override - public void readAdditionalSaveData(CompoundTag tag) { - super.readAdditionalSaveData(tag); - this.glowing = tag.getBoolean(GLOWING_SAVE_KEY); - this.setGlowTicks(this.glowing ? GLOW_TRANSITION_TICKS : 0); - - this.trustByPlayer.clear(); - for (net.minecraft.nbt.Tag rawEntry : tag.getList(TRUST_KEY, net.minecraft.nbt.Tag.TAG_COMPOUND)) { - CompoundTag entryTag = (CompoundTag) rawEntry; - TrustEntry entry = new TrustEntry(); - entry.feedCount = entryTag.getInt(TRUST_FEED_COUNT_KEY); - entry.trusted = entryTag.getBoolean(TRUST_TRUSTED_KEY); - entry.graceCooldown = entryTag.getInt(TRUST_COOLDOWN_KEY); - this.trustByPlayer.put(entryTag.getUUID(TRUST_PLAYER_KEY), entry); - } - } - - @Override - @Nullable - public SpawnGroupData finalizeSpawn(ServerLevelAccessor level, DifficultyInstance difficulty, MobSpawnType spawnReason, @Nullable SpawnGroupData spawnGroupData) { - GlimmerSpawnData glimmerSpawnData = spawnGroupData instanceof GlimmerSpawnData data ? data : new GlimmerSpawnData(); - SpawnGroupData result = super.finalizeSpawn(level, difficulty, spawnReason, spawnGroupData); - - if ((spawnReason == MobSpawnType.NATURAL || spawnReason == MobSpawnType.CHUNK_GENERATION)) { - if (glimmerSpawnData.adultSpawned) { - this.setAge(-24000); - } else { - glimmerSpawnData.adultSpawned = true; - } - } - - return result != null ? result : glimmerSpawnData; - } - - @Override - public net.minecraft.world.entity.EntityDimensions getDefaultDimensions(net.minecraft.world.entity.Pose pose) { - net.minecraft.world.entity.EntityDimensions dimensions = super.getDefaultDimensions(pose); - if (this.isBaby()) { - return dimensions; - } - return net.minecraft.world.entity.EntityDimensions.scalable(dimensions.width() * 2.0F, dimensions.height() * 2.0F); - } - - @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 (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 int getGlowTicks() { - return this.entityData.get(GLOW_TICKS); - } - - private void setGlowTicks(int glowTicks) { - this.entityData.set(GLOW_TICKS, Mth.clamp(glowTicks, 0, GLOW_TRANSITION_TICKS)); - } - - private static final class TrustEntry { - int feedCount; - boolean trusted; - int graceCooldown; - } - - private static final class GlimmerSpawnData implements SpawnGroupData { - private boolean adultSpawned; - } - - private final class AvoidUntrustedPlayerGoal extends Goal { - private final float maxDistance; - private final double speedModifier; - private Player avoidTarget; - private Path path; - - AvoidUntrustedPlayerGoal(float maxDistance, double speedModifier) { - this.maxDistance = maxDistance; - this.speedModifier = speedModifier; - this.setFlags(EnumSet.of(Flag.MOVE)); - } - - @Override - public boolean canUse() { - if (GlimmerEntity.this.isBaby()) { - return false; - } - - Player nearest = GlimmerEntity.this.level().getNearestPlayer(GlimmerEntity.this, this.maxDistance); - if (nearest == null || nearest.isSpectator() || nearest.isCreative() - || GlimmerEntity.this.isTrusted(nearest.getUUID()) - || GlimmerEntity.this.distanceToSqr(nearest) > (double) (this.maxDistance * this.maxDistance)) { - return false; - } - - Path escapePath = this.findEscapePath(nearest); - if (escapePath == null) { - return false; - } - - this.avoidTarget = nearest; - this.path = escapePath; - return true; - } - - @Override - public boolean canContinueToUse() { - return this.avoidTarget != null - && this.avoidTarget.isAlive() - && !GlimmerEntity.this.isTrusted(this.avoidTarget.getUUID()) - && !GlimmerEntity.this.getNavigation().isDone(); - } - - @Override - public void start() { - GlimmerEntity.this.getNavigation().moveTo(this.path, this.speedModifier); - } - - @Override - public void stop() { - this.avoidTarget = null; - this.path = null; - } - - @Nullable - private Path findEscapePath(Player toAvoid) { - Vec3 escapeVec = DefaultRandomPos.getPosAway(GlimmerEntity.this, 16, 7, toAvoid.position()); - if (escapeVec == null) { - return null; - } - return GlimmerEntity.this.getNavigation().createPath(BlockPos.containing(escapeVec), 0); - } - } -} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/OctopusBombEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/OctopusBombEntity.java index ecc3edbe..acc50272 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/entity/OctopusBombEntity.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/OctopusBombEntity.java @@ -86,6 +86,11 @@ public class OctopusBombEntity extends Monster implements GeoEntity { // 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); @@ -189,6 +194,14 @@ public class OctopusBombEntity extends Monster implements GeoEntity { 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; @@ -326,6 +339,13 @@ public class OctopusBombEntity extends Monster implements GeoEntity { 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 // ------------------------------------------------------------------------- @@ -352,6 +372,44 @@ public class OctopusBombEntity extends Monster implements GeoEntity { // Ink spray // ------------------------------------------------------------------------- + private boolean hasHitExplosiveTarget() { + AABB box = this.getBoundingBox(); + return !this.level().getEntitiesOfClass(LivingEntity.class, box, + e -> e.isAlive() && e != this && !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(this.damageSources().explosion(this, 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(ParticleTypes.SQUID_INK, this.getX(), this.getY(), this.getZ(), 60, radius * 0.4D, radius * 0.4D, radius * 0.4D, 0.05D); + serverLevel.sendParticles(ParticleTypes.EXPLOSION, this.getX(), this.getY(), this.getZ(), 3, 0.5D, 0.5D, 0.5D, 0.0D); + this.discard(); + } + private void tickInkSpray() { if (this.inkSprayCooldown > 0 || !(this.level() instanceof ServerLevel serverLevel)) return; diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/OuranwoodDeerEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/OuranwoodDeerEntity.java new file mode 100644 index 00000000..777b6f21 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/OuranwoodDeerEntity.java @@ -0,0 +1,303 @@ +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.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 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_SCALE = 1.5F; + 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(SynchedEntityData.Builder builder) { + super.defineSynchedData(builder); + builder.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) { + DeerSpawnData deerSpawnData = spawnGroupData instanceof DeerSpawnData data ? data : new DeerSpawnData(); + SpawnGroupData result = super.finalizeSpawn(level, difficulty, spawnReason, spawnGroupData); + + 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 getDefaultDimensions(net.minecraft.world.entity.Pose pose) { + net.minecraft.world.entity.EntityDimensions dimensions = super.getDefaultDimensions(pose); + if (this.isBaby()) { + return dimensions; + } + return net.minecraft.world.entity.EntityDimensions.scalable( + dimensions.width() * ADULT_HITBOX_SCALE, + dimensions.height() * ADULT_HITBOX_SCALE + ); + } + + @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/src/main/java/com/craisinlord/antarchy/content/entity/PeachBoatEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/PeachBoatEntity.java new file mode 100644 index 00000000..287f0148 --- /dev/null +++ b/common/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(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "peach_boat")); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/PeachChestBoatEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/PeachChestBoatEntity.java new file mode 100644 index 00000000..27779150 --- /dev/null +++ b/common/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(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "peach_chest_boat")); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/flying_squirrel/FlyingSquirrelEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/flying_squirrel/FlyingSquirrelEntity.java index 1c7dcc9f..6b12ca98 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/entity/flying_squirrel/FlyingSquirrelEntity.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/flying_squirrel/FlyingSquirrelEntity.java @@ -370,7 +370,7 @@ public class FlyingSquirrelEntity extends TamableAnimal implements GeoEntity { Player shoulderPlayer = this.shoulderPlayerId != null ? this.level().getPlayerByUUID(this.shoulderPlayerId) : null; - if (shoulderPlayer == null || !shoulderPlayer.isAlive()) { + if (shoulderPlayer == null || !shoulderPlayer.isAlive() || shoulderPlayer.isSpectator()) { this.dismountShoulder(); } else { this.tickClimbingToShoulder(shoulderPlayer); @@ -381,7 +381,7 @@ public class FlyingSquirrelEntity extends TamableAnimal implements GeoEntity { if (this.isOnShoulder()) { Player shoulderPlayer = this.getShoulderPlayer(); - if (shoulderPlayer == null || !shoulderPlayer.isAlive()) { + if (shoulderPlayer == null || !shoulderPlayer.isAlive() || shoulderPlayer.isSpectator()) { this.dismountShoulder(); } else if (this.shoulderSneakGraceTicks <= 0 && shoulderPlayer.isShiftKeyDown()) { this.glideOffShoulder(); @@ -555,6 +555,10 @@ public class FlyingSquirrelEntity extends TamableAnimal implements GeoEntity { return false; } + if (player.isSpectator()) { + return true; + } + if (this.isOnShoulder()) { if (!this.level().isClientSide) { this.glideOffShoulder(); @@ -629,6 +633,12 @@ public class FlyingSquirrelEntity extends TamableAnimal implements GeoEntity { 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(); @@ -731,6 +741,9 @@ public class FlyingSquirrelEntity extends TamableAnimal implements GeoEntity { } private void startShoulderMountSequence(Player player) { + if (player.isSpectator()) { + return; + } this.shoulderPlayerId = player.getUUID(); this.shoulderClimbStartPos = this.position(); this.climbingToShoulderTicks = SHOULDER_CLIMB_TICKS; diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerAntBehavior.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerAntBehavior.java new file mode 100644 index 00000000..20ae6187 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerAntBehavior.java @@ -0,0 +1,124 @@ +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 ResourceLocation REACH_BOOST_ID = + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "glimmer_ant_reach_boost"); + private static final double REACH_BOOST_AMOUNT = 1.5D; + private static final float LARGE_ENEMY_MIN_HEALTH = 40.0F; + private static final int ABILITY_COOLDOWN_TICKS = 20 * 120; + private static final int STRENGTH_BURST_DURATION = 20 * 12; + + private static ResourceLocation rl(String path) { + return ResourceLocation.fromNamespaceAndPath(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_emmisive.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) { + AttributeInstance instance = owner.getAttribute(Attributes.ENTITY_INTERACTION_RANGE); + if (instance == null) { + return; + } + if (instance.getModifier(REACH_BOOST_ID) == null) { + instance.addTransientModifier(new AttributeModifier(REACH_BOOST_ID, REACH_BOOST_AMOUNT, AttributeModifier.Operation.ADD_VALUE)); + } + } + + @Override + public void clearPassive(GlimmerEntity entity, Player owner) { + AttributeInstance instance = owner.getAttribute(Attributes.ENTITY_INTERACTION_RANGE); + if (instance != null) { + instance.removeModifier(REACH_BOOST_ID); + } + } + + @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/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerAppleCowBehavior.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerAppleCowBehavior.java new file mode 100644 index 00000000..ccdf4d96 --- /dev/null +++ b/common/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 ResourceLocation.fromNamespaceAndPath(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, 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/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerCompanionSavedData.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerCompanionSavedData.java new file mode 100644 index 00000000..ef75fe86 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerCompanionSavedData.java @@ -0,0 +1,94 @@ +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, HolderLookup.Provider registries) { + 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, HolderLookup.Provider registries) { + 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( + new SavedData.Factory(GlimmerCompanionSavedData::create, GlimmerCompanionSavedData::load, null), + 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, true); + 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/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerElkaBehavior.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerElkaBehavior.java new file mode 100644 index 00000000..e573d0f4 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerElkaBehavior.java @@ -0,0 +1,152 @@ +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.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.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.entity.projectile.Projectile; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.Vec3; +import org.jetbrains.annotations.Nullable; + +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 ResourceLocation rl(String path) { + return ResourceLocation.fromNamespaceAndPath(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/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_emmisive.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) { + 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); + } + + @Override + public int abilityCooldownTicks() { + return ABILITY_COOLDOWN_TICKS; + } + + @Override + @Nullable + public software.bernie.geckolib.animation.RawAnimation abilityAnimation() { + return software.bernie.geckolib.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(); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerEntity.java new file mode 100644 index 00000000..2afb0a49 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerEntity.java @@ -0,0 +1,619 @@ +package com.craisinlord.antarchy.content.entity.glimmer; + +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.AntarchyObjects; +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.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.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 GlimmerEntity extends TamableAnimal implements GeoEntity { + private static final ResourceKey GLIMMERING_POOLS = ResourceKey.create( + Registries.BIOME, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "glimmering_pools") + ); + private static final ResourceKey OURANWOOD_FOREST = ResourceKey.create( + Registries.BIOME, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "ouranwood_forest") + ); + private static final ResourceKey SPARSE_OURANWOOD_FOREST = ResourceKey.create( + Registries.BIOME, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "sparse_ouranwood_forest") + ); + private static final ResourceKey FUNGAL_OURANWOOD_FOREST = ResourceKey.create( + Registries.BIOME, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "fungal_ouranwood_forest") + ); + private static final ResourceKey ELYTHIA_MEADOW = ResourceKey.create( + Registries.BIOME, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "elythia_meadow") + ); + private static final ResourceKey PEACH_FOREST = ResourceKey.create( + Registries.BIOME, + ResourceLocation.fromNamespaceAndPath(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); + + 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 final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + private boolean variantLocked; + private float lastOwnerExhaustion = -1.0F; + private long lastOwnerShieldLostCount = -1L; + + 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.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 true; + } + + @Override + public int getMaxHeadYRot() { + return this.getVariant() == GlimmerVariant.FROG ? 5 : super.getMaxHeadYRot(); + } + + @Override + protected void defineSynchedData(SynchedEntityData.Builder builder) { + super.defineSynchedData(builder); + builder.define(VARIANT, GlimmerVariant.APPLE_COW.ordinal()); + builder.define(SHEAR_COOLDOWN, 0); + builder.define(FADE_TICKS, 0); + builder.define(FOLLOWING, true); + builder.define(ABILITY_COOLDOWN, 0); + builder.define(GROWTH_SCALE, 1.0F); + builder.define(ABILITY_ANIM_TICKS, 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(); + } + + 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 getDefaultDimensions(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) { + com.craisinlord.antarchy.content.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) { + SpawnGroupData result = super.finalizeSpawn(level, difficulty, spawnReason, spawnGroupData); + 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)); + } + + @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)); + } + + @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); + } + return state.setAndContinue(IDLE_ANIM); + } + + @Override + public AnimatableInstanceCache getAnimatableInstanceCache() { + return this.geoCache; + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerFollowOwnerGoal.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerFollowOwnerGoal.java new file mode 100644 index 00000000..69a3e73e --- /dev/null +++ b/common/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/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerFrogBehavior.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerFrogBehavior.java new file mode 100644 index 00000000..257cd340 --- /dev/null +++ b/common/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, ResourceLocation.fromNamespaceAndPath(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 ResourceLocation.fromNamespaceAndPath(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_emmisive.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/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerOuranwoodDeerBehavior.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerOuranwoodDeerBehavior.java new file mode 100644 index 00000000..c8310211 --- /dev/null +++ b/common/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.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 ResourceLocation.fromNamespaceAndPath(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/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerVariant.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerVariant.java new file mode 100644 index 00000000..345f2f64 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerVariant.java @@ -0,0 +1,54 @@ +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.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; +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); + public static final StreamCodec STREAM_CODEC = + ByteBufCodecs.STRING_UTF8.map(GlimmerVariant::byName, GlimmerVariant::name); + + private final GlimmerVariantBehavior behavior; + private final ResourceLocation tameAdvancementId; + + GlimmerVariant(GlimmerVariantBehavior behavior, String tameAdvancementPath) { + this.behavior = behavior; + this.tameAdvancementId = ResourceLocation.fromNamespaceAndPath(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/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerVariantBehavior.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerVariantBehavior.java new file mode 100644 index 00000000..58d673f0 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerVariantBehavior.java @@ -0,0 +1,147 @@ +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.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.animation.RawAnimation movingAnimation(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/src/main/java/com/craisinlord/antarchy/content/entity/kraken/KrakenEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/kraken/KrakenEntity.java index 3d754405..327fa364 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/entity/kraken/KrakenEntity.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/kraken/KrakenEntity.java @@ -80,6 +80,7 @@ public class KrakenEntity extends Monster implements GeoEntity, MultipartEntityO 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; @@ -87,7 +88,8 @@ public class KrakenEntity extends Monster implements GeoEntity, MultipartEntityO 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_DEATH = 5; + private static final int ANIM_SLAM = 5; + private static final int ANIM_DEATH = 6; private static final int DEATH_ANIM_TICKS = 60; @@ -105,8 +107,11 @@ public class KrakenEntity extends Monster implements GeoEntity, MultipartEntityO 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 ServerBossEvent(Component.literal("The Kraken"), BossEvent.BossBarColor.BLUE, BossEvent.BossBarOverlay.PROGRESS); private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); @@ -208,6 +213,7 @@ public class KrakenEntity extends Monster implements GeoEntity, MultipartEntityO 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; }; @@ -551,6 +557,7 @@ public class KrakenEntity extends Monster implements GeoEntity, MultipartEntityO 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(); } } @@ -562,6 +569,9 @@ public class KrakenEntity extends Monster implements GeoEntity, MultipartEntityO 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); @@ -603,6 +613,16 @@ public class KrakenEntity extends Monster implements GeoEntity, MultipartEntityO } } + 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); @@ -652,14 +672,16 @@ public class KrakenEntity extends Monster implements GeoEntity, MultipartEntityO double distSqr = this.distanceToSqr(target); boolean canGrab = distSqr <= 64.0D; boolean canSwing = distSqr <= 81.0D; + boolean canSlam = distSqr <= 121.0D; - if (!canGrab && !canSwing) { + 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 total = grabWeight + swingWeight; + int slamWeight = canSlam ? (this.lastAttackState == ATTACK_SLAM ? 1 : 3) : 0; + int total = grabWeight + swingWeight + slamWeight; if (total == 0) { return ATTACK_NONE; } @@ -668,6 +690,10 @@ public class KrakenEntity extends Monster implements GeoEntity, MultipartEntityO if (roll < grabWeight) { return ATTACK_GRAB; } + roll -= grabWeight; + if (roll < slamWeight) { + return ATTACK_SLAM; + } return this.resolveSwingDirection(target); } @@ -675,6 +701,10 @@ public class KrakenEntity extends Monster implements GeoEntity, MultipartEntityO 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). @@ -707,10 +737,28 @@ public class KrakenEntity extends Monster implements GeoEntity, MultipartEntityO } } + 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.position() - .add(this.getViewVector(1.0F).normalize().scale(this.getBbWidth() * 0.65D)) - .add(0.0D, this.getBbHeight() * 0.28D, 0.0D); + Vec3 anchor = this.getGrabAnchorWorldPos(); target.setDeltaMovement(anchor.subtract(target.position()).scale(0.35D)); target.resetFallDistance(); if (target instanceof ServerPlayer serverPlayer) { @@ -721,6 +769,33 @@ public class KrakenEntity extends Monster implements GeoEntity, MultipartEntityO 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); @@ -1123,6 +1198,10 @@ public class KrakenEntity extends Monster implements GeoEntity, MultipartEntityO this.setAnimationState(ANIM_SWING_RIGHT); return; } + case ATTACK_SLAM -> { + this.setAnimationState(ANIM_SLAM); + return; + } default -> { } } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/kraken/KrakensGraspThrownTrident.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/kraken/KrakensGraspThrownTrident.java new file mode 100644 index 00000000..240141ac --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/kraken/KrakensGraspThrownTrident.java @@ -0,0 +1,109 @@ +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.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, stack, null); + this.setBaseDamage(AntarchySettings.krakensGraspThrownDamage()); + } + + @Override + public ItemStack getItem() { + return new ItemStack(AntarchyObjects.KRAKENS_GRASP.get()); + } + + @Override + protected ItemStack getDefaultPickupItem() { + return new ItemStack(AntarchyObjects.KRAKENS_GRASP.get()); + } + + @Override + protected net.minecraft.sounds.SoundEvent getDefaultHitGroundSoundEvent() { + return SoundEvents.TRIDENT_HIT_GROUND; + } + + @Override + protected double getDefaultGravity() { + return 0.05D; + } + + @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 void onHitEntity(EntityHitResult result) { + super.onHitEntity(result); + if (!(result.getEntity() instanceof LivingEntity target) || !(this.level() instanceof ServerLevel serverLevel)) { + return; + } + + Entity owner = this.getOwner(); + DamageSource damageSource = this.damageSources().trident(this, owner != null ? owner : this); + boolean hurt = target.hurt(damageSource, (float) AntarchySettings.krakensGraspThrownDamage()); + if (hurt) { + KrakensGraspItem.strikeLightning(target, serverLevel); + } + + this.dealtDamage = true; + } + + @Override + protected void onHitBlock(BlockHitResult result) { + super.onHitBlock(result); + if (this.level() instanceof ServerLevel serverLevel) { + TentacleEntity.spawnAt(serverLevel, result.getLocation(), this.getOwner() instanceof LivingEntity livingOwner ? livingOwner : null); + } + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/kraken/TentacleEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/kraken/TentacleEntity.java new file mode 100644 index 00000000..f7be5e93 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/kraken/TentacleEntity.java @@ -0,0 +1,159 @@ +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.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; + +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 void push(net.minecraft.world.entity.Entity entity) { + } + + 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 interval = Math.max(1, AntarchySettings.krakensGraspTentacleDamageIntervalTicks()); + if (this.lifetimeTicks % interval == 0) { + this.grabNearbyEntities(); + } + } + + private void grabNearbyEntities() { + 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())); + + for (LivingEntity victim : victims) { + if (this.level() instanceof ServerLevel serverLevel) { + victim.hurt(this.damageSources().mobAttack(this), (float) AntarchySettings.krakensGraspTentacleDamage()); + serverLevel.sendParticles(net.minecraft.core.particles.ParticleTypes.SPLASH, + victim.getX(), victim.getY(0.6D), victim.getZ(), 8, 0.2D, 0.2D, 0.2D, 0.05D); + } + + victim.addEffect(new MobEffectInstance(MobEffects.MOVEMENT_SLOWDOWN, AntarchySettings.krakensGraspTentacleDamageIntervalTicks() + 10, 1, 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/src/main/java/com/craisinlord/antarchy/content/fluid/LumenLiquidBlock.java b/common/src/main/java/com/craisinlord/antarchy/content/fluid/LumenLiquidBlock.java new file mode 100644 index 00000000..a8a7d724 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/fluid/LumenLiquidBlock.java @@ -0,0 +1,109 @@ +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; + + public LumenLiquidBlock(FlowingFluid fluid, BlockBehaviour.Properties properties) { + super(fluid, properties); + } + + @Override + protected void onPlace(BlockState state, Level level, BlockPos pos, BlockState oldState, boolean movedByPiston) { + super.onPlace(state, level, pos, oldState, movedByPiston); + scheduleCurrentLumenTick(level, pos); + } + + @Override + protected 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 + protected 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 + protected 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.fluid, this.fluid.getTickDelay(level)); + } + + private void scheduleDependentLumenTicks(LevelAccessor level, BlockPos pos) { + level.scheduleTick(pos.above(), this.fluid, this.fluid.getTickDelay(level)); + for (Direction direction : Direction.Plane.HORIZONTAL) { + level.scheduleTick(pos.relative(direction), this.fluid, this.fluid.getTickDelay(level)); + } + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/item/GlimmerBottleItem.java b/common/src/main/java/com/craisinlord/antarchy/content/item/GlimmerBottleItem.java new file mode 100644 index 00000000..3d715b05 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/item/GlimmerBottleItem.java @@ -0,0 +1,101 @@ +package com.craisinlord.antarchy.content.item; + +import com.craisinlord.antarchy.content.AntarchyObjects; +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.core.component.DataComponents; +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.item.component.CustomData; +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()); + stack.set(AntarchyObjects.GLIMMER_VARIANT_COMPONENT.get(), variant); + if (abilityCooldown > 0) { + CustomData.update(DataComponents.CUSTOM_DATA, stack, tag -> tag.putInt(ABILITY_COOLDOWN_TAG, abilityCooldown)); + } + return stack; + } + + @Nullable + public static GlimmerVariant getVariant(ItemStack stack) { + return stack.get(AntarchyObjects.GLIMMER_VARIANT_COMPONENT.get()); + } + + public static int getStoredAbilityCooldown(ItemStack stack) { + return stack.getOrDefault(DataComponents.CUSTOM_DATA, CustomData.EMPTY).copyTag().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) { + com.craisinlord.antarchy.content.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, Item.TooltipContext context, List tooltip, TooltipFlag flag) { + super.appendHoverText(stack, context, 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/src/main/java/com/craisinlord/antarchy/content/item/HighFructoseCornSyrupItem.java b/common/src/main/java/com/craisinlord/antarchy/content/item/HighFructoseCornSyrupItem.java new file mode 100644 index 00000000..4686339a --- /dev/null +++ b/common/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, LivingEntity entity) { + 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/src/main/java/com/craisinlord/antarchy/content/item/KrakensGraspItem.java b/common/src/main/java/com/craisinlord/antarchy/content/item/KrakensGraspItem.java new file mode 100644 index 00000000..51a44d3d --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/item/KrakensGraspItem.java @@ -0,0 +1,171 @@ +package com.craisinlord.antarchy.content.item; + +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.client.model.ResourceBackedGeoItemModel; +import com.craisinlord.antarchy.content.client.renderer.AnimatedHeldItemRenderer; +import com.craisinlord.antarchy.content.entity.kraken.KrakensGraspThrownTrident; +import net.minecraft.core.HolderLookup; +import net.minecraft.core.particles.ParticleTypes; +import net.minecraft.core.registries.Registries; +import net.minecraft.resources.ResourceLocation; +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.EquipmentSlotGroup; +import net.minecraft.world.entity.LightningBolt; +import net.minecraft.world.entity.LivingEntity; +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.component.ItemAttributeModifiers; +import net.minecraft.world.item.TridentItem; +import net.minecraft.world.item.enchantment.EnchantmentHelper; +import net.minecraft.world.item.enchantment.Enchantments; +import net.minecraft.world.item.enchantment.ItemEnchantments; +import net.minecraft.world.level.Level; +import net.minecraft.world.entity.Entity; +import software.bernie.geckolib.animatable.GeoItem; +import software.bernie.geckolib.animatable.client.GeoRenderProvider; +import software.bernie.geckolib.animatable.instance.AnimatableInstanceCache; +import software.bernie.geckolib.animation.AnimatableManager; +import software.bernie.geckolib.util.GeckoLibUtil; + +import java.util.function.Consumer; + +public class KrakensGraspItem extends TridentItem implements GeoItem { + private static final ResourceLocation MODEL_LOCATION = ResourceLocation.fromNamespaceAndPath("antarchy", "geo/krakens_grasp.geo.json"); + private static final ResourceLocation TEXTURE_LOCATION = ResourceLocation.fromNamespaceAndPath("antarchy", "textures/item/krakens_grasp/krakens_grasp.png"); + private static final ResourceLocation ANIMATION_LOCATION = ResourceLocation.fromNamespaceAndPath("antarchy", "animations/static_item.animation.json"); + private static final ResourceLocation ATTACK_DAMAGE_MODIFIER_ID = ResourceLocation.fromNamespaceAndPath("antarchy", "krakens_grasp_attack_damage"); + private static final ResourceLocation ATTACK_SPEED_MODIFIER_ID = ResourceLocation.fromNamespaceAndPath("antarchy", "krakens_grasp_attack_speed"); + + private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + + public KrakensGraspItem(Item.Properties properties) { + super(properties); + GeoItem.registerSyncedAnimatable(this); + } + + @Override + public ItemAttributeModifiers getDefaultAttributeModifiers() { + return ItemAttributeModifiers.builder() + .add(Attributes.ATTACK_DAMAGE, new AttributeModifier(ATTACK_DAMAGE_MODIFIER_ID, AntarchySettings.krakensGraspAttackDamage(), AttributeModifier.Operation.ADD_VALUE), EquipmentSlotGroup.MAINHAND) + .add(Attributes.ATTACK_SPEED, new AttributeModifier(ATTACK_SPEED_MODIFIER_ID, AntarchySettings.krakensGraspAttackSpeed(), AttributeModifier.Operation.ADD_VALUE), EquipmentSlotGroup.MAINHAND) + .build(); + } + + @Override + public net.minecraft.world.item.UseAnim getUseAnimation(ItemStack stack) { + return net.minecraft.world.item.UseAnim.NONE; + } + + @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; + } + + var loyalty = registries.lookupOrThrow(Registries.ENCHANTMENT).getOrThrow(Enchantments.LOYALTY); + int desiredLevel = net.minecraft.util.Mth.clamp(AntarchySettings.krakensGraspInnateLoyaltyLevel(), 1, 3); + if (EnchantmentHelper.getItemEnchantmentLevel(loyalty, stack) >= desiredLevel) { + return; + } + + ItemEnchantments.Mutable enchantments = new ItemEnchantments.Mutable(stack.getEnchantments()); + enchantments.set(loyalty, desiredLevel); + EnchantmentHelper.setEnchantments(stack, enchantments.toImmutable().withTooltip(true)); + } + + @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); + } + return didHurt; + } + + public static void strikeLightning(LivingEntity target, ServerLevel level) { + 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(target.damageSources().lightningBolt(), (float) AntarchySettings.krakensGraspLightningDamage()); + level.sendParticles(ParticleTypes.ELECTRIC_SPARK, target.getX(), target.getY(0.7D), target.getZ(), 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, user) - timeLeft; + if (useTime < 10) { + return; + } + + float spinStrength = EnchantmentHelper.getTridentSpinAttackStrength(stack, player); + if (spinStrength > 0.0F && player.isInWaterOrRain()) { + super.releaseUsing(stack, level, user, timeLeft); + return; + } + + if (stack.getDamageValue() >= stack.getMaxDamage() - 1) { + return; + } + + if (!level.isClientSide) { + stack.hurtAndBreak(1, player, LivingEntity.getSlotForHand(user.getUsedItemHand())); + KrakensGraspThrownTrident trident = new 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.hasInfiniteMaterials()) { + trident.pickup = net.minecraft.world.entity.projectile.AbstractArrow.Pickup.CREATIVE_ONLY; + } + level.addFreshEntity(trident); + level.playSound(null, trident, SoundEvents.TRIDENT_THROW.value(), SoundSource.PLAYERS, 1.0F, 1.0F); + if (!player.hasInfiniteMaterials()) { + player.getInventory().removeItem(stack); + } + } + + player.awardStat(Stats.ITEM_USED.get(this)); + } + + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { + } + + @Override + public AnimatableInstanceCache getAnimatableInstanceCache() { + return this.geoCache; + } + + @Override + public void createGeoRenderer(Consumer consumer) { + consumer.accept(new GeoRenderProvider() { + private AnimatedHeldItemRenderer renderer; + + @Override + public net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer getGeoItemRenderer() { + if (this.renderer == null) { + this.renderer = new AnimatedHeldItemRenderer<>(new ResourceBackedGeoItemModel<>(MODEL_LOCATION, TEXTURE_LOCATION, ANIMATION_LOCATION)); + } + + return this.renderer; + } + }); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/item/MinersDreamCaveGenerator.java b/common/src/main/java/com/craisinlord/antarchy/content/item/MinersDreamCaveGenerator.java new file mode 100644 index 00000000..4aa42bac --- /dev/null +++ b/common/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/src/main/java/com/craisinlord/antarchy/content/item/MinersDreamExcavation.java b/common/src/main/java/com/craisinlord/antarchy/content/item/MinersDreamExcavation.java new file mode 100644 index 00000000..6d7e01a0 --- /dev/null +++ b/common/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/src/main/java/com/craisinlord/antarchy/content/item/MinersDreamExcavationManager.java b/common/src/main/java/com/craisinlord/antarchy/content/item/MinersDreamExcavationManager.java new file mode 100644 index 00000000..4effa987 --- /dev/null +++ b/common/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/src/main/java/com/craisinlord/antarchy/content/item/MinersDreamItem.java b/common/src/main/java/com/craisinlord/antarchy/content/item/MinersDreamItem.java new file mode 100644 index 00000000..d0ec451f --- /dev/null +++ b/common/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, Item.TooltipContext context, 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, context, tooltipComponents, tooltipFlag); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/item/MinersDreamTorchPlacer.java b/common/src/main/java/com/craisinlord/antarchy/content/item/MinersDreamTorchPlacer.java new file mode 100644 index 00000000..08e8f78b --- /dev/null +++ b/common/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/src/main/java/com/craisinlord/antarchy/content/item/PeachBoatOnlyItem.java b/common/src/main/java/com/craisinlord/antarchy/content/item/PeachBoatOnlyItem.java new file mode 100644 index 00000000..eeab43ca --- /dev/null +++ b/common/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 EntityType entityType; + + public PeachBoatOnlyItem(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(); + PeachBoatEntity boat = new PeachBoatEntity(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/src/main/java/com/craisinlord/antarchy/content/item/PeachChestBoatItem.java b/common/src/main/java/com/craisinlord/antarchy/content/item/PeachChestBoatItem.java new file mode 100644 index 00000000..66a0ea72 --- /dev/null +++ b/common/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 EntityType entityType; + + public PeachChestBoatItem(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(); + PeachChestBoatEntity boat = new PeachChestBoatEntity(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/src/main/java/com/craisinlord/antarchy/content/item/PeachItem.java b/common/src/main/java/com/craisinlord/antarchy/content/item/PeachItem.java new file mode 100644 index 00000000..f75e2631 --- /dev/null +++ b/common/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) + .saturationModifier(2.4F) + .build())); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/item/RootBeerItem.java b/common/src/main/java/com/craisinlord/antarchy/content/item/RootBeerItem.java new file mode 100644 index 00000000..39df6034 --- /dev/null +++ b/common/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, LivingEntity entity) { + 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/src/main/java/com/craisinlord/antarchy/content/item/RpoLauncherItem.java b/common/src/main/java/com/craisinlord/antarchy/content/item/RpoLauncherItem.java new file mode 100644 index 00000000..75adb09a --- /dev/null +++ b/common/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.component.DataComponents; +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.item.enchantment.ItemEnchantments; +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 software.bernie.geckolib.animatable.client.GeoRenderProvider; +import software.bernie.geckolib.animatable.instance.AnimatableInstanceCache; +import software.bernie.geckolib.animation.AnimatableManager; +import software.bernie.geckolib.animation.AnimationController; +import software.bernie.geckolib.animation.PlayState; +import software.bernie.geckolib.animation.RawAnimation; +import software.bernie.geckolib.util.GeckoLibUtil; + +public class RpoLauncherItem extends ProjectileWeaponItem implements GeoItem { + 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 = ResourceLocation.fromNamespaceAndPath("antarchy", "geo/rpo_launcher.geo.json"); + private static final ResourceLocation TEXTURE_LOCATION = ResourceLocation.fromNamespaceAndPath("antarchy", "textures/models/item/rpo_launcher.png"); + private static final ResourceLocation ANIMATION_LOCATION = ResourceLocation.fromNamespaceAndPath("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, 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 + protected void shootProjectile(LivingEntity livingEntity, Projectile projectile, int i, float velocity, float inaccuracy, float angle, LivingEntity target) { + projectile.shootFromRotation(livingEntity, livingEntity.getXRot(), livingEntity.getYRot(), angle, velocity, inaccuracy); + } + + @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; + } + + @Override + public void createGeoRenderer(Consumer consumer) { + consumer.accept(new GeoRenderProvider() { + private AnimatedHeldItemRenderer renderer; + + @Override + public net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer getGeoItemRenderer() { + if (this.renderer == null) { + this.renderer = new AnimatedHeldItemRenderer<>(new ResourceBackedGeoItemModel<>(MODEL_LOCATION, TEXTURE_LOCATION, ANIMATION_LOCATION)); + } + + return this.renderer; + } + }); + } + + 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.2D, + 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 stack.getOrDefault(DataComponents.ENCHANTMENTS, ItemEnchantments.EMPTY) + .keySet() + .stream() + .anyMatch(holder -> holder.is(Enchantments.MULTISHOT)); + } + + 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/src/main/java/com/craisinlord/antarchy/content/item/SpiritAppleItem.java b/common/src/main/java/com/craisinlord/antarchy/content/item/SpiritAppleItem.java new file mode 100644 index 00000000..3e0e3a22 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/item/SpiritAppleItem.java @@ -0,0 +1,21 @@ +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 java.util.List; + +public class SpiritAppleItem extends Item { + public SpiritAppleItem(Properties properties) { + super(properties); + } + + @Override + public void appendHoverText(ItemStack stack, Item.TooltipContext context, List tooltipComponents, TooltipFlag tooltipFlag) { + tooltipComponents.add(Component.translatable("tooltip.antarchy.spirit_apple").withStyle(ChatFormatting.GRAY)); + super.appendHoverText(stack, context, tooltipComponents, tooltipFlag); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/menu/DorrieInventoryMenu.java b/common/src/main/java/com/craisinlord/antarchy/content/menu/DorrieInventoryMenu.java new file mode 100644 index 00000000..7fe61a7d --- /dev/null +++ b/common/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/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaBiomeSource.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaBiomeSource.java index 90eb49c8..92d021ab 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaBiomeSource.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaBiomeSource.java @@ -37,6 +37,26 @@ public class ElythiaBiomeSource extends BiomeSource { Registries.BIOME, ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "elythia_beach") ); + private static final ResourceKey OURANWOOD_FOREST = ResourceKey.create( + Registries.BIOME, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "ouranwood_forest") + ); + private static final ResourceKey SPARSE_OURANWOOD_FOREST = ResourceKey.create( + Registries.BIOME, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "sparse_ouranwood_forest") + ); + private static final ResourceKey PEACH_FOREST = ResourceKey.create( + Registries.BIOME, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "peach_forest") + ); + private static final ResourceKey FUNGAL_OURANWOOD_FOREST = ResourceKey.create( + Registries.BIOME, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "fungal_ouranwood_forest") + ); + private static final ResourceKey GLIMMERING_POOLS = ResourceKey.create( + Registries.BIOME, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "glimmering_pools") + ); private static final int[] SURFACE_FALLBACK_BLOCK_YS = new int[]{192, 160, 128, 96, 64, 32, 0}; public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> instance.group( @@ -56,8 +76,11 @@ public class ElythiaBiomeSource extends BiomeSource { private final int molewormCavesMaxQuartY; private final int surfaceBiomeSampleQuartY; private final int seaLevelQuartY; + private final int undergroundGuardMaxQuartY; private final Holder oceanHolder; private final Holder defaultLandHolder; + private final Holder glimmeringPoolsHolder; + private final Holder ouranwoodForestHolder; public ElythiaBiomeSource(Climate.ParameterList> parameters, int molewormCavesMaxY, int surfaceBiomeSampleY, int oceanMaxY, int seaLevel) { this.parameters = parameters; @@ -69,15 +92,31 @@ public class ElythiaBiomeSource extends BiomeSource { this.molewormCavesMaxQuartY = QuartPos.fromBlock(molewormCavesMaxY); this.surfaceBiomeSampleQuartY = QuartPos.fromBlock(surfaceBiomeSampleY); 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.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(MOLEWORM_CAVES) && !h.is(ELYTHIA_LUSH_CAVES) + && !h.is(GLIMMERING_POOLS)) .findFirst() .orElse(null); } @@ -97,11 +136,6 @@ public class ElythiaBiomeSource extends BiomeSource { protected Stream> collectPossibleBiomes() { return this.delegate.possibleBiomes().stream(); } - - // Conservative threshold well inside the ocean entry range (-0.85 to -0.92). - // At continentalness < -0.80 the terrain is reliably below sea level. - // Transition-zone columns (-0.80 to -0.85) are treated as land to avoid - // ocean biome appearing over above-sea-level terrain. private static final long OCEAN_CONTINENTALNESS_THRESHOLD = Climate.quantizeCoord(-0.87f); @Override @@ -110,10 +144,10 @@ public class ElythiaBiomeSource extends BiomeSource { // Cap moleworm caves below their max Y — replace with surface biome above it if (biome.is(MOLEWORM_CAVES) && y > this.molewormCavesMaxQuartY) { - return resolveSurfaceFallback(x, y, z, sampler, MOLEWORM_CAVES); + return resolveSurfaceFallback(x, y, z, sampler, MOLEWORM_CAVES, GLIMMERING_POOLS); } - // Use continentalness (XZ-only noise) to classify the column. + // 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. @@ -133,11 +167,25 @@ public class ElythiaBiomeSource extends BiomeSource { return oceanHolder; } - // Land column: prevent ocean biomes from bleeding in at any Y + // 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, y, z, sampler, PEACH_FOREST, GLIMMERING_POOLS); + } + return biome; } @@ -150,7 +198,65 @@ public class ElythiaBiomeSource extends BiomeSource { return biome.is(ELYTHIA_OCEAN) || biome.is(ELYTHIA_CORAL_SPIKES); } - // Used for moleworm caves — returns best Y-sample, falls back to whatever the delegate gives + 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 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 y, int z, Climate.Sampler sampler, ResourceKey... excluded) { Holder fallback = this.delegate.getNoiseBiome(x, this.surfaceBiomeSampleQuartY, z, sampler); @@ -168,7 +274,6 @@ public class ElythiaBiomeSource extends BiomeSource { return fallback; } - // Used when ocean bleeds into a land column — guaranteed to never return an ocean/cave biome private Holder resolveLandFallback(int x, int z, Climate.Sampler sampler) { Holder fallback = this.delegate.getNoiseBiome(x, this.surfaceBiomeSampleQuartY, z, sampler); if (!isOceanOrCave(fallback)) return fallback; @@ -191,7 +296,8 @@ public class ElythiaBiomeSource extends BiomeSource { private static boolean isOceanOrCave(Holder biome) { return isOceanBiome(biome) || biome.is(ELYTHIA_BEACH) - || biome.is(MOLEWORM_CAVES) || biome.is(ELYTHIA_LUSH_CAVES); + || biome.is(MOLEWORM_CAVES) || biome.is(ELYTHIA_LUSH_CAVES) + || biome.is(GLIMMERING_POOLS); } @Override @@ -199,9 +305,6 @@ public class ElythiaBiomeSource extends BiomeSource { try { this.delegate.addDebugInfo(debug, pos, sampler); } catch (NullPointerException ignored) { - // TerraBlender's MixinMultiNoiseBiomeSource.addDebugInfo reads an internal - // field (uniqueness) that it only injects into TerraBlender-registered sources. - // Our delegate is not one of those, so we swallow the NPE here. } debug.add("Elythia mole cave cap: y<=" + this.molewormCavesMaxY); debug.add("Elythia sea level: " + this.seaLevel); diff --git a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaFloraFeature.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaFloraFeature.java index c7517782..68c9e102 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaFloraFeature.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaFloraFeature.java @@ -23,6 +23,8 @@ import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConf public class ElythiaFloraFeature extends Feature { private static final String SIZEABLE_FOLIAGE_MODID = "sizeable_foliage"; + private static final ResourceLocation CAMELLIA_ID = ResourceLocation.fromNamespaceAndPath("antarchy", "camellia"); + private static final ResourceLocation SPIDER_LILY_ID = ResourceLocation.fromNamespaceAndPath("antarchy", "spider_lily"); private final Variant variant; @@ -39,21 +41,21 @@ public class ElythiaFloraFeature extends Feature { int attempts = switch (this.variant) { case FOREST -> 185; case MEADOW -> 95; - case TORCHFLOWER_FIELDS -> 60; + case PEACH_FOREST -> 120; case BUTTERFLY_FIELDS -> 150; case FLOWER_FOREST_MILKWEED -> 14; }; int radius = switch (this.variant) { case FOREST -> 8; - case MEADOW, TORCHFLOWER_FIELDS -> 14; + case MEADOW, PEACH_FOREST -> 14; case BUTTERFLY_FIELDS -> 18; case FLOWER_FOREST_MILKWEED -> 8; }; boolean placedAny = false; int torchflowerPatchRolls = switch (this.variant) { - case TORCHFLOWER_FIELDS -> 3 + random.nextInt(3); case BUTTERFLY_FIELDS -> 2 + random.nextInt(3); + case PEACH_FOREST -> 1; case FLOWER_FOREST_MILKWEED -> 0; default -> 1; }; @@ -61,7 +63,7 @@ public class ElythiaFloraFeature extends Feature { float torchflowerChance = switch (this.variant) { case FOREST -> 0.24F; case MEADOW -> 0.42F; - case TORCHFLOWER_FIELDS -> 0.95F; + case PEACH_FOREST -> 0.08F; case BUTTERFLY_FIELDS -> 0.24F; case FLOWER_FOREST_MILKWEED -> 0.0F; }; @@ -72,7 +74,7 @@ public class ElythiaFloraFeature extends Feature { if (random.nextFloat() < switch (this.variant) { case MEADOW -> 0.1F; - case TORCHFLOWER_FIELDS -> 0.04F; + case PEACH_FOREST -> 0.0F; case BUTTERFLY_FIELDS -> 0.12F; case FOREST -> 0.05F; case FLOWER_FOREST_MILKWEED -> 0.0F; @@ -81,7 +83,7 @@ public class ElythiaFloraFeature extends Feature { } if (random.nextFloat() < switch (this.variant) { case MEADOW -> 0.16F; - case TORCHFLOWER_FIELDS -> 0.08F; + case PEACH_FOREST -> 0.0F; case BUTTERFLY_FIELDS -> 0.95F; case FOREST -> 0.06F; case FLOWER_FOREST_MILKWEED -> 0.18F; @@ -90,15 +92,18 @@ public class ElythiaFloraFeature extends Feature { } if (random.nextFloat() < switch (this.variant) { case MEADOW -> 0.16F; - case TORCHFLOWER_FIELDS -> 0.08F; + 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.025F) { + placedAny |= this.placeMilkweedPatch(level, origin, random, antarchyBlock(CAMELLIA_ID)); + } - if (this.variant == Variant.FOREST) { + if (this.variant == Variant.FOREST || this.variant == Variant.PEACH_FOREST) { placedAny |= this.placeBigBushes(level, origin, random, radius); } @@ -113,7 +118,8 @@ public class ElythiaFloraFeature extends Feature { continue; } - maybeOvergrowGround(level, groundPos, random, this.variant != Variant.FOREST); + normalizePeachForestGround(level, groundPos, this.variant); + maybeOvergrowGround(level, groundPos, random, this.variant); if (placeSelectedPlant(level, plantPos, groundPos, random)) { placedAny = true; } @@ -125,20 +131,6 @@ public class ElythiaFloraFeature extends Feature { } private boolean placeSelectedPlant(WorldGenLevel level, BlockPos plantPos, BlockPos groundPos, RandomSource random) { - if (this.variant == Variant.TORCHFLOWER_FIELDS) { - float roll = random.nextFloat(); - if (roll < 0.14F) { - return placeDouble(level, plantPos, torchflowerBush().defaultBlockState()); - } - if (roll < 0.58F) { - return placeSingle(level, plantPos, Blocks.TORCHFLOWER); - } - if (roll < 0.94F) { - return placeSingle(level, plantPos, Blocks.SHORT_GRASS); - } - return placeDouble(level, plantPos, Blocks.TALL_GRASS.defaultBlockState()); - } - if (this.variant == Variant.BUTTERFLY_FIELDS) { float roll = random.nextFloat(); if (roll < 0.18F) { @@ -170,6 +162,17 @@ public class ElythiaFloraFeature extends Feature { 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.SHORT_GRASS); + } + return placeSingle(level, plantPos, veryShortGrass()); + } + float roll = random.nextFloat(); if (this.variant == Variant.MEADOW) { if (roll < 0.34F) { @@ -216,6 +219,14 @@ public class ElythiaFloraFeature extends Feature { 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(ResourceLocation.fromNamespaceAndPath(SIZEABLE_FOLIAGE_MODID, "big_bush")); if (!(bushBlock instanceof BigBushBlock)) { @@ -223,7 +234,10 @@ public class ElythiaFloraFeature extends Feature { } boolean placed = false; - int bushAttempts = 12 + random.nextInt(7); + 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; @@ -325,18 +339,23 @@ public class ElythiaFloraFeature extends Feature { return false; } - int radius = this.variant == Variant.TORCHFLOWER_FIELDS ? 4 : this.variant == Variant.MEADOW ? 3 : this.variant == Variant.BUTTERFLY_FIELDS ? 3 : 2; - int plants = this.variant == Variant.TORCHFLOWER_FIELDS - ? 8 + random.nextInt(8) - : this.variant == Variant.BUTTERFLY_FIELDS + 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; } + if (bushEligible && random.nextFloat() < 0.12F) { + if (placeDouble(level, plantPos, torchflowerBush().defaultBlockState())) { + placed = true; + } + continue; + } if (placeSingle(level, plantPos, Blocks.TORCHFLOWER)) { placed = true; } @@ -402,7 +421,7 @@ public class ElythiaFloraFeature extends Feature { int attempts = switch (this.variant) { case FOREST -> 3; case MEADOW -> 5; - case TORCHFLOWER_FIELDS -> 2; + case PEACH_FOREST -> 3; case BUTTERFLY_FIELDS -> 3; case FLOWER_FOREST_MILKWEED -> 2; }; @@ -451,18 +470,42 @@ public class ElythiaFloraFeature extends Feature { return isOpenPlantSpot(level, plantPos) ? plantPos : null; } - private static void maybeOvergrowGround(WorldGenLevel level, BlockPos groundPos, RandomSource random, boolean meadow) { - if (!isValidGround(level, groundPos) || random.nextFloat() > (meadow ? 0.45F : 0.24F)) { + private static void normalizePeachForestGround(WorldGenLevel level, BlockPos groundPos, Variant variant) { + if (variant != Variant.PEACH_FOREST) { return; } - BlockState replacement = random.nextFloat() < 0.35F + 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) { - if (random.nextFloat() > (meadow ? 0.22F : 0.1F)) { + 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); @@ -492,7 +535,11 @@ public class ElythiaFloraFeature extends Feature { } 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); + 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) { @@ -533,7 +580,7 @@ public class ElythiaFloraFeature extends Feature { public enum Variant { FOREST, MEADOW, - TORCHFLOWER_FIELDS, + PEACH_FOREST, BUTTERFLY_FIELDS, FLOWER_FOREST_MILKWEED } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/LumenLilyPadFeature.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/LumenLilyPadFeature.java new file mode 100644 index 00000000..2fa0badd --- /dev/null +++ b/common/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/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/LumenPoolFeature.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/LumenPoolFeature.java new file mode 100644 index 00000000..16304a22 --- /dev/null +++ b/common/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/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/LumenSpireFeature.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/LumenSpireFeature.java new file mode 100644 index 00000000..f750c276 --- /dev/null +++ b/common/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/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/LumenStreamFeature.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/LumenStreamFeature.java new file mode 100644 index 00000000..dcd5ba45 --- /dev/null +++ b/common/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/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/LumenWorldgenHelper.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/LumenWorldgenHelper.java new file mode 100644 index 00000000..dd527123 --- /dev/null +++ b/common/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/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/PeachForestMossyBoulderFeature.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/PeachForestMossyBoulderFeature.java new file mode 100644 index 00000000..bb2dea0e --- /dev/null +++ b/common/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/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/PeachForestPondConfiguration.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/PeachForestPondConfiguration.java new file mode 100644 index 00000000..e8b13b34 --- /dev/null +++ b/common/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/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/PeachForestPondFeature.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/PeachForestPondFeature.java new file mode 100644 index 00000000..dad4fb39 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/PeachForestPondFeature.java @@ -0,0 +1,141 @@ +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.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.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; + + 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); + } + } + } + + if (placed) { + this.placeLilyPads(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 offset = 1; offset <= 32; offset++) { + BlockPos abovePos = new BlockPos(topPos.getX(), topOfDebris + offset, topPos.getZ()); + BlockState aboveState = level.getBlockState(abovePos); + if (!aboveState.isAir() && aboveState.canBeReplaced()) { + level.setBlock(abovePos, 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 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/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/PeachTreeConfiguration.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/PeachTreeConfiguration.java new file mode 100644 index 00000000..5bd8efdb --- /dev/null +++ b/common/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/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/PeachTreeFeature.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/PeachTreeFeature.java new file mode 100644 index 00000000..35bf2e73 --- /dev/null +++ b/common/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 = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "peach_log"); + private static final ResourceLocation PEACH_LEAVES_ID = ResourceLocation.fromNamespaceAndPath(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 >= 6) { + 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 ? LeavesBlock.DISTANCE : null; + if (property == null) { + continue; + } + + int distance = Math.min(6, distances.getOrDefault(pos, 6)); + if (state.getValue(property) != distance) { + setBlock(level, pos, state.setValue(property, 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/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/PeachTreeGrowers.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/PeachTreeGrowers.java new file mode 100644 index 00000000..55653217 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/PeachTreeGrowers.java @@ -0,0 +1,27 @@ +package com.craisinlord.antarchy.content.worldgen.elythia; + +import com.craisinlord.antarchy.Antarchy; +import java.util.Optional; +import net.minecraft.core.registries.Registries; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.block.grower.TreeGrower; +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"); + public static final TreeGrower PEACH = new TreeGrower( + "peach", + Optional.of(PEACH_LARGE_TREE), + Optional.of(PEACH_TREE), + Optional.empty() + ); + + private PeachTreeGrowers() { + } + + private static ResourceKey> featureKey(String path) { + return ResourceKey.create(Registries.CONFIGURED_FEATURE, ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, path)); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/ocean/StarCoralPatchFeature.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/ocean/StarCoralPatchFeature.java new file mode 100644 index 00000000..36845b66 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/ocean/StarCoralPatchFeature.java @@ -0,0 +1,74 @@ +package com.craisinlord.antarchy.content.worldgen.ocean; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.mojang.serialization.Codec; +import net.minecraft.core.BlockPos; +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 targetPlacements = 8 + random.nextInt(9); + 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 y = level.getHeight(Heightmap.Types.OCEAN_FLOOR_WG, x, z); + BlockPos supportPos = new BlockPos(x, y - 1, z); + BlockPos placePos = supportPos.above(); + + if (!level.getBlockState(supportPos).isSolid()) { + continue; + } + if (!level.getFluidState(placePos).is(FluidTags.WATER)) { + continue; + } + if (!level.getBlockState(placePos).canBeReplaced()) { + continue; + } + + int roll = random.nextInt(10); + BlockState toPlace; + if (roll < 5) { + toPlace = starCoralBlock.defaultBlockState(); + } else if (roll < 8) { + toPlace = starCoral.defaultBlockState(); + } else { + toPlace = starCoralFan.defaultBlockState(); + } + + level.setBlock(placePos, toPlace, 2); + placed++; + } + + return placed > 0; + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/overworld/CornPatchFeature.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/overworld/CornPatchFeature.java new file mode 100644 index 00000000..c9014b00 --- /dev/null +++ b/common/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/src/main/java/com/craisinlord/antarchy/mixins/AmericanFoodConsumeMixin.java b/common/src/main/java/com/craisinlord/antarchy/mixins/AmericanFoodConsumeMixin.java new file mode 100644 index 00000000..416e3aa1 --- /dev/null +++ b/common/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/food/FoodProperties;)Lnet/minecraft/world/item/ItemStack;", + at = @At("RETURN") + ) + private void antarchy$applyAmericanBonus(Level level, ItemStack stack, FoodProperties foodProperties, CallbackInfoReturnable cir) { + if (level.isClientSide || !stack.has(AntarchyObjects.AMERICAN_COMPONENT.get())) { + 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/src/main/java/com/craisinlord/antarchy/mixins/AmericanFoodNameMixin.java b/common/src/main/java/com/craisinlord/antarchy/mixins/AmericanFoodNameMixin.java new file mode 100644 index 00000000..95dc1dd6 --- /dev/null +++ b/common/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 (self.has(AntarchyObjects.AMERICAN_COMPONENT.get())) { + cir.setReturnValue(Component.translatable("item.antarchy.american_name", cir.getReturnValue())); + } + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/mixins/BlockEntityTypeSignMixin.java b/common/src/main/java/com/craisinlord/antarchy/mixins/BlockEntityTypeSignMixin.java index de6f8f78..8943dd41 100644 --- a/common/src/main/java/com/craisinlord/antarchy/mixins/BlockEntityTypeSignMixin.java +++ b/common/src/main/java/com/craisinlord/antarchy/mixins/BlockEntityTypeSignMixin.java @@ -22,16 +22,26 @@ public abstract class BlockEntityTypeSignMixin { 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())) { + 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())) { + if (state.is(antarchy$hangingSign()) || state.is(antarchy$wallHangingSign()) + || state.is(antarchy$peachHangingSign()) || state.is(antarchy$peachWallHangingSign())) { cir.setReturnValue(true); } } @@ -69,6 +79,38 @@ public abstract class BlockEntityTypeSignMixin { 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(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, path)); diff --git a/common/src/main/java/com/craisinlord/antarchy/mixins/FrogSpawnVariantMixin.java b/common/src/main/java/com/craisinlord/antarchy/mixins/FrogSpawnVariantMixin.java new file mode 100644 index 00000000..16198b8e --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/mixins/FrogSpawnVariantMixin.java @@ -0,0 +1,41 @@ +package com.craisinlord.antarchy.mixins; + +import com.craisinlord.antarchy.content.entity.ElythiaFrog; +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, + 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/src/main/java/com/craisinlord/antarchy/mixins/FrogVariantBootstrapMixin.java b/common/src/main/java/com/craisinlord/antarchy/mixins/FrogVariantBootstrapMixin.java new file mode 100644 index 00000000..852735ba --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/mixins/FrogVariantBootstrapMixin.java @@ -0,0 +1,23 @@ +package com.craisinlord.antarchy.mixins; + +import com.craisinlord.antarchy.content.entity.ElythiaFrog; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.animal.FrogVariant; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(FrogVariant.class) +public abstract class FrogVariantBootstrapMixin { + @Inject(method = "bootstrap", at = @At("TAIL")) + private static void antarchy$registerElythiaVariant(Registry registry, CallbackInfoReturnable cir) { + ResourceLocation id = ElythiaFrog.VARIANT.location(); + if (registry.containsKey(id)) { + return; + } + + Registry.register(registry, id, new FrogVariant(ElythiaFrog.TEXTURE)); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/mixins/GlowSquidLumenSpawnMixin.java b/common/src/main/java/com/craisinlord/antarchy/mixins/GlowSquidLumenSpawnMixin.java new file mode 100644 index 00000000..fb1eb786 --- /dev/null +++ b/common/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 = "checkGlowSquidSpawnRules", 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/src/main/java/com/craisinlord/antarchy/mixins/PotionBrewingMixin.java b/common/src/main/java/com/craisinlord/antarchy/mixins/PotionBrewingMixin.java new file mode 100644 index 00000000..a5510c83 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/mixins/PotionBrewingMixin.java @@ -0,0 +1,27 @@ +package com.craisinlord.antarchy.mixins; + +import com.craisinlord.antarchy.content.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 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 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/src/main/java/com/craisinlord/antarchy/mixins/SquidzookaMultishotMixin.java b/common/src/main/java/com/craisinlord/antarchy/mixins/SquidzookaMultishotMixin.java index e8a51510..36314c51 100644 --- a/common/src/main/java/com/craisinlord/antarchy/mixins/SquidzookaMultishotMixin.java +++ b/common/src/main/java/com/craisinlord/antarchy/mixins/SquidzookaMultishotMixin.java @@ -1,6 +1,6 @@ package com.craisinlord.antarchy.mixins; -import net.minecraft.core.registries.BuiltInRegistries; +import com.craisinlord.antarchy.content.AntarchyTags; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.enchantment.Enchantment; import org.spongepowered.asm.mixin.Mixin; @@ -13,14 +13,14 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; public abstract class SquidzookaMultishotMixin { @Inject(method = "canEnchant", at = @At("HEAD"), cancellable = true) private void antarchy$allowSquidzookaForMultishot(ItemStack stack, CallbackInfoReturnable cir) { - if (antarchy$isMultishot() && antarchy$isSquidzooka(stack)) { + if (antarchy$isMultishot() && antarchy$isMultishotEnchantable(stack)) { cir.setReturnValue(true); } } @Inject(method = "isPrimaryItem", at = @At("HEAD"), cancellable = true) private void antarchy$allowSquidzookaAsPrimaryItem(ItemStack stack, CallbackInfoReturnable cir) { - if (antarchy$isMultishot() && antarchy$isSquidzooka(stack)) { + if (antarchy$isMultishot() && antarchy$isMultishotEnchantable(stack)) { cir.setReturnValue(true); } } @@ -31,7 +31,7 @@ public abstract class SquidzookaMultishotMixin { } @Unique - private boolean antarchy$isSquidzooka(ItemStack stack) { - return "squidzooka".equals(BuiltInRegistries.ITEM.getKey(stack.getItem()).getPath()); + private boolean antarchy$isMultishotEnchantable(ItemStack stack) { + return stack.is(AntarchyTags.Items.MULTISHOT_ENCHANTABLE); } } diff --git a/common/src/main/java/com/craisinlord/antarchy/mixins/VillagerTradesMixin.java b/common/src/main/java/com/craisinlord/antarchy/mixins/VillagerTradesMixin.java new file mode 100644 index 00000000..cb788cc9 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/mixins/VillagerTradesMixin.java @@ -0,0 +1,93 @@ +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 net.minecraft.world.entity.npc.VillagerProfession; +import net.minecraft.world.entity.npc.VillagerTrades; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.item.trading.ItemCost; +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.get(), 20, 16, 2)); + appendVillagerTrade(VillagerProfession.BUTCHER, 1, + emeraldForItems(AntarchyObjects.COOKED_CORNDOG.get(), 5, 16, 2)); + appendWanderingTrade(0, + itemsForEmerald(AntarchyObjects.CORN_SEEDS.get(), 1, 3, 12, 2)); + } + + private static VillagerTrades.ItemListing emeraldForItems(net.minecraft.world.item.Item item, int count, int maxUses, int villagerXp) { + return (trader, random) -> new MerchantOffer(new ItemCost(item, count), new ItemStack(Items.EMERALD), maxUses, villagerXp, 0.05F); + } + + private static VillagerTrades.ItemListing itemsForEmerald(net.minecraft.world.item.Item item, int emeraldCost, int count, int maxUses, int villagerXp) { + return (trader, random) -> new MerchantOffer(new ItemCost(Items.EMERALD, emeraldCost), new ItemStack(item, 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/src/main/java/com/craisinlord/antarchy/mixins/WaterlilyLumenMixin.java b/common/src/main/java/com/craisinlord/antarchy/mixins/WaterlilyLumenMixin.java new file mode 100644 index 00000000..0ac9787b --- /dev/null +++ b/common/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/src/main/java/com/craisinlord/antarchy/mixins/client/FrogRendererElythiaMixin.java b/common/src/main/java/com/craisinlord/antarchy/mixins/client/FrogRendererElythiaMixin.java new file mode 100644 index 00000000..899a3a71 --- /dev/null +++ b/common/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/src/main/java/com/craisinlord/antarchy/mixins/gravity/client/EntityRenderDispatcherGravityMixin.java b/common/src/main/java/com/craisinlord/antarchy/mixins/gravity/client/EntityRenderDispatcherGravityMixin.java index aedd87d7..057577a5 100644 --- a/common/src/main/java/com/craisinlord/antarchy/mixins/gravity/client/EntityRenderDispatcherGravityMixin.java +++ b/common/src/main/java/com/craisinlord/antarchy/mixins/gravity/client/EntityRenderDispatcherGravityMixin.java @@ -1,5 +1,6 @@ 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; @@ -22,6 +23,8 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; * Rotates entity rendering for inverted gravity. */ public abstract class EntityRenderDispatcherGravityMixin { + @org.spongepowered.asm.mixin.Unique + private static boolean antarchy$loggedGravityRenderFailure; @Inject( method = "render", @@ -39,12 +42,16 @@ public abstract class EntityRenderDispatcherGravityMixin { int packedLight, CallbackInfo ci ) { - float flipProgress = AntarchyGravityApi.getGravityFlipProgress(entity, partialTick); - if (!AntarchyGravityApi.isGravityInverted(entity) && flipProgress <= 0.0F) { - return; - } + try { + float flipProgress = AntarchyGravityApi.getGravityFlipProgress(entity, partialTick); + if (!AntarchyGravityApi.isGravityInverted(entity) && flipProgress <= 0.0F) { + return; + } - poseStack.mulPose(AntarchyGravityRotationUtil.getCameraRotationQuaternion(entity, partialTick)); + poseStack.mulPose(AntarchyGravityRotationUtil.getCameraRotationQuaternion(entity, partialTick)); + } catch (Throwable throwable) { + antarchy$logGravityRenderFailure(entity, throwable); + } } @ModifyVariable( @@ -62,14 +69,19 @@ public abstract class EntityRenderDispatcherGravityMixin { float blue, float partialTick ) { - if (!AntarchyGravityApi.isGravityInverted(entity)) { + try { + if (!AntarchyGravityApi.isGravityInverted(entity)) { + return box; + } + + return AntarchyGravityRotationUtil.boxWorldToPlayer( + box, + AntarchyGravityApi.getGravityDirection(entity) + ); + } catch (Throwable throwable) { + antarchy$logGravityRenderFailure(entity, throwable); return box; } - - return AntarchyGravityRotationUtil.boxWorldToPlayer( - box, - AntarchyGravityApi.getGravityDirection(entity) - ); } @WrapOperation( @@ -78,13 +90,28 @@ public abstract class EntityRenderDispatcherGravityMixin { ) private static Vec3 antarchy$rotateRenderedHitboxViewVector(Entity entity, float partialTick, Operation original) { Vec3 viewVector = original.call(entity, partialTick); - if (!AntarchyGravityApi.isGravityInverted(entity)) { + try { + if (!AntarchyGravityApi.isGravityInverted(entity)) { + return viewVector; + } + + return AntarchyGravityRotationUtil.vecWorldToPlayer( + viewVector, + AntarchyGravityApi.getGravityDirection(entity) + ); + } catch (Throwable throwable) { + antarchy$logGravityRenderFailure(entity, throwable); return viewVector; } + } - return AntarchyGravityRotationUtil.vecWorldToPlayer( - viewVector, - AntarchyGravityApi.getGravityDirection(entity) - ); + @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/src/main/resources/antarchy-common.mixins.json b/common/src/main/resources/antarchy-common.mixins.json index aa9874ed..63429f3f 100644 --- a/common/src/main/resources/antarchy-common.mixins.json +++ b/common/src/main/resources/antarchy-common.mixins.json @@ -1,70 +1,79 @@ { - "required": true, - "package": "com.craisinlord.antarchy.mixins", - "plugin": "com.craisinlord.antarchy.mixins.AntarchyMixinPlugin", - "compatibilityLevel": "JAVA_21", - "mixins": [ - "AccessorRangedAttribute", - "BlockEntityTypeSignMixin", - "BloodglassMixin", - "DreamFireBlockMixin", - "DreamSandLowGravityMixin", - "FireVisualBaseFireBlockMixin", - "FireVisualEntityMixin", - "FlintAndSteelPortalIgnitionMixin", - "GlowVinesUnderLeavesMixin", - "NightmareSwordDamageMixin", - "ServerPlayerGameModeMixin", - "SquidzookaEnchantMixin", - "SquidzookaMultishotMixin", - "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.PlayerPoseFitMixin", - "gravity.PlayerSneakMixin", - "gravity.ProjectileGravityMixin", - "gravity.ServerChunkCacheAccessor", - "gravity.ServerEntityAccessor", - "gravity.ServerGamePacketListenerMixin", - "gravity.ServerPlayerGravityMixin", - "gravity.ThrowableProjectileGravityMixin", - "gravity.TrackedEntityAccessor", - "multipart.EntityMultipartLifecycleMixin" - ], - "client": [ - "client.ElythiaSkyMixin", - "client.ElytraModelAccessor", - "client.GameRendererSwingThroughGrassMixin", - "client.LightningBoltRendererMixin", - "client.MountedVehicleCameraMixin", - "client.ParalyzedMouseTurnMixin", - "client.ScreenEffectRendererFireVisualMixin", - "client.SplashManagerMixin", - "client.ThoraxisFogMixin", - "client.WolfRendererGrimMixin", - "gravity.client.CameraGravityMixin", - "gravity.client.ClientPacketListenerGravityMixin", - "gravity.client.EntityRenderDispatcherGravityMixin", - "gravity.client.FallingBlockRendererBlockEntityMixin" - ], - "injectors": { - "defaultRequire": 1 - }, - "minVersion": "0.8" + "required": true, + "package": "com.craisinlord.antarchy.mixins", + "plugin": "com.craisinlord.antarchy.mixins.AntarchyMixinPlugin", + "compatibilityLevel": "JAVA_21", + "mixins": [ + "AccessorRangedAttribute", + "AmericanFoodConsumeMixin", + "AmericanFoodNameMixin", + "BlockEntityTypeSignMixin", + "BloodglassMixin", + "DreamFireBlockMixin", + "DreamSandLowGravityMixin", + "FireVisualBaseFireBlockMixin", + "FireVisualEntityMixin", + "FlintAndSteelPortalIgnitionMixin", + "FrogSpawnVariantMixin", + "FrogVariantBootstrapMixin", + "GlowSquidLumenSpawnMixin", + "GlowVinesUnderLeavesMixin", + "NightmareSwordDamageMixin", + "PotionBrewingMixin", + "VillagerTradesMixin", + "WaterlilyLumenMixin", + "ServerPlayerGameModeMixin", + "SquidzookaEnchantMixin", + "SquidzookaMultishotMixin", + "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.PlayerPoseFitMixin", + "gravity.PlayerSneakMixin", + "gravity.ProjectileGravityMixin", + "gravity.ServerChunkCacheAccessor", + "gravity.ServerEntityAccessor", + "gravity.ServerGamePacketListenerMixin", + "gravity.ServerPlayerGravityMixin", + "gravity.ThrowableProjectileGravityMixin", + "gravity.TrackedEntityAccessor", + "multipart.EntityMultipartLifecycleMixin" + ], + "client": [ + "client.ElythiaSkyMixin", + "client.ElytraModelAccessor", + "client.FrogRendererElythiaMixin", + "client.GameRendererSwingThroughGrassMixin", + "client.LightningBoltRendererMixin", + "client.MountedVehicleCameraMixin", + "client.ParalyzedMouseTurnMixin", + "client.ScreenEffectRendererFireVisualMixin", + "client.SplashManagerMixin", + "client.ThoraxisFogMixin", + "client.WolfRendererGrimMixin", + "gravity.client.CameraGravityMixin", + "gravity.client.ClientPacketListenerGravityMixin", + "gravity.client.EntityRenderDispatcherGravityMixin", + "gravity.client.FallingBlockRendererBlockEntityMixin" + ], + "injectors": { + "defaultRequire": 1 + }, + "minVersion": "0.8" } diff --git a/common/src/main/resources/assets/antarchy/animations/elka.animation.json b/common/src/main/resources/assets/antarchy/animations/elka.animation.json new file mode 100644 index 00000000..9c7b5e9b --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/animations/elka_baby.animation.json b/common/src/main/resources/assets/antarchy/animations/elka_baby.animation.json new file mode 100644 index 00000000..e97b0151 --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/animations/kraken.animation.json b/common/src/main/resources/assets/antarchy/animations/kraken.animation.json index 95d60f28..f60646db 100644 --- a/common/src/main/resources/assets/antarchy/animations/kraken.animation.json +++ b/common/src/main/resources/assets/antarchy/animations/kraken.animation.json @@ -4,12 +4,87 @@ "idle": { "loop": true, "animation_length": 4, - "sound_effects": { - "0.0": { - "effect": "antarchy:kraken_flying_loop|0.45|1.0" - } - }, "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": { @@ -902,19 +977,19 @@ "rotation": { "0.0": { "post": { - "vector": [-85, -10, -90] + "vector": [-17.5, -10, 0] }, "lerp_mode": "catmullrom" }, "2.0": { "post": { - "vector": [-90, -15, -90] + "vector": [-5, -15, 0] }, "lerp_mode": "catmullrom" }, "4.0": { "post": { - "vector": [-85, -10, -90] + "vector": [-17.5, -10, 0] }, "lerp_mode": "catmullrom" } @@ -1226,19 +1301,19 @@ "rotation": { "0.0": { "post": { - "vector": [90, 37.5, -90] + "vector": [17.5, -10, 0] }, "lerp_mode": "catmullrom" }, - "2.5": { + "2.0": { "post": { - "vector": [89.99992, 1.25, -89.99992] + "vector": [5, 15, 0] }, "lerp_mode": "catmullrom" }, "4.0": { "post": { - "vector": [90, 37.5, -90] + "vector": [17.5, -10, 0] }, "lerp_mode": "catmullrom" } @@ -1377,8 +1452,13 @@ "lerp_mode": "catmullrom" } } - }, - "Kraken": { + } + } + }, + "death": { + "animation_length": 3, + "bones": { + "body": { "rotation": { "0.0": { "post": { @@ -1386,19 +1466,31 @@ }, "lerp_mode": "catmullrom" }, - "0.875": { + "0.25": { "post": { - "vector": [0, 0, 0] + "vector": [1.28919, 0.1664, -7.35346] }, "lerp_mode": "catmullrom" }, - "2.875": { + "0.6667": { "post": { - "vector": [5, 0, 0] + "vector": [1.2985, -0.05997, 2.64399] }, "lerp_mode": "catmullrom" }, - "4.0": { + "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] }, @@ -1412,21 +1504,39 @@ }, "lerp_mode": "catmullrom" }, - "0.625": { + "0.5": { "post": { - "vector": [0, 214, 0] + "vector": [0, 179.48, 0] }, "lerp_mode": "catmullrom" }, - "2.625": { + "1.0": { "post": { - "vector": [0, 254, 0] + "vector": [0, 120.48, 0] }, "lerp_mode": "catmullrom" }, - "4.0": { + "1.5": { "post": { - "vector": [0, 218.48, 0] + "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" } @@ -1438,31 +1548,68 @@ }, "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, 1.1, 1] + "vector": [1, 0.7, 1] }, "lerp_mode": "catmullrom" }, - "3.0": { - "post": { - "vector": [1, 1.1, 1] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { + "2.5": { "post": { "vector": [1, 1, 1] }, "lerp_mode": "catmullrom" } } - } - } - }, - "death": { - "animation_length": 3, - "bones": { + }, "right_eye": { "scale": { "0.0": { @@ -2633,13 +2780,13 @@ "rotation": { "0.0": { "post": { - "vector": [-85, -10, -90] + "vector": [0, -10, 0] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [-88.86743, -49.96822, -94.19588] + "vector": [0, -49.96822, 0] }, "lerp_mode": "catmullrom" } @@ -2963,25 +3110,25 @@ "rotation": { "0.0": { "post": { - "vector": [90, 37.5, -90] + "vector": [0, 37.5, 0] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [90, 42.5, -90] + "vector": [0, 42.5, 0] }, "lerp_mode": "catmullrom" }, "2.0": { "post": { - "vector": [90, 50, -90] + "vector": [0, 50, 0] }, "lerp_mode": "catmullrom" }, "3.0": { "post": { - "vector": [90, 50, -90] + "vector": [0, 50, 0] }, "lerp_mode": "catmullrom" } @@ -3132,158 +3279,6 @@ "lerp_mode": "catmullrom" } } - }, - "Kraken": { - "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" - } - } } } }, @@ -3782,7 +3777,7 @@ }, "0.875": { "post": { - "vector": [-38.70323, -17.28727, -18.81969] + "vector": [-38.7, -17.29, -18.82] }, "lerp_mode": "catmullrom" }, @@ -4284,6 +4279,2159 @@ } } }, + "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": { @@ -4343,6 +6491,120 @@ } } }, + "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" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [0, 27, 0] + }, + "0.5417": { + "vector": [0, -33, 0] + }, + "0.5833": { + "vector": [0, 14, 0] + }, + "0.6667": { + "vector": [0, -19, 0] + }, + "0.75": { + "pre": { + "vector": [0, 5, 0] + }, + "post": { + "vector": [0, 5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, "l_shoulder": { "rotation": { "0.0": { @@ -4505,6 +6767,12 @@ }, "lerp_mode": "catmullrom" }, + "2.3333": { + "post": { + "vector": [0, 0, -6.67] + }, + "lerp_mode": "catmullrom" + }, "3.0": { "post": { "vector": [0, 0, 0] @@ -4539,6 +6807,12 @@ }, "lerp_mode": "catmullrom" }, + "2.4167": { + "post": { + "vector": [0, 0, -35.38] + }, + "lerp_mode": "catmullrom" + }, "3.0": { "post": { "vector": [0, 0, 0] @@ -4573,6 +6847,12 @@ }, "lerp_mode": "catmullrom" }, + "2.5417": { + "post": { + "vector": [0, 0, -39.58] + }, + "lerp_mode": "catmullrom" + }, "3.0": { "post": { "vector": [0, 0, 0] @@ -4777,6 +7057,12 @@ }, "lerp_mode": "catmullrom" }, + "2.3333": { + "post": { + "vector": [0, 0, 6.67] + }, + "lerp_mode": "catmullrom" + }, "3.0": { "post": { "vector": [0, 0, 0] @@ -4811,6 +7097,12 @@ }, "lerp_mode": "catmullrom" }, + "2.4167": { + "post": { + "vector": [0, 0, 35.38] + }, + "lerp_mode": "catmullrom" + }, "3.0": { "post": { "vector": [0, 0, 0] @@ -4845,6 +7137,12 @@ }, "lerp_mode": "catmullrom" }, + "2.5417": { + "post": { + "vector": [0, 0, 39.58] + }, + "lerp_mode": "catmullrom" + }, "3.0": { "post": { "vector": [0, 0, 0] @@ -4886,660 +7184,6 @@ "lerp_mode": "catmullrom" } } - }, - "Kraken": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.7083": { - "post": { - "vector": [-10, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [-10, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "3.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, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5417": { - "post": { - "vector": [3, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5833": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [3, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.7083": { - "post": { - "vector": [3, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.7917": { - "post": { - "vector": [3, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.875": { - "post": { - "vector": [3, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.9167": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.9583": { - "post": { - "vector": [3, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0417": { - "post": { - "vector": [3, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.125": { - "post": { - "vector": [3, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.2083": { - "post": { - "vector": [3, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.2917": { - "post": { - "vector": [3, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.3333": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.375": { - "post": { - "vector": [3, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.4167": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.4583": { - "post": { - "vector": [3, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5417": { - "post": { - "vector": [3, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5833": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.625": { - "post": { - "vector": [3, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.6667": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.7083": { - "post": { - "vector": [3, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.75": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.7917": { - "post": { - "vector": [3, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.8333": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.875": { - "post": { - "vector": [3, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.9167": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.9583": { - "post": { - "vector": [3, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0417": { - "post": { - "vector": [3, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0833": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.125": { - "post": { - "vector": [3, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.1667": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.2083": { - "post": { - "vector": [3, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.25": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.2917": { - "post": { - "vector": [3, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.3333": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.375": { - "post": { - "vector": [3, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.4167": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.4583": { - "post": { - "vector": [3, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "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" - }, - "0.5417": { - "post": { - "vector": [1.1, 1.1, 1] - }, - "lerp_mode": "catmullrom" - }, - "0.5833": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [1.1, 1.1, 1] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - }, - "0.7083": { - "post": { - "vector": [1.1, 1.1, 1] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - }, - "0.7917": { - "post": { - "vector": [1.1, 1.1, 1] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - }, - "0.875": { - "post": { - "vector": [1.1, 1.1, 1] - }, - "lerp_mode": "catmullrom" - }, - "0.9167": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - }, - "0.9583": { - "post": { - "vector": [1.1, 1.1, 1] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - }, - "1.0417": { - "post": { - "vector": [1.1, 1.1, 1] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - }, - "1.125": { - "post": { - "vector": [1.1, 1.1, 1] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - }, - "1.2083": { - "post": { - "vector": [1.1, 1.1, 1] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - }, - "1.2917": { - "post": { - "vector": [1.1, 1.1, 1] - }, - "lerp_mode": "catmullrom" - }, - "1.3333": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - }, - "1.375": { - "post": { - "vector": [1.1, 1.1, 1] - }, - "lerp_mode": "catmullrom" - }, - "1.4167": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - }, - "1.4583": { - "post": { - "vector": [1.1, 1.1, 1] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - }, - "1.5417": { - "post": { - "vector": [1.1, 1.1, 1] - }, - "lerp_mode": "catmullrom" - }, - "1.5833": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - }, - "1.625": { - "post": { - "vector": [1.1, 1.1, 1] - }, - "lerp_mode": "catmullrom" - }, - "1.6667": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - }, - "1.7083": { - "post": { - "vector": [1.1, 1.1, 1] - }, - "lerp_mode": "catmullrom" - }, - "1.75": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - }, - "1.7917": { - "post": { - "vector": [1.1, 1.1, 1] - }, - "lerp_mode": "catmullrom" - }, - "1.8333": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - }, - "1.875": { - "post": { - "vector": [1.1, 1.1, 1] - }, - "lerp_mode": "catmullrom" - }, - "1.9167": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - }, - "1.9583": { - "post": { - "vector": [1.1, 1.1, 1] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - }, - "2.0417": { - "post": { - "vector": [1.1, 1.1, 1] - }, - "lerp_mode": "catmullrom" - }, - "2.0833": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - }, - "2.125": { - "post": { - "vector": [1.1, 1.1, 1] - }, - "lerp_mode": "catmullrom" - }, - "2.1667": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - }, - "2.2083": { - "post": { - "vector": [1.1, 1.1, 1] - }, - "lerp_mode": "catmullrom" - }, - "2.25": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - }, - "2.2917": { - "post": { - "vector": [1.1, 1.1, 1] - }, - "lerp_mode": "catmullrom" - }, - "2.3333": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - }, - "2.375": { - "post": { - "vector": [1.1, 1.1, 1] - }, - "lerp_mode": "catmullrom" - }, - "2.4167": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - }, - "3.0": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Kraken": { - "position": { - "0.0": { - "post": { - "vector": [0, 218.48, 0] - }, - "lerp_mode": "catmullrom" - }, - "3.0": { - "post": { - "vector": [0, 218.48, 0] - }, - "lerp_mode": "catmullrom" - } - } } } } diff --git a/common/src/main/resources/assets/antarchy/animations/glimmer_baby.animation.json b/common/src/main/resources/assets/antarchy/animations/ouranwood_deer.animation.json similarity index 65% rename from common/src/main/resources/assets/antarchy/animations/glimmer_baby.animation.json rename to common/src/main/resources/assets/antarchy/animations/ouranwood_deer.animation.json index 9084e98c..786efc3d 100644 --- a/common/src/main/resources/assets/antarchy/animations/glimmer_baby.animation.json +++ b/common/src/main/resources/assets/antarchy/animations/ouranwood_deer.animation.json @@ -1664,6 +1664,911 @@ } } } + }, + "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/src/main/resources/assets/antarchy/animations/glimmer.animation.json b/common/src/main/resources/assets/antarchy/animations/ouranwood_deer_baby.animation.json similarity index 100% rename from common/src/main/resources/assets/antarchy/animations/glimmer.animation.json rename to common/src/main/resources/assets/antarchy/animations/ouranwood_deer_baby.animation.json diff --git a/common/src/main/resources/assets/antarchy/animations/rpo_launcher.animation.json b/common/src/main/resources/assets/antarchy/animations/rpo_launcher.animation.json new file mode 100644 index 00000000..10ba25bf --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/animations/tenctacle.animation.json b/common/src/main/resources/assets/antarchy/animations/tenctacle.animation.json new file mode 100644 index 00000000..1dba725d --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/blockstates/big_bush.json b/common/src/main/resources/assets/antarchy/blockstates/big_bush.json deleted file mode 100644 index 7ea0c8aa..00000000 --- a/common/src/main/resources/assets/antarchy/blockstates/big_bush.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "variants": { - "age=0,facing=north": { "model": "antarchy:block/big_bush_stage1" }, - "age=0,facing=east": { "model": "antarchy:block/big_bush_stage1" }, - "age=0,facing=south": { "model": "antarchy:block/big_bush_stage1" }, - "age=0,facing=west": { "model": "antarchy:block/big_bush_stage1" }, - "age=1,facing=east": { "model": "antarchy:block/big_bush_stage2" }, - "age=1,facing=south": { "model": "antarchy:block/big_bush_stage2", "y": 90 }, - "age=1,facing=west": { "model": "antarchy:block/big_bush_stage2", "y": 180 }, - "age=1,facing=north": { "model": "antarchy:block/big_bush_stage2", "y": 270 }, - "age=2,facing=north": { "model": "antarchy:block/big_bush_stage3_bottom" }, - "age=2,facing=east": { "model": "antarchy:block/big_bush_stage3_bottom" }, - "age=2,facing=south": { "model": "antarchy:block/big_bush_stage3_bottom" }, - "age=2,facing=west": { "model": "antarchy:block/big_bush_stage3_bottom" } - } -} diff --git a/common/src/main/resources/assets/antarchy/blockstates/big_bush_part.json b/common/src/main/resources/assets/antarchy/blockstates/big_bush_part.json deleted file mode 100644 index ea083469..00000000 --- a/common/src/main/resources/assets/antarchy/blockstates/big_bush_part.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "variants": { - "cap=false": { "model": "antarchy:block/big_bush_part" }, - "cap=true": { "model": "antarchy:block/big_bush_stage3_top" } - } -} diff --git a/common/src/main/resources/assets/antarchy/blockstates/blush_moss_block.json b/common/src/main/resources/assets/antarchy/blockstates/blush_moss_block.json new file mode 100644 index 00000000..fd0dbfdd --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/blockstates/blush_moss_carpet.json b/common/src/main/resources/assets/antarchy/blockstates/blush_moss_carpet.json new file mode 100644 index 00000000..fa1bd926 --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/blockstates/camellia.json b/common/src/main/resources/assets/antarchy/blockstates/camellia.json new file mode 100644 index 00000000..51b1f181 --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/blockstates/corn_crop.json b/common/src/main/resources/assets/antarchy/blockstates/corn_crop.json new file mode 100644 index 00000000..ecdc71fe --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/blockstates/dead_star_coral.json b/common/src/main/resources/assets/antarchy/blockstates/dead_star_coral.json new file mode 100644 index 00000000..40ff406b --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/blockstates/dead_star_coral_block.json b/common/src/main/resources/assets/antarchy/blockstates/dead_star_coral_block.json new file mode 100644 index 00000000..4402b831 --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/blockstates/dead_star_coral_fan.json b/common/src/main/resources/assets/antarchy/blockstates/dead_star_coral_fan.json new file mode 100644 index 00000000..98ca44f2 --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/blockstates/dead_star_coral_wall_fan.json b/common/src/main/resources/assets/antarchy/blockstates/dead_star_coral_wall_fan.json new file mode 100644 index 00000000..29b8f072 --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/blockstates/giant_lily_pad.json b/common/src/main/resources/assets/antarchy/blockstates/giant_lily_pad.json new file mode 100644 index 00000000..00ae5f6a --- /dev/null +++ b/common/src/main/resources/assets/antarchy/blockstates/giant_lily_pad.json @@ -0,0 +1,220 @@ +{ + "variants": { + "shape=single,tile_position=single,rotation=0": { + "model": "antarchy:block/giant_lily_pad/single/single/0" + }, + "shape=single,tile_position=single,rotation=90": { + "model": "antarchy:block/giant_lily_pad/single/single/90" + }, + "shape=single,tile_position=single,rotation=180": { + "model": "antarchy:block/giant_lily_pad/single/single/180" + }, + "shape=single,tile_position=single,rotation=270": { + "model": "antarchy:block/giant_lily_pad/single/single/270" + }, + "shape=two_by_one,tile_position=middle_left,rotation=0": { + "model": "antarchy:block/giant_lily_pad/two_by_one/middle_left/0" + }, + "shape=two_by_one,tile_position=middle_right,rotation=0": { + "model": "antarchy:block/giant_lily_pad/two_by_one/middle_right/0" + }, + "shape=two_by_one,tile_position=top_middle,rotation=0": { + "model": "antarchy:block/giant_lily_pad/two_by_one/top_middle/0" + }, + "shape=two_by_one,tile_position=bottom_middle,rotation=0": { + "model": "antarchy:block/giant_lily_pad/two_by_one/bottom_middle/0" + }, + "shape=two_by_two,tile_position=top_left,rotation=0": { + "model": "antarchy:block/giant_lily_pad/two_by_two/top_left/0" + }, + "shape=two_by_two,tile_position=top_right,rotation=0": { + "model": "antarchy:block/giant_lily_pad/two_by_two/top_right/0" + }, + "shape=two_by_two,tile_position=bottom_left,rotation=0": { + "model": "antarchy:block/giant_lily_pad/two_by_two/bottom_left/0" + }, + "shape=two_by_two,tile_position=bottom_right,rotation=0": { + "model": "antarchy:block/giant_lily_pad/two_by_two/bottom_right/0" + }, + "shape=three_by_three,tile_position=top_left,rotation=0": { + "model": "antarchy:block/giant_lily_pad/three_by_three/top_left/0" + }, + "shape=three_by_three,tile_position=top_middle,rotation=0": { + "model": "antarchy:block/giant_lily_pad/three_by_three/top_middle/0" + }, + "shape=three_by_three,tile_position=top_right,rotation=0": { + "model": "antarchy:block/giant_lily_pad/three_by_three/top_right/0" + }, + "shape=three_by_three,tile_position=middle_left,rotation=0": { + "model": "antarchy:block/giant_lily_pad/three_by_three/middle_left/0" + }, + "shape=three_by_three,tile_position=center,rotation=0": { + "model": "antarchy:block/giant_lily_pad/three_by_three/center/0" + }, + "shape=three_by_three,tile_position=middle_right,rotation=0": { + "model": "antarchy:block/giant_lily_pad/three_by_three/middle_right/0" + }, + "shape=three_by_three,tile_position=bottom_left,rotation=0": { + "model": "antarchy:block/giant_lily_pad/three_by_three/bottom_left/0" + }, + "shape=three_by_three,tile_position=bottom_middle,rotation=0": { + "model": "antarchy:block/giant_lily_pad/three_by_three/bottom_middle/0" + }, + "shape=three_by_three,tile_position=bottom_right,rotation=0": { + "model": "antarchy:block/giant_lily_pad/three_by_three/bottom_right/0" + }, + "shape=two_by_one,tile_position=middle_left,rotation=90": { + "model": "antarchy:block/giant_lily_pad/two_by_one/middle_left/90" + }, + "shape=two_by_one,tile_position=middle_right,rotation=90": { + "model": "antarchy:block/giant_lily_pad/two_by_one/middle_right/90" + }, + "shape=two_by_one,tile_position=top_middle,rotation=90": { + "model": "antarchy:block/giant_lily_pad/two_by_one/top_middle/90" + }, + "shape=two_by_one,tile_position=bottom_middle,rotation=90": { + "model": "antarchy:block/giant_lily_pad/two_by_one/bottom_middle/90" + }, + "shape=two_by_two,tile_position=top_left,rotation=90": { + "model": "antarchy:block/giant_lily_pad/two_by_two/top_left/90" + }, + "shape=two_by_two,tile_position=top_right,rotation=90": { + "model": "antarchy:block/giant_lily_pad/two_by_two/top_right/90" + }, + "shape=two_by_two,tile_position=bottom_left,rotation=90": { + "model": "antarchy:block/giant_lily_pad/two_by_two/bottom_left/90" + }, + "shape=two_by_two,tile_position=bottom_right,rotation=90": { + "model": "antarchy:block/giant_lily_pad/two_by_two/bottom_right/90" + }, + "shape=three_by_three,tile_position=top_left,rotation=90": { + "model": "antarchy:block/giant_lily_pad/three_by_three/top_left/90" + }, + "shape=three_by_three,tile_position=top_middle,rotation=90": { + "model": "antarchy:block/giant_lily_pad/three_by_three/top_middle/90" + }, + "shape=three_by_three,tile_position=top_right,rotation=90": { + "model": "antarchy:block/giant_lily_pad/three_by_three/top_right/90" + }, + "shape=three_by_three,tile_position=middle_left,rotation=90": { + "model": "antarchy:block/giant_lily_pad/three_by_three/middle_left/90" + }, + "shape=three_by_three,tile_position=center,rotation=90": { + "model": "antarchy:block/giant_lily_pad/three_by_three/center/90" + }, + "shape=three_by_three,tile_position=middle_right,rotation=90": { + "model": "antarchy:block/giant_lily_pad/three_by_three/middle_right/90" + }, + "shape=three_by_three,tile_position=bottom_left,rotation=90": { + "model": "antarchy:block/giant_lily_pad/three_by_three/bottom_left/90" + }, + "shape=three_by_three,tile_position=bottom_middle,rotation=90": { + "model": "antarchy:block/giant_lily_pad/three_by_three/bottom_middle/90" + }, + "shape=three_by_three,tile_position=bottom_right,rotation=90": { + "model": "antarchy:block/giant_lily_pad/three_by_three/bottom_right/90" + }, + "shape=two_by_one,tile_position=middle_left,rotation=180": { + "model": "antarchy:block/giant_lily_pad/two_by_one/middle_left/180" + }, + "shape=two_by_one,tile_position=middle_right,rotation=180": { + "model": "antarchy:block/giant_lily_pad/two_by_one/middle_right/180" + }, + "shape=two_by_one,tile_position=top_middle,rotation=180": { + "model": "antarchy:block/giant_lily_pad/two_by_one/top_middle/180" + }, + "shape=two_by_one,tile_position=bottom_middle,rotation=180": { + "model": "antarchy:block/giant_lily_pad/two_by_one/bottom_middle/180" + }, + "shape=two_by_two,tile_position=top_left,rotation=180": { + "model": "antarchy:block/giant_lily_pad/two_by_two/top_left/180" + }, + "shape=two_by_two,tile_position=top_right,rotation=180": { + "model": "antarchy:block/giant_lily_pad/two_by_two/top_right/180" + }, + "shape=two_by_two,tile_position=bottom_left,rotation=180": { + "model": "antarchy:block/giant_lily_pad/two_by_two/bottom_left/180" + }, + "shape=two_by_two,tile_position=bottom_right,rotation=180": { + "model": "antarchy:block/giant_lily_pad/two_by_two/bottom_right/180" + }, + "shape=three_by_three,tile_position=top_left,rotation=180": { + "model": "antarchy:block/giant_lily_pad/three_by_three/top_left/180" + }, + "shape=three_by_three,tile_position=top_middle,rotation=180": { + "model": "antarchy:block/giant_lily_pad/three_by_three/top_middle/180" + }, + "shape=three_by_three,tile_position=top_right,rotation=180": { + "model": "antarchy:block/giant_lily_pad/three_by_three/top_right/180" + }, + "shape=three_by_three,tile_position=middle_left,rotation=180": { + "model": "antarchy:block/giant_lily_pad/three_by_three/middle_left/180" + }, + "shape=three_by_three,tile_position=center,rotation=180": { + "model": "antarchy:block/giant_lily_pad/three_by_three/center/180" + }, + "shape=three_by_three,tile_position=middle_right,rotation=180": { + "model": "antarchy:block/giant_lily_pad/three_by_three/middle_right/180" + }, + "shape=three_by_three,tile_position=bottom_left,rotation=180": { + "model": "antarchy:block/giant_lily_pad/three_by_three/bottom_left/180" + }, + "shape=three_by_three,tile_position=bottom_middle,rotation=180": { + "model": "antarchy:block/giant_lily_pad/three_by_three/bottom_middle/180" + }, + "shape=three_by_three,tile_position=bottom_right,rotation=180": { + "model": "antarchy:block/giant_lily_pad/three_by_three/bottom_right/180" + }, + "shape=two_by_one,tile_position=middle_left,rotation=270": { + "model": "antarchy:block/giant_lily_pad/two_by_one/middle_left/270" + }, + "shape=two_by_one,tile_position=middle_right,rotation=270": { + "model": "antarchy:block/giant_lily_pad/two_by_one/middle_right/270" + }, + "shape=two_by_one,tile_position=top_middle,rotation=270": { + "model": "antarchy:block/giant_lily_pad/two_by_one/top_middle/270" + }, + "shape=two_by_one,tile_position=bottom_middle,rotation=270": { + "model": "antarchy:block/giant_lily_pad/two_by_one/bottom_middle/270" + }, + "shape=two_by_two,tile_position=top_left,rotation=270": { + "model": "antarchy:block/giant_lily_pad/two_by_two/top_left/270" + }, + "shape=two_by_two,tile_position=top_right,rotation=270": { + "model": "antarchy:block/giant_lily_pad/two_by_two/top_right/270" + }, + "shape=two_by_two,tile_position=bottom_left,rotation=270": { + "model": "antarchy:block/giant_lily_pad/two_by_two/bottom_left/270" + }, + "shape=two_by_two,tile_position=bottom_right,rotation=270": { + "model": "antarchy:block/giant_lily_pad/two_by_two/bottom_right/270" + }, + "shape=three_by_three,tile_position=top_left,rotation=270": { + "model": "antarchy:block/giant_lily_pad/three_by_three/top_left/270" + }, + "shape=three_by_three,tile_position=top_middle,rotation=270": { + "model": "antarchy:block/giant_lily_pad/three_by_three/top_middle/270" + }, + "shape=three_by_three,tile_position=top_right,rotation=270": { + "model": "antarchy:block/giant_lily_pad/three_by_three/top_right/270" + }, + "shape=three_by_three,tile_position=middle_left,rotation=270": { + "model": "antarchy:block/giant_lily_pad/three_by_three/middle_left/270" + }, + "shape=three_by_three,tile_position=center,rotation=270": { + "model": "antarchy:block/giant_lily_pad/three_by_three/center/270" + }, + "shape=three_by_three,tile_position=middle_right,rotation=270": { + "model": "antarchy:block/giant_lily_pad/three_by_three/middle_right/270" + }, + "shape=three_by_three,tile_position=bottom_left,rotation=270": { + "model": "antarchy:block/giant_lily_pad/three_by_three/bottom_left/270" + }, + "shape=three_by_three,tile_position=bottom_middle,rotation=270": { + "model": "antarchy:block/giant_lily_pad/three_by_three/bottom_middle/270" + }, + "shape=three_by_three,tile_position=bottom_right,rotation=270": { + "model": "antarchy:block/giant_lily_pad/three_by_three/bottom_right/270" + } + } +} diff --git a/common/src/main/resources/assets/antarchy/blockstates/hanging_peach.json b/common/src/main/resources/assets/antarchy/blockstates/hanging_peach.json new file mode 100644 index 00000000..48e7f45e --- /dev/null +++ b/common/src/main/resources/assets/antarchy/blockstates/hanging_peach.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/hanging_peach" + } + } +} diff --git a/common/src/main/resources/assets/antarchy/blockstates/lumen.json b/common/src/main/resources/assets/antarchy/blockstates/lumen.json new file mode 100644 index 00000000..777d6ac3 --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/blockstates/lumen_froglight.json b/common/src/main/resources/assets/antarchy/blockstates/lumen_froglight.json new file mode 100644 index 00000000..e69294a3 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/blockstates/lumen_froglight.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/lumen_froglight" + } + } +} diff --git a/common/src/main/resources/assets/antarchy/blockstates/ouranwood_hanging_sign.json b/common/src/main/resources/assets/antarchy/blockstates/ouranwood_hanging_sign.json index 019498fd..0c814782 100644 --- a/common/src/main/resources/assets/antarchy/blockstates/ouranwood_hanging_sign.json +++ b/common/src/main/resources/assets/antarchy/blockstates/ouranwood_hanging_sign.json @@ -1,7 +1,7 @@ { "variants": { "": { - "model": "minecraft:block/jungle_hanging_sign" + "model": "antarchy:block/ouranwood_hanging_sign" } } -} \ No newline at end of file +} diff --git a/common/src/main/resources/assets/antarchy/blockstates/ouranwood_sign.json b/common/src/main/resources/assets/antarchy/blockstates/ouranwood_sign.json index 883b1859..3b9e2810 100644 --- a/common/src/main/resources/assets/antarchy/blockstates/ouranwood_sign.json +++ b/common/src/main/resources/assets/antarchy/blockstates/ouranwood_sign.json @@ -1,7 +1,7 @@ { "variants": { "": { - "model": "minecraft:block/jungle_sign" + "model": "antarchy:block/ouranwood_sign" } } -} \ No newline at end of file +} diff --git a/common/src/main/resources/assets/antarchy/blockstates/ouranwood_vine.json b/common/src/main/resources/assets/antarchy/blockstates/ouranwood_vine.json deleted file mode 100644 index dace25bd..00000000 --- a/common/src/main/resources/assets/antarchy/blockstates/ouranwood_vine.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "variants": { - "": { - "model": "antarchy:block/ouranwood_vine" - } - } -} diff --git a/common/src/main/resources/assets/antarchy/blockstates/ouranwood_vine_plant.json b/common/src/main/resources/assets/antarchy/blockstates/ouranwood_vine_plant.json deleted file mode 100644 index ab51785b..00000000 --- a/common/src/main/resources/assets/antarchy/blockstates/ouranwood_vine_plant.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "variants": { - "": { - "model": "antarchy:block/ouranwood_vine_plant" - } - } -} diff --git a/common/src/main/resources/assets/antarchy/blockstates/ouranwood_wall_hanging_sign.json b/common/src/main/resources/assets/antarchy/blockstates/ouranwood_wall_hanging_sign.json index 019498fd..357ac083 100644 --- a/common/src/main/resources/assets/antarchy/blockstates/ouranwood_wall_hanging_sign.json +++ b/common/src/main/resources/assets/antarchy/blockstates/ouranwood_wall_hanging_sign.json @@ -1,7 +1,7 @@ { "variants": { "": { - "model": "minecraft:block/jungle_hanging_sign" + "model": "antarchy:block/ouranwood_wall_hanging_sign" } } -} \ No newline at end of file +} diff --git a/common/src/main/resources/assets/antarchy/blockstates/ouranwood_wall_sign.json b/common/src/main/resources/assets/antarchy/blockstates/ouranwood_wall_sign.json index 883b1859..673297c6 100644 --- a/common/src/main/resources/assets/antarchy/blockstates/ouranwood_wall_sign.json +++ b/common/src/main/resources/assets/antarchy/blockstates/ouranwood_wall_sign.json @@ -1,7 +1,7 @@ { "variants": { "": { - "model": "minecraft:block/jungle_sign" + "model": "antarchy:block/ouranwood_wall_sign" } } -} \ No newline at end of file +} diff --git a/common/src/main/resources/assets/antarchy/blockstates/peach_button.json b/common/src/main/resources/assets/antarchy/blockstates/peach_button.json new file mode 100644 index 00000000..cccef879 --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/blockstates/peach_door.json b/common/src/main/resources/assets/antarchy/blockstates/peach_door.json new file mode 100644 index 00000000..f2b86d87 --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/blockstates/peach_fence.json b/common/src/main/resources/assets/antarchy/blockstates/peach_fence.json new file mode 100644 index 00000000..d337b1a2 --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/blockstates/peach_fence_gate.json b/common/src/main/resources/assets/antarchy/blockstates/peach_fence_gate.json new file mode 100644 index 00000000..56353c76 --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/blockstates/peach_hanging_sign.json b/common/src/main/resources/assets/antarchy/blockstates/peach_hanging_sign.json new file mode 100644 index 00000000..2fafe6a7 --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/blockstates/peach_leaves.json b/common/src/main/resources/assets/antarchy/blockstates/peach_leaves.json new file mode 100644 index 00000000..e7645105 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/blockstates/peach_leaves.json @@ -0,0 +1,6 @@ +{ + "variants": { + "": { "model": "antarchy:block/peach_leaves" } + } +} + diff --git a/common/src/main/resources/assets/antarchy/blockstates/peach_log.json b/common/src/main/resources/assets/antarchy/blockstates/peach_log.json new file mode 100644 index 00000000..36f25917 --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/blockstates/peach_planks.json b/common/src/main/resources/assets/antarchy/blockstates/peach_planks.json new file mode 100644 index 00000000..0477ebee --- /dev/null +++ b/common/src/main/resources/assets/antarchy/blockstates/peach_planks.json @@ -0,0 +1,8 @@ +{ + "variants": { + "": { + "model": "antarchy:block/peach_planks" + } + } +} + diff --git a/common/src/main/resources/assets/antarchy/blockstates/peach_pressure_plate.json b/common/src/main/resources/assets/antarchy/blockstates/peach_pressure_plate.json new file mode 100644 index 00000000..47b689b7 --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/blockstates/peach_sapling.json b/common/src/main/resources/assets/antarchy/blockstates/peach_sapling.json new file mode 100644 index 00000000..1d4e00c9 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/blockstates/peach_sapling.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/peach_sapling" + } + } +} diff --git a/common/src/main/resources/assets/antarchy/blockstates/peach_sign.json b/common/src/main/resources/assets/antarchy/blockstates/peach_sign.json new file mode 100644 index 00000000..63fe0512 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/blockstates/peach_sign.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/peach_sign" + } + } +} diff --git a/common/src/main/resources/assets/antarchy/blockstates/peach_slab.json b/common/src/main/resources/assets/antarchy/blockstates/peach_slab.json new file mode 100644 index 00000000..f2d21f55 --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/blockstates/peach_stairs.json b/common/src/main/resources/assets/antarchy/blockstates/peach_stairs.json new file mode 100644 index 00000000..eb8c244d --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/blockstates/peach_trapdoor.json b/common/src/main/resources/assets/antarchy/blockstates/peach_trapdoor.json new file mode 100644 index 00000000..6ef25c2b --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/blockstates/peach_wall_hanging_sign.json b/common/src/main/resources/assets/antarchy/blockstates/peach_wall_hanging_sign.json new file mode 100644 index 00000000..dd971173 --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/blockstates/peach_wall_sign.json b/common/src/main/resources/assets/antarchy/blockstates/peach_wall_sign.json new file mode 100644 index 00000000..c62670fa --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/blockstates/peach_wood.json b/common/src/main/resources/assets/antarchy/blockstates/peach_wood.json new file mode 100644 index 00000000..18f45dfd --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/blockstates/red_ant_nest.json b/common/src/main/resources/assets/antarchy/blockstates/red_ant_nest.json index a8412942..b75a3e29 100644 --- a/common/src/main/resources/assets/antarchy/blockstates/red_ant_nest.json +++ b/common/src/main/resources/assets/antarchy/blockstates/red_ant_nest.json @@ -1,7 +1,28 @@ { "variants": { - "": { - "model": "antarchy:block/red_ant_nest" - } + "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} + ] } -} \ No newline at end of file +} diff --git a/common/src/main/resources/assets/antarchy/blockstates/roseate_froglight.json b/common/src/main/resources/assets/antarchy/blockstates/roseate_froglight.json new file mode 100644 index 00000000..8b93d9c2 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/blockstates/roseate_froglight.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/roseate_froglight" + } + } +} diff --git a/common/src/main/resources/assets/antarchy/blockstates/spider_lily.json b/common/src/main/resources/assets/antarchy/blockstates/spider_lily.json new file mode 100644 index 00000000..f94282c4 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/blockstates/spider_lily.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/spider_lily" + } + } +} diff --git a/common/src/main/resources/assets/antarchy/blockstates/star_coral.json b/common/src/main/resources/assets/antarchy/blockstates/star_coral.json new file mode 100644 index 00000000..e6897b90 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/blockstates/star_coral.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/star_coral" + } + } +} diff --git a/common/src/main/resources/assets/antarchy/blockstates/star_coral_block.json b/common/src/main/resources/assets/antarchy/blockstates/star_coral_block.json new file mode 100644 index 00000000..d14eea97 --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/blockstates/star_coral_fan.json b/common/src/main/resources/assets/antarchy/blockstates/star_coral_fan.json new file mode 100644 index 00000000..98cb2826 --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/blockstates/star_coral_wall_fan.json b/common/src/main/resources/assets/antarchy/blockstates/star_coral_wall_fan.json new file mode 100644 index 00000000..98fab4f6 --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/blockstates/stripped_peach_log.json b/common/src/main/resources/assets/antarchy/blockstates/stripped_peach_log.json new file mode 100644 index 00000000..e7bf00d4 --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/blockstates/stripped_peach_wood.json b/common/src/main/resources/assets/antarchy/blockstates/stripped_peach_wood.json new file mode 100644 index 00000000..7e0dea68 --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/blockstates/torchflower_bush.json b/common/src/main/resources/assets/antarchy/blockstates/torchflower_bush.json deleted file mode 100644 index b743846f..00000000 --- a/common/src/main/resources/assets/antarchy/blockstates/torchflower_bush.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "variants": { - "half=lower": { - "model": "antarchy:block/torchflower_bush_bottom" - }, - "half=upper": { - "model": "antarchy:block/torchflower_bush_top" - } - } -} diff --git a/common/src/main/resources/assets/antarchy/blockstates/very_short_grass.json b/common/src/main/resources/assets/antarchy/blockstates/very_short_grass.json deleted file mode 100644 index c25b3915..00000000 --- a/common/src/main/resources/assets/antarchy/blockstates/very_short_grass.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "variants": { - "": { "model": "antarchy:block/very_short_grass" } - } -} diff --git a/common/src/main/resources/assets/antarchy/blockstates/very_tall_grass.json b/common/src/main/resources/assets/antarchy/blockstates/very_tall_grass.json deleted file mode 100644 index 65ddba9e..00000000 --- a/common/src/main/resources/assets/antarchy/blockstates/very_tall_grass.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "variants": { - "part=lower": { "model": "antarchy:block/very_tall_grass_bottom" }, - "part=middle": { "model": "antarchy:block/very_tall_grass_middle" }, - "part=upper": { "model": "antarchy:block/very_tall_grass_top" } - } -} diff --git a/common/src/main/resources/assets/antarchy/blockstates/wild_corn.json b/common/src/main/resources/assets/antarchy/blockstates/wild_corn.json new file mode 100644 index 00000000..aa33127a --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/geo/elka.geo.json b/common/src/main/resources/assets/antarchy/geo/elka.geo.json new file mode 100644 index 00000000..83bf0d6c --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/geo/elka_baby.geo.json b/common/src/main/resources/assets/antarchy/geo/elka_baby.geo.json new file mode 100644 index 00000000..23efa651 --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/geo/kraken.geo.json b/common/src/main/resources/assets/antarchy/geo/kraken.geo.json index eba7b341..2138a567 100644 --- a/common/src/main/resources/assets/antarchy/geo/kraken.geo.json +++ b/common/src/main/resources/assets/antarchy/geo/kraken.geo.json @@ -13,10 +13,10 @@ "bones": [ { "name": "Kraken", - "pivot": [0, 51, -8] + "pivot": [0, 0, 0] }, { - "name": "head", + "name": "body", "parent": "Kraken", "pivot": [0, 51, -8], "cubes": [ @@ -26,7 +26,7 @@ }, { "name": "mouth", - "parent": "head", + "parent": "body", "pivot": [0, 51, -23.9], "cubes": [ {"origin": [-6.5, 20, -44.4], "size": [13, 33, 24], "uv": [169, 296]} @@ -44,7 +44,7 @@ }, { "name": "head_top", - "parent": "head", + "parent": "body", "pivot": [0, 79.25, -6.25], "cubes": [ {"origin": [-42.5, 79, -49], "size": [85, 99, 85], "uv": [0, 0]}, @@ -55,7 +55,7 @@ }, { "name": "right_eye", - "parent": "head", + "parent": "body", "pivot": [-53, 73, -41], "cubes": [ {"origin": [-59.5, 58, -56], "size": [13, 30, 30], "uv": [0, 296]} @@ -63,7 +63,7 @@ }, { "name": "left_eye", - "parent": "head", + "parent": "body", "pivot": [53, 73, -41], "cubes": [ {"origin": [46.5, 58, -56], "size": [13, 30, 30], "uv": [0, 296], "mirror": true} @@ -71,7 +71,7 @@ }, { "name": "l_shoulder", - "parent": "head", + "parent": "body", "pivot": [31.1875, 61.375, -12.5], "cubes": [ {"origin": [25, 14, -29], "size": [17, 47, 33], "uv": [0, 356]} @@ -133,13 +133,20 @@ {"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": "head", + "parent": "body", "pivot": [0, 58.375, -52.5], - "rotation": [0, 90, 0], "cubes": [ - {"origin": [-6.1875, 11, -69], "size": [17, 47, 33], "uv": [0, 436]} + {"origin": [-6.1875, 11, -69], "size": [17, 47, 33], "pivot": [0.3125, -79.5, -52.5], "rotation": [0, 90, 0], "uv": [0, 436]} ] }, { @@ -147,7 +154,7 @@ "parent": "center_tentacule", "pivot": [1.48214, 10.92857, -52.5], "cubes": [ - {"origin": [-6.1875, -37, -66], "size": [14, 48, 27], "uv": [86, 296]} + {"origin": [-6.1875, -37, -66], "size": [14, 48, 27], "pivot": [0.3125, -79.5, -52.5], "rotation": [0, 90, 0], "uv": [86, 296]} ] }, { @@ -155,7 +162,7 @@ "parent": "center_tentacule2", "pivot": [1.29167, -37.00833, -52.5], "cubes": [ - {"origin": [-6.1875, -85, -63], "size": [14, 48, 21], "uv": [100, 371]} + {"origin": [-6.1875, -85, -63], "size": [14, 48, 21], "pivot": [0.3125, -79.5, -52.5], "rotation": [0, 90, 0], "uv": [100, 371]} ] }, { @@ -163,7 +170,7 @@ "parent": "center_tentacule3", "pivot": [1.025, -85, -52.5], "cubes": [ - {"origin": [-6.1875, -133, -63], "size": [14, 48, 21], "uv": [170, 371]} + {"origin": [-6.1875, -133, -63], "size": [14, 48, 21], "pivot": [0.3125, -79.5, -52.5], "rotation": [0, 90, 0], "uv": [170, 371]} ] }, { @@ -171,7 +178,7 @@ "parent": "center_tentacule4", "pivot": [-0.375, -132.975, -52.5], "cubes": [ - {"origin": [-6.1875, -181, -61], "size": [12, 48, 17], "uv": [243, 330]} + {"origin": [-6.1875, -181, -61], "size": [12, 48, 17], "pivot": [0.3125, -79.5, -52.5], "rotation": [0, 90, 0], "uv": [243, 330]} ] }, { @@ -179,16 +186,15 @@ "parent": "center_tentacule5", "pivot": [-0.70833, -180.99167, -52.5], "cubes": [ - {"origin": [-6.1875, -206, -59], "size": [9, 25, 13], "uv": [242, 398]} + {"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": "head", + "parent": "body", "pivot": [0, 58.375, 24.5], - "rotation": [0, -90, 0], "cubes": [ - {"origin": [-6.1875, 11, 8], "size": [17, 47, 33], "uv": [0, 436]} + {"origin": [-6.1875, 11, 8], "size": [17, 47, 33], "pivot": [0.3125, -79.5, 24.5], "rotation": [0, -90, 0], "uv": [0, 436]} ] }, { @@ -196,7 +202,7 @@ "parent": "center_tentacule_back", "pivot": [1.48214, 10.92857, 24.5], "cubes": [ - {"origin": [-6.1875, -37, 11], "size": [14, 48, 27], "uv": [86, 296]} + {"origin": [-6.1875, -37, 11], "size": [14, 48, 27], "pivot": [0.3125, -79.5, 24.5], "rotation": [0, -90, 0], "uv": [86, 296]} ] }, { @@ -204,7 +210,7 @@ "parent": "center_tentacule_back2", "pivot": [1.29167, -37.00833, 24.5], "cubes": [ - {"origin": [-6.1875, -85, 14], "size": [14, 48, 21], "uv": [100, 371]} + {"origin": [-6.1875, -85, 14], "size": [14, 48, 21], "pivot": [0.3125, -79.5, 24.5], "rotation": [0, -90, 0], "uv": [100, 371]} ] }, { @@ -212,7 +218,7 @@ "parent": "center_tentacule_back3", "pivot": [1.025, -85, 24.5], "cubes": [ - {"origin": [-6.1875, -133, 14], "size": [14, 48, 21], "uv": [170, 371]} + {"origin": [-6.1875, -133, 14], "size": [14, 48, 21], "pivot": [0.3125, -79.5, 24.5], "rotation": [0, -90, 0], "uv": [170, 371]} ] }, { @@ -220,7 +226,7 @@ "parent": "center_tentacule_back4", "pivot": [-0.375, -132.975, 24.5], "cubes": [ - {"origin": [-6.1875, -181, 16], "size": [12, 48, 17], "uv": [243, 330]} + {"origin": [-6.1875, -181, 16], "size": [12, 48, 17], "pivot": [0.3125, -79.5, 24.5], "rotation": [0, -90, 0], "uv": [243, 330]} ] }, { @@ -228,16 +234,15 @@ "parent": "center_tentacule_back5", "pivot": [-0.70833, -180.99167, 24.5], "cubes": [ - {"origin": [-6.1875, -206, 18], "size": [9, 25, 13], "uv": [242, 398]} + {"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": "head", + "parent": "body", "pivot": [22.1875, 58.375, 14.5], - "rotation": [0, -90, 0], "cubes": [ - {"origin": [16, 11, -2], "size": [17, 47, 33], "uv": [0, 356]} + {"origin": [16, 11, -2], "size": [17, 47, 33], "pivot": [22.5, -79.5, 14.5], "rotation": [0, -90, 0], "uv": [0, 356]} ] }, { @@ -245,7 +250,7 @@ "parent": "l_back_tentacule", "pivot": [21.85714, 10.92857, 14.5], "cubes": [ - {"origin": [16, -37, 1], "size": [14, 48, 27], "uv": [86, 296]} + {"origin": [16, -37, 1], "size": [14, 48, 27], "pivot": [22.5, -79.5, 14.5], "rotation": [0, -90, 0], "uv": [86, 296]} ] }, { @@ -253,7 +258,7 @@ "parent": "l_back_tentacule2", "pivot": [21.66667, -37.00833, 14.5], "cubes": [ - {"origin": [16, -85, 4], "size": [14, 48, 21], "uv": [100, 371]} + {"origin": [16, -85, 4], "size": [14, 48, 21], "pivot": [22.5, -79.5, 14.5], "rotation": [0, -90, 0], "uv": [100, 371]} ] }, { @@ -261,7 +266,7 @@ "parent": "l_back_tentacule3", "pivot": [21.4, -85, 14.5], "cubes": [ - {"origin": [16, -133, 4], "size": [14, 48, 21], "uv": [170, 371]} + {"origin": [16, -133, 4], "size": [14, 48, 21], "pivot": [22.5, -79.5, 14.5], "rotation": [0, -90, 0], "uv": [170, 371]} ] }, { @@ -269,7 +274,7 @@ "parent": "l_back_tentacule4", "pivot": [21, -132.975, 14.5], "cubes": [ - {"origin": [16, -181, 6], "size": [12, 48, 17], "uv": [243, 330]} + {"origin": [16, -181, 6], "size": [12, 48, 17], "pivot": [22.5, -79.5, 14.5], "rotation": [0, -90, 0], "uv": [243, 330]} ] }, { @@ -277,16 +282,15 @@ "parent": "l_back_tentacule5", "pivot": [20.66667, -180.99167, 14.5], "cubes": [ - {"origin": [16, -206, 8], "size": [9, 25, 13], "uv": [242, 398]} + {"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": "head", + "parent": "body", "pivot": [-22.1875, 58.375, 14.5], - "rotation": [0, 90, 0], "cubes": [ - {"origin": [-33, 11, -2], "size": [17, 47, 33], "uv": [0, 356], "mirror": true} + {"origin": [-33, 11, -2], "size": [17, 47, 33], "pivot": [-22.5, -79.5, 14.5], "rotation": [0, 90, 0], "uv": [0, 356], "mirror": true} ] }, { @@ -294,7 +298,7 @@ "parent": "r_back_tentacule", "pivot": [-21.85714, 10.92857, 14.5], "cubes": [ - {"origin": [-30, -37, 1], "size": [14, 48, 27], "uv": [86, 296], "mirror": true} + {"origin": [-30, -37, 1], "size": [14, 48, 27], "pivot": [-22.5, -79.5, 14.5], "rotation": [0, 90, 0], "uv": [86, 296], "mirror": true} ] }, { @@ -302,7 +306,7 @@ "parent": "r_back_tentacule2", "pivot": [-21.66667, -37.00833, 14.5], "cubes": [ - {"origin": [-30, -85, 4], "size": [14, 48, 21], "uv": [100, 371], "mirror": true} + {"origin": [-30, -85, 4], "size": [14, 48, 21], "pivot": [-22.5, -79.5, 14.5], "rotation": [0, 90, 0], "uv": [100, 371], "mirror": true} ] }, { @@ -310,7 +314,7 @@ "parent": "r_back_tentacule3", "pivot": [-21.4, -85, 14.5], "cubes": [ - {"origin": [-30, -133, 4], "size": [14, 48, 21], "uv": [170, 371], "mirror": true} + {"origin": [-30, -133, 4], "size": [14, 48, 21], "pivot": [-22.5, -79.5, 14.5], "rotation": [0, 90, 0], "uv": [170, 371], "mirror": true} ] }, { @@ -318,7 +322,7 @@ "parent": "r_back_tentacule4", "pivot": [-21, -132.975, 14.5], "cubes": [ - {"origin": [-28, -181, 6], "size": [12, 48, 17], "uv": [243, 330], "mirror": true} + {"origin": [-28, -181, 6], "size": [12, 48, 17], "pivot": [-22.5, -79.5, 14.5], "rotation": [0, 90, 0], "uv": [243, 330], "mirror": true} ] }, { @@ -326,16 +330,15 @@ "parent": "r_back_tentacule5", "pivot": [-20.66667, -180.99167, 14.5], "cubes": [ - {"origin": [-25, -206, 8], "size": [9, 25, 13], "uv": [242, 398], "mirror": true} + {"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": "head", + "parent": "body", "pivot": [-28.1875, 58.375, -42.5], - "rotation": [0, -90, 0], "cubes": [ - {"origin": [-39, 11, -59], "size": [17, 47, 33], "uv": [0, 356], "mirror": true} + {"origin": [-39, 11, -59], "size": [17, 47, 33], "pivot": [-28.5, -79.5, -42.5], "rotation": [0, -90, 0], "uv": [0, 356], "mirror": true} ] }, { @@ -343,7 +346,7 @@ "parent": "r_tentacule", "pivot": [-27.85714, 10.92857, -42.5], "cubes": [ - {"origin": [-36, -37, -56], "size": [14, 48, 27], "uv": [86, 296], "mirror": true} + {"origin": [-36, -37, -56], "size": [14, 48, 27], "pivot": [-28.5, -79.5, -42.5], "rotation": [0, -90, 0], "uv": [86, 296], "mirror": true} ] }, { @@ -351,7 +354,7 @@ "parent": "r_tentacule2", "pivot": [-27.66667, -37.00833, -42.5], "cubes": [ - {"origin": [-36, -85, -53], "size": [14, 48, 21], "uv": [100, 371], "mirror": true} + {"origin": [-36, -85, -53], "size": [14, 48, 21], "pivot": [-28.5, -79.5, -42.5], "rotation": [0, -90, 0], "uv": [100, 371], "mirror": true} ] }, { @@ -359,7 +362,7 @@ "parent": "r_tentacule3", "pivot": [-27.4, -85, -42.5], "cubes": [ - {"origin": [-36, -133, -53], "size": [14, 48, 21], "uv": [170, 371], "mirror": true} + {"origin": [-36, -133, -53], "size": [14, 48, 21], "pivot": [-28.5, -79.5, -42.5], "rotation": [0, -90, 0], "uv": [170, 371], "mirror": true} ] }, { @@ -367,7 +370,7 @@ "parent": "r_tentacule4", "pivot": [-27, -132.975, -42.5], "cubes": [ - {"origin": [-34, -181, -51], "size": [12, 48, 17], "uv": [243, 330], "mirror": true} + {"origin": [-34, -181, -51], "size": [12, 48, 17], "pivot": [-28.5, -79.5, -42.5], "rotation": [0, -90, 0], "uv": [243, 330], "mirror": true} ] }, { @@ -375,16 +378,15 @@ "parent": "r_tentacule5", "pivot": [-26.66667, -180.99167, -42.5], "cubes": [ - {"origin": [-31, -206, -49], "size": [9, 25, 13], "uv": [242, 398], "mirror": true} + {"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": "head", + "parent": "body", "pivot": [28.1875, 58.375, -42.5], - "rotation": [0, 90, 0], "cubes": [ - {"origin": [22, 11, -59], "size": [17, 47, 33], "uv": [0, 356]} + {"origin": [22, 11, -59], "size": [17, 47, 33], "pivot": [28.5, -79.5, -42.5], "rotation": [0, 90, 0], "uv": [0, 356]} ] }, { @@ -392,7 +394,7 @@ "parent": "l_tentacule", "pivot": [27.85714, 10.92857, -42.5], "cubes": [ - {"origin": [22, -37, -56], "size": [14, 48, 27], "uv": [86, 296]} + {"origin": [22, -37, -56], "size": [14, 48, 27], "pivot": [28.5, -79.5, -42.5], "rotation": [0, 90, 0], "uv": [86, 296]} ] }, { @@ -400,7 +402,7 @@ "parent": "l_tentacule2", "pivot": [27.66667, -37.00833, -42.5], "cubes": [ - {"origin": [22, -85, -53], "size": [14, 48, 21], "uv": [100, 371]} + {"origin": [22, -85, -53], "size": [14, 48, 21], "pivot": [28.5, -79.5, -42.5], "rotation": [0, 90, 0], "uv": [100, 371]} ] }, { @@ -408,7 +410,7 @@ "parent": "l_tentacule3", "pivot": [27.4, -85, -42.5], "cubes": [ - {"origin": [22, -133, -53], "size": [14, 48, 21], "uv": [170, 371]} + {"origin": [22, -133, -53], "size": [14, 48, 21], "pivot": [28.5, -79.5, -42.5], "rotation": [0, 90, 0], "uv": [170, 371]} ] }, { @@ -416,7 +418,7 @@ "parent": "l_tentacule4", "pivot": [27, -132.975, -42.5], "cubes": [ - {"origin": [22, -181, -51], "size": [12, 48, 17], "uv": [243, 330]} + {"origin": [22, -181, -51], "size": [12, 48, 17], "pivot": [28.5, -79.5, -42.5], "rotation": [0, 90, 0], "uv": [243, 330]} ] }, { @@ -424,12 +426,12 @@ "parent": "l_tentacule5", "pivot": [26.66667, -180.99167, -42.5], "cubes": [ - {"origin": [22, -206, -49], "size": [9, 25, 13], "uv": [242, 398]} + {"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": "head", + "parent": "body", "pivot": [-31.1875, 61.375, -12.5], "cubes": [ {"origin": [-42, 14, -29], "size": [17, 47, 33], "uv": [0, 356], "mirror": true} diff --git a/common/src/main/resources/assets/antarchy/geo/krakens_grasp.geo.json b/common/src/main/resources/assets/antarchy/geo/krakens_grasp.geo.json new file mode 100644 index 00000000..a8e4f668 --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/geo/glimmer.geo.json b/common/src/main/resources/assets/antarchy/geo/ouranwood_deer.geo.json similarity index 100% rename from common/src/main/resources/assets/antarchy/geo/glimmer.geo.json rename to common/src/main/resources/assets/antarchy/geo/ouranwood_deer.geo.json diff --git a/common/src/main/resources/assets/antarchy/geo/glimmer_baby.geo.json b/common/src/main/resources/assets/antarchy/geo/ouranwood_deer_baby.geo.json similarity index 100% rename from common/src/main/resources/assets/antarchy/geo/glimmer_baby.geo.json rename to common/src/main/resources/assets/antarchy/geo/ouranwood_deer_baby.geo.json diff --git a/common/src/main/resources/assets/antarchy/geo/rpo_launcher.geo.json b/common/src/main/resources/assets/antarchy/geo/rpo_launcher.geo.json new file mode 100644 index 00000000..07451faf --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/geo/tentacle.geo.json b/common/src/main/resources/assets/antarchy/geo/tentacle.geo.json new file mode 100644 index 00000000..f3e0a41a --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/lang/en_us.json b/common/src/main/resources/assets/antarchy/lang/en_us.json index 1d4cd85b..c340bff9 100644 --- a/common/src/main/resources/assets/antarchy/lang/en_us.json +++ b/common/src/main/resources/assets/antarchy/lang/en_us.json @@ -1,795 +1,842 @@ { - "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_vine": "Ouranwood Vine", - "block.antarchy.ouranwood_sign": "Ouranwood Sign", - "block.antarchy.ouranwood_hanging_sign": "Ouranwood Hanging Sign", - "block.antarchy.orange_milkweed": "Orange Milkweed", - "block.antarchy.pink_milkweed": "Pink Milkweed", - "block.antarchy.hushweed": "Hushweed", - "block.antarchy.big_bush": "Big Bush", - "block.antarchy.big_bush_part": "Big Bush", - "block.antarchy.very_short_grass": "Very Short Grass", - "block.antarchy.very_tall_grass": "Very Tall Grass", - "block.antarchy.umbral_moss_block": "Umbral Moss Block", - "block.antarchy.umbral_moss_carpet": "Umbral 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.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_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.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.polished_antimetal": "Polished Antimetal", - "block.antarchy.antimetal_scaffolding": "Antimetal Scaffolding", - "block.antarchy.cornea_stalk": "Cornea Stalk", - "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.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.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.", - "block.antarchy.bile": "Bile", - "block.antarchy.ichor": "Ichor", - "block.antarchy.antiwater": "Antiwater", - "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.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.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.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.", - "item.antarchy.kraken_tooth": "Kraken Tooth", - "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.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 & 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.ouranwood_acorn": "Ouranwood Acorn", - "item.antarchy.ouranwood_vine": "Ouranwood Vine", - "item.antarchy.ouranwood_boat": "Ouranwood Boat", - "item.antarchy.ouranwood_chest_boat": "Ouranwood Chest Boat", - "item.antarchy.big_bush": "Big Bush", - "item.antarchy.big_bush.tooltip": "Can be bonemealed", - "item.antarchy.very_short_grass": "Very Short Grass", - "item.antarchy.very_tall_grass": "Very Tall Grass", - "item.antarchy.orange_milkweed": "Orange Milkweed", - "item.antarchy.pink_milkweed": "Pink Milkweed", - "item.antarchy.hushweed": "Hushweed", - "item.antarchy.umbral_moss_block": "Umbral Moss Block", - "item.antarchy.umbral_moss_carpet": "Umbral Moss Carpet", - "item.antarchy.torchflower_bush": "Torchflower Bush", - "block.antarchy.torchflower_bush": "Torchflower Bush", - "item.antarchy.mud_pie": "Mud Pie", - "item.antarchy.duct_tape": "Duct Tape", - "item.antarchy.duct_tape.tooltip": "Place down and right-click 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", - "item.antarchy.king_scale": "King Scale", - "item.antarchy.queen_scale": "Queen Scale", - "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.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.scorpion_whip": "Emperor Scorpion Whip", - "tooltip.antarchy.scorpion_whip.lash": "Lashes prey from afar and embeds a venomous tether.", - "tooltip.antarchy.scorpion_whip.reel": "Right-click to reel tethered prey.", - "tooltip.antarchy.scorpion_whip.snap": "Left-click tethered prey again to snap the stinger free.", - "item.antarchy.fallen_king_crown": "Fallen King's 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.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.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.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.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't.", - "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.butterfly_fields": "Butterfly Fields", - "biome.antarchy.torchflower_fields": "Torchflower Fields", - "biome.antarchy.ouranwood_forest": "Ouranwood Forest", - "biome.antarchy.fungal_ouranwood_forest": "Fungal Ouranwood Forest", - "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.", - "message.antarchy.big_bertha.mode": "Big Bertha Mode: %s", - "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.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.paralyzed": "Paralyzed", - "effect.antarchy.inverted": "Inverted", - "effect.antarchy.stinky": "Stinky", - "effect.antarchy.glimmers_grace": "Glimmer's Grace", - "effect.antarchy.shrinking": "Shrinking", - "effect.antarchy.growth": "Growth", - "effect.antarchy.bloodglass_ward": "Bloodglass Ward", - "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-right-click to cycle boss modes.", - "tooltip.antarchy.big_bertha.mode.basilisk": "Right-click 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": "Players suffer Dread; hits inflict weakness.", - "tooltip.antarchy.big_bertha.mode.kraken": "Hits slam targets back and call lightning.", - "tooltip.antarchy.big_bertha.mode.molevore": "Right-click to spin forward and drill through Molevore blocks.", - "tooltip.antarchy.big_bertha.mode.toreterror": "Right-click to launch into the air and crash down with an AOE shockwave.", - "tooltip.antarchy.ultimate_tools_3x3": "Shift-right-click 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": "Left-click: blast nearby entities or throw the held target.", - "tooltip.antarchy.gravity_gun.secondary": "Right-click: 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.fallen_kingdom_castle.title": "I Used to Rule the World...", - "advancements.antarchy.fallen_kingdom_castle.description": "Discover the Fallen Kingdom Castle.", - "advancements.antarchy.fallen_king_crown.title": "Chunks would load when I gave the word...", - "advancements.antarchy.fallen_king_crown.description": "Obtain the Fallen King's Crown.", - "advancements.antarchy.the_lab.title": "Hello Everyone, Dan Here!", - "advancements.antarchy.the_lab.description": "Discover Dr. Trayaurus' 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' 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't 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's storm", - "death.attack.kraken_lightning.player": "%1$s was struck down by the Kraken's storm 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", - "trim_material.antarchy.blood_crystal": "Blood Crystal", - "trim_material.antarchy.nightmare_scale": "Nightmare Scale", - "trim_material.antarchy.uranium": "Uranium", - "trim_material.antarchy.titanium": "Titanium", - "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.gravity_gun_craft.title": "Pick Up Artist", - "advancements.antarchy.gravity_gun_craft.description": "Craft a Gravity Gun.", - "advancements.antarchy.visit_cavaryn.description": "Use a termite to reach Cavaryn.", - "advancements.antarchy.visit_cavaryn.title": "You will be Termite-ated", - "block.antarchy.amber_lichen": "Amber Lichen", - "block.antarchy.amber_moss_block": "Amber Moss Block", - "block.antarchy.amber_moss_carpet": "Amber Moss Carpet", - "block.antarchy.bile_vein": "Bile Vein", - "block.antarchy.broodstone": "Broodstone", - "block.antarchy.chiten_block": "Chiten Block", - "block.antarchy.chiten_spike": "Chiten Spike", - "block.antarchy.creeping_horror_egg": "Creeping Horror Egg", - "block.antarchy.creepvine": "Creepvine", - "block.antarchy.lurking_terror_egg": "Lurking Terror Egg", - "block.antarchy.myrmite": "Myrmite", - "block.antarchy.termite_nest": "Termite Nest", - "entity.antarchy.creeping_horror": "Creeping Horror", - "entity.antarchy.dorrie": "Dorrie", - "entity.antarchy.hercules_beetle": "Hercules Beetle", - "entity.antarchy.honeyed_apple_cow": "Honeyed Apple Cow", - "entity.antarchy.jumpy_bug": "Jumpy Bug", - "entity.antarchy.lurking_terror": "Lurking Terror", - "entity.antarchy.spit_bug": "Spit Bug", - "entity.antarchy.stink_bug": "Stink Bug", - "entity.antarchy.termite": "Termite", - "item.antarchy.amber_lichen": "Amber Lichen", - "item.antarchy.amber_moss_block": "Amber Moss Block", - "item.antarchy.amber_moss_carpet": "Amber Moss Carpet", - "item.antarchy.bile_vein": "Bile Vein", - "item.antarchy.broodstone": "Broodstone", - "item.antarchy.chiten": "Chiten", - "item.antarchy.chiten_block": "Chiten Block", - "item.antarchy.chiten_spike": "Chiten Spike", - "item.antarchy.creeping_horror_egg": "Creeping Horror Egg", - "item.antarchy.creeping_horror_spawn_egg": "Creeping Horror Spawn Egg", - "item.antarchy.creepvine": "Creepvine", - "item.antarchy.dorrie_spawn_egg": "Dorrie Spawn Egg", - "item.antarchy.hercules_beetle_spawn_egg": "Hercules Beetle Spawn Egg", - "item.antarchy.honeyed_apple_cow_spawn_egg": "Honeyed Apple Cow Spawn Egg", - "item.antarchy.jumpy_bug_spawn_egg": "Jumpy Bug Spawn Egg", - "item.antarchy.lurking_terror_egg": "Lurking Terror Egg", - "item.antarchy.lurking_terror_spawn_egg": "Lurking Terror Spawn Egg", - "item.antarchy.myrmite": "Myrmite", - "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", - "key.antarchy.dorrie_charge_jump": "Dorrie: Charge Jump", - "key.antarchy.hercules_beetle_charge": "Hercules Beetle: Charge", - "subtitles.antarchy.creeping_horror_bite": "Creeping Horror bites", - "subtitles.antarchy.creeping_horror_growl": "Creeping Horror growls", - "subtitles.antarchy.creeping_horror_hurt": "Creeping Horror hurts", - "subtitles.antarchy.lurking_terror_bite": "Lurking Terror bites", - "subtitles.antarchy.lurking_terror_fly_loop": "Lurking Terror flies", - "subtitles.antarchy.lurking_terror_hurt": "Lurking Terror hurts", - "subtitles.antarchy.lurking_terror_snarl": "Lurking Terror snarls" + "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.giant_lily_pad": "Giant Lily Pad", + "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.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_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.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.polished_antimetal": "Polished Antimetal", + "block.antarchy.antimetal_scaffolding": "Antimetal Scaffolding", + "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.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.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.", + "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.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.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.", + "item.antarchy.kraken_tooth": "Kraken Tooth", + "item.antarchy.kraken_tentacle": "Kraken Tentacle", + "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.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.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 right-click 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", + "item.antarchy.king_scale": "King Scale", + "item.antarchy.queen_scale": "Queen Scale", + "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": "Right-click to reel tethered prey.", + "tooltip.antarchy.scorpion_whip.snap": "Left-click tethered prey again 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.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": "Right-click 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", + "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.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", + "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.", + "message.antarchy.big_bertha.mode": "Big Bertha Mode: %s", + "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.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.paralyzed": "Paralyzed", + "effect.antarchy.inverted": "Inverted", + "effect.antarchy.stinky": "Stinky", + "effect.antarchy.shrinking": "Shrinking", + "effect.antarchy.growth": "Growth", + "effect.antarchy.bloodglass_ward": "Bloodglass Ward", + "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-right-click to cycle boss modes.", + "tooltip.antarchy.big_bertha.mode.basilisk": "Right-click 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": "Players suffer Dread; hits inflict weakness.", + "tooltip.antarchy.big_bertha.mode.kraken": "Hits slam targets back and call lightning.", + "tooltip.antarchy.big_bertha.mode.molevore": "Right-click to spin forward and drill through Molevore blocks.", + "tooltip.antarchy.big_bertha.mode.toreterror": "Right-click to launch into the air and crash down with an AOE shockwave.", + "tooltip.antarchy.ultimate_tools_3x3": "Shift-right-click 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": "Left-click: blast nearby entities or throw the held target.", + "tooltip.antarchy.gravity_gun.secondary": "Right-click: 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.fallen_kingdom_castle.title": "I Used to Rule the World...", + "advancements.antarchy.fallen_kingdom_castle.description": "Discover the Fallen Kingdom Castle.", + "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.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.nightmare_scale": "Nightmare Scale", + "trim_material.antarchy.uranium": "Uranium", + "trim_material.antarchy.titanium": "Titanium", + "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." } diff --git a/common/src/main/resources/assets/antarchy/models/block/big_bush_part.json b/common/src/main/resources/assets/antarchy/models/block/big_bush_part.json deleted file mode 100644 index 906b6240..00000000 --- a/common/src/main/resources/assets/antarchy/models/block/big_bush_part.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "textures": { - "particle": "antarchy:block/big_bush/big_bush_stage3" - } -} diff --git a/common/src/main/resources/assets/antarchy/models/block/big_bush_stage1.json b/common/src/main/resources/assets/antarchy/models/block/big_bush_stage1.json deleted file mode 100644 index dc28fa4f..00000000 --- a/common/src/main/resources/assets/antarchy/models/block/big_bush_stage1.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/tinted_cross", - "textures": { - "cross": "antarchy:block/big_bush/big_bush_stage1" - } -} diff --git a/common/src/main/resources/assets/antarchy/models/block/big_bush_stage2.json b/common/src/main/resources/assets/antarchy/models/block/big_bush_stage2.json deleted file mode 100644 index 05dd9750..00000000 --- a/common/src/main/resources/assets/antarchy/models/block/big_bush_stage2.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "antarchy:block/big_bush/big_bush_stage2", - "cross": "antarchy:block/big_bush/big_bush_stage2" - }, - "elements": [ - { - "from": [1.6, 0, 16], - "to": [30.4, 32, 16], - "rotation": { "origin": [16, 16, 16], "axis": "y", "angle": 45, "rescale": true }, - "shade": false, - "faces": { - "north": { "uv": [0, 0, 16, 16], "texture": "#cross", "tintindex": 0 }, - "south": { "uv": [0, 0, 16, 16], "texture": "#cross", "tintindex": 0 } - } - }, - { - "from": [16, 0, 1.6], - "to": [16, 32, 30.4], - "rotation": { "origin": [16, 16, 16], "axis": "y", "angle": 45, "rescale": true }, - "shade": false, - "faces": { - "west": { "uv": [0, 0, 16, 16], "texture": "#cross", "tintindex": 0 }, - "east": { "uv": [0, 0, 16, 16], "texture": "#cross", "tintindex": 0 } - } - } - ] -} diff --git a/common/src/main/resources/assets/antarchy/models/block/big_bush_stage3_bottom.json b/common/src/main/resources/assets/antarchy/models/block/big_bush_stage3_bottom.json deleted file mode 100644 index ac5a27de..00000000 --- a/common/src/main/resources/assets/antarchy/models/block/big_bush_stage3_bottom.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "antarchy:block/big_bush/big_bush_stage3", - "cross": "antarchy:block/big_bush/big_bush_stage3" - }, - "elements": [ - { - "from": [-13.6, 0, 8], - "to": [29.6, 32, 8], - "rotation": { "origin": [8, 16, 8], "axis": "y", "angle": 45, "rescale": true }, - "shade": false, - "faces": { - "north": { "uv": [0, 5.3333, 16, 16], "texture": "#cross", "tintindex": 0 }, - "south": { "uv": [0, 5.3333, 16, 16], "texture": "#cross", "tintindex": 0 } - } - }, - { - "from": [8, 0, -13.6], - "to": [8, 32, 29.6], - "rotation": { "origin": [8, 16, 8], "axis": "y", "angle": 45, "rescale": true }, - "shade": false, - "faces": { - "west": { "uv": [0, 5.3333, 16, 16], "texture": "#cross", "tintindex": 0 }, - "east": { "uv": [0, 5.3333, 16, 16], "texture": "#cross", "tintindex": 0 } - } - } - ] -} diff --git a/common/src/main/resources/assets/antarchy/models/block/big_bush_stage3_top.json b/common/src/main/resources/assets/antarchy/models/block/big_bush_stage3_top.json deleted file mode 100644 index fb49b817..00000000 --- a/common/src/main/resources/assets/antarchy/models/block/big_bush_stage3_top.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "antarchy:block/big_bush/big_bush_stage3", - "cross": "antarchy:block/big_bush/big_bush_stage3" - }, - "elements": [ - { - "from": [-13.6, 0, 8], - "to": [29.6, 16, 8], - "rotation": { "origin": [8, 8, 8], "axis": "y", "angle": 45, "rescale": true }, - "shade": false, - "faces": { - "north": { "uv": [0, 0, 16, 5.3333], "texture": "#cross", "tintindex": 0 }, - "south": { "uv": [0, 0, 16, 5.3333], "texture": "#cross", "tintindex": 0 } - } - }, - { - "from": [8, 0, -13.6], - "to": [8, 16, 29.6], - "rotation": { "origin": [8, 8, 8], "axis": "y", "angle": 45, "rescale": true }, - "shade": false, - "faces": { - "west": { "uv": [0, 0, 16, 5.3333], "texture": "#cross", "tintindex": 0 }, - "east": { "uv": [0, 0, 16, 5.3333], "texture": "#cross", "tintindex": 0 } - } - } - ] -} diff --git a/common/src/main/resources/assets/antarchy/models/block/blush_moss_block.json b/common/src/main/resources/assets/antarchy/models/block/blush_moss_block.json new file mode 100644 index 00000000..df917fb8 --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/block/blush_moss_carpet.json b/common/src/main/resources/assets/antarchy/models/block/blush_moss_carpet.json new file mode 100644 index 00000000..d5f159f3 --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/block/blush_moss_carpet_side_small.json b/common/src/main/resources/assets/antarchy/models/block/blush_moss_carpet_side_small.json new file mode 100644 index 00000000..993f37b4 --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/block/blush_moss_carpet_side_tall.json b/common/src/main/resources/assets/antarchy/models/block/blush_moss_carpet_side_tall.json new file mode 100644 index 00000000..533a670a --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/block/torchflower_bush_top.json b/common/src/main/resources/assets/antarchy/models/block/camellia_bottom.json similarity index 54% rename from common/src/main/resources/assets/antarchy/models/block/torchflower_bush_top.json rename to common/src/main/resources/assets/antarchy/models/block/camellia_bottom.json index f50f0a28..1e2db699 100644 --- a/common/src/main/resources/assets/antarchy/models/block/torchflower_bush_top.json +++ b/common/src/main/resources/assets/antarchy/models/block/camellia_bottom.json @@ -1,6 +1,6 @@ { "parent": "minecraft:block/cross", "textures": { - "cross": "antarchy:block/torchflower_bush_top" + "cross": "antarchy:block/camellia_bush_bottom" } } diff --git a/common/src/main/resources/assets/antarchy/models/block/torchflower_bush_bottom.json b/common/src/main/resources/assets/antarchy/models/block/camellia_top.json similarity index 53% rename from common/src/main/resources/assets/antarchy/models/block/torchflower_bush_bottom.json rename to common/src/main/resources/assets/antarchy/models/block/camellia_top.json index b39440d2..b85b7aea 100644 --- a/common/src/main/resources/assets/antarchy/models/block/torchflower_bush_bottom.json +++ b/common/src/main/resources/assets/antarchy/models/block/camellia_top.json @@ -1,6 +1,6 @@ { "parent": "minecraft:block/cross", "textures": { - "cross": "antarchy:block/torchflower_bush_bottom" + "cross": "antarchy:block/camellia_bush_top" } } diff --git a/common/src/main/resources/assets/antarchy/models/block/ouranwood_vine.json b/common/src/main/resources/assets/antarchy/models/block/corn_crop_stage_0.json similarity index 52% rename from common/src/main/resources/assets/antarchy/models/block/ouranwood_vine.json rename to common/src/main/resources/assets/antarchy/models/block/corn_crop_stage_0.json index dcfef446..7c935ae4 100644 --- a/common/src/main/resources/assets/antarchy/models/block/ouranwood_vine.json +++ b/common/src/main/resources/assets/antarchy/models/block/corn_crop_stage_0.json @@ -1,6 +1,6 @@ { "parent": "minecraft:block/cross", "textures": { - "cross": "antarchy:block/ouranwood/ouranwood_vine" + "cross": "antarchy:block/corn/corn_crop_stage_0" } } diff --git a/common/src/main/resources/assets/antarchy/models/block/ouranwood_vine_plant.json b/common/src/main/resources/assets/antarchy/models/block/corn_crop_stage_1.json similarity index 50% rename from common/src/main/resources/assets/antarchy/models/block/ouranwood_vine_plant.json rename to common/src/main/resources/assets/antarchy/models/block/corn_crop_stage_1.json index e5543ea7..c7a8fbfc 100644 --- a/common/src/main/resources/assets/antarchy/models/block/ouranwood_vine_plant.json +++ b/common/src/main/resources/assets/antarchy/models/block/corn_crop_stage_1.json @@ -1,6 +1,6 @@ { "parent": "minecraft:block/cross", "textures": { - "cross": "antarchy:block/ouranwood/ouranwood_vine_plant" + "cross": "antarchy:block/corn/corn_crop_stage_1" } } diff --git a/common/src/main/resources/assets/antarchy/models/block/corn_crop_stage_2_bottom.json b/common/src/main/resources/assets/antarchy/models/block/corn_crop_stage_2_bottom.json new file mode 100644 index 00000000..cb9cdbd2 --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/block/corn_crop_stage_2_top.json b/common/src/main/resources/assets/antarchy/models/block/corn_crop_stage_2_top.json new file mode 100644 index 00000000..ada37860 --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/block/corn_crop_stage_3_bottom.json b/common/src/main/resources/assets/antarchy/models/block/corn_crop_stage_3_bottom.json new file mode 100644 index 00000000..a2148ba9 --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/block/corn_crop_stage_3_top.json b/common/src/main/resources/assets/antarchy/models/block/corn_crop_stage_3_top.json new file mode 100644 index 00000000..d38872f2 --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/block/dead_star_coral.json b/common/src/main/resources/assets/antarchy/models/block/dead_star_coral.json new file mode 100644 index 00000000..aa26a0de --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/block/dead_star_coral_block.json b/common/src/main/resources/assets/antarchy/models/block/dead_star_coral_block.json new file mode 100644 index 00000000..d42fdd91 --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/block/dead_star_coral_fan.json b/common/src/main/resources/assets/antarchy/models/block/dead_star_coral_fan.json new file mode 100644 index 00000000..5794c397 --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/block/dead_star_coral_wall_fan.json b/common/src/main/resources/assets/antarchy/models/block/dead_star_coral_wall_fan.json new file mode 100644 index 00000000..3a80e1a7 --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/block/giant_lily_pad/single/single/0.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/single/single/0.json new file mode 100644 index 00000000..1be5b2e8 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/single/single/0.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_1x1" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#top", + "rotation": 0 + }, + "down": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#bottom", + "rotation": 0 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/single/single/180.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/single/single/180.json new file mode 100644 index 00000000..24c0e389 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/single/single/180.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_1x1" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#top", + "rotation": 180 + }, + "down": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#bottom", + "rotation": 180 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/single/single/270.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/single/single/270.json new file mode 100644 index 00000000..7c89781b --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/single/single/270.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_1x1" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#top", + "rotation": 270 + }, + "down": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#bottom", + "rotation": 270 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/single/single/90.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/single/single/90.json new file mode 100644 index 00000000..d503c194 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/single/single/90.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_1x1" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#top", + "rotation": 90 + }, + "down": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#bottom", + "rotation": 90 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/bottom_left/0.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/bottom_left/0.json new file mode 100644 index 00000000..8f64a9d7 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/bottom_left/0.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "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, + 32, + 16, + 48 + ], + "texture": "#top", + "rotation": 0 + }, + "down": { + "uv": [ + 0, + 32, + 16, + 48 + ], + "texture": "#bottom", + "rotation": 0 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/bottom_left/180.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/bottom_left/180.json new file mode 100644 index 00000000..7eb8f5a6 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/bottom_left/180.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "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, + 32, + 16, + 48 + ], + "texture": "#top", + "rotation": 180 + }, + "down": { + "uv": [ + 0, + 32, + 16, + 48 + ], + "texture": "#bottom", + "rotation": 180 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/bottom_left/270.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/bottom_left/270.json new file mode 100644 index 00000000..01c79f1e --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/bottom_left/270.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "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, + 32, + 16, + 48 + ], + "texture": "#top", + "rotation": 270 + }, + "down": { + "uv": [ + 0, + 32, + 16, + 48 + ], + "texture": "#bottom", + "rotation": 270 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/bottom_left/90.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/bottom_left/90.json new file mode 100644 index 00000000..f01d345e --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/bottom_left/90.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "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, + 32, + 16, + 48 + ], + "texture": "#top", + "rotation": 90 + }, + "down": { + "uv": [ + 0, + 32, + 16, + 48 + ], + "texture": "#bottom", + "rotation": 90 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/bottom_middle/0.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/bottom_middle/0.json new file mode 100644 index 00000000..9951581b --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/bottom_middle/0.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "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": [ + 16, + 32, + 32, + 48 + ], + "texture": "#top", + "rotation": 0 + }, + "down": { + "uv": [ + 16, + 32, + 32, + 48 + ], + "texture": "#bottom", + "rotation": 0 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/bottom_middle/180.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/bottom_middle/180.json new file mode 100644 index 00000000..b194f7a4 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/bottom_middle/180.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "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": [ + 16, + 32, + 32, + 48 + ], + "texture": "#top", + "rotation": 180 + }, + "down": { + "uv": [ + 16, + 32, + 32, + 48 + ], + "texture": "#bottom", + "rotation": 180 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/bottom_middle/270.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/bottom_middle/270.json new file mode 100644 index 00000000..99972a5f --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/bottom_middle/270.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "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": [ + 16, + 32, + 32, + 48 + ], + "texture": "#top", + "rotation": 270 + }, + "down": { + "uv": [ + 16, + 32, + 32, + 48 + ], + "texture": "#bottom", + "rotation": 270 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/bottom_middle/90.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/bottom_middle/90.json new file mode 100644 index 00000000..d44dfc84 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/bottom_middle/90.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "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": [ + 16, + 32, + 32, + 48 + ], + "texture": "#top", + "rotation": 90 + }, + "down": { + "uv": [ + 16, + 32, + 32, + 48 + ], + "texture": "#bottom", + "rotation": 90 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/bottom_right/0.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/bottom_right/0.json new file mode 100644 index 00000000..ff296a2d --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/bottom_right/0.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "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": [ + 32, + 32, + 48, + 48 + ], + "texture": "#top", + "rotation": 0 + }, + "down": { + "uv": [ + 32, + 32, + 48, + 48 + ], + "texture": "#bottom", + "rotation": 0 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/bottom_right/180.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/bottom_right/180.json new file mode 100644 index 00000000..bda1dd71 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/bottom_right/180.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "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": [ + 32, + 32, + 48, + 48 + ], + "texture": "#top", + "rotation": 180 + }, + "down": { + "uv": [ + 32, + 32, + 48, + 48 + ], + "texture": "#bottom", + "rotation": 180 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/bottom_right/270.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/bottom_right/270.json new file mode 100644 index 00000000..df5dc055 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/bottom_right/270.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "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": [ + 32, + 32, + 48, + 48 + ], + "texture": "#top", + "rotation": 270 + }, + "down": { + "uv": [ + 32, + 32, + 48, + 48 + ], + "texture": "#bottom", + "rotation": 270 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/bottom_right/90.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/bottom_right/90.json new file mode 100644 index 00000000..e49f458a --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/bottom_right/90.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "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": [ + 32, + 32, + 48, + 48 + ], + "texture": "#top", + "rotation": 90 + }, + "down": { + "uv": [ + 32, + 32, + 48, + 48 + ], + "texture": "#bottom", + "rotation": 90 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/center/0.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/center/0.json new file mode 100644 index 00000000..177b9da5 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/center/0.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "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": [ + 16, + 16, + 32, + 32 + ], + "texture": "#top", + "rotation": 0 + }, + "down": { + "uv": [ + 16, + 16, + 32, + 32 + ], + "texture": "#bottom", + "rotation": 0 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/center/180.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/center/180.json new file mode 100644 index 00000000..2d0df505 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/center/180.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "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": [ + 16, + 16, + 32, + 32 + ], + "texture": "#top", + "rotation": 180 + }, + "down": { + "uv": [ + 16, + 16, + 32, + 32 + ], + "texture": "#bottom", + "rotation": 180 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/center/270.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/center/270.json new file mode 100644 index 00000000..7f32de5e --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/center/270.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "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": [ + 16, + 16, + 32, + 32 + ], + "texture": "#top", + "rotation": 270 + }, + "down": { + "uv": [ + 16, + 16, + 32, + 32 + ], + "texture": "#bottom", + "rotation": 270 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/center/90.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/center/90.json new file mode 100644 index 00000000..0497bf63 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/center/90.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "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": [ + 16, + 16, + 32, + 32 + ], + "texture": "#top", + "rotation": 90 + }, + "down": { + "uv": [ + 16, + 16, + 32, + 32 + ], + "texture": "#bottom", + "rotation": 90 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/middle_left/0.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/middle_left/0.json new file mode 100644 index 00000000..1388a75f --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/middle_left/0.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "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, + 16, + 16, + 32 + ], + "texture": "#top", + "rotation": 0 + }, + "down": { + "uv": [ + 0, + 16, + 16, + 32 + ], + "texture": "#bottom", + "rotation": 0 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/middle_left/180.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/middle_left/180.json new file mode 100644 index 00000000..af8d7087 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/middle_left/180.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "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, + 16, + 16, + 32 + ], + "texture": "#top", + "rotation": 180 + }, + "down": { + "uv": [ + 0, + 16, + 16, + 32 + ], + "texture": "#bottom", + "rotation": 180 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/middle_left/270.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/middle_left/270.json new file mode 100644 index 00000000..9b90ec6b --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/middle_left/270.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "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, + 16, + 16, + 32 + ], + "texture": "#top", + "rotation": 270 + }, + "down": { + "uv": [ + 0, + 16, + 16, + 32 + ], + "texture": "#bottom", + "rotation": 270 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/middle_left/90.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/middle_left/90.json new file mode 100644 index 00000000..66f40fa3 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/middle_left/90.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "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, + 16, + 16, + 32 + ], + "texture": "#top", + "rotation": 90 + }, + "down": { + "uv": [ + 0, + 16, + 16, + 32 + ], + "texture": "#bottom", + "rotation": 90 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/middle_right/0.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/middle_right/0.json new file mode 100644 index 00000000..d0f6b288 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/middle_right/0.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "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": [ + 32, + 16, + 48, + 32 + ], + "texture": "#top", + "rotation": 0 + }, + "down": { + "uv": [ + 32, + 16, + 48, + 32 + ], + "texture": "#bottom", + "rotation": 0 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/middle_right/180.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/middle_right/180.json new file mode 100644 index 00000000..ed857a25 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/middle_right/180.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "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": [ + 32, + 16, + 48, + 32 + ], + "texture": "#top", + "rotation": 180 + }, + "down": { + "uv": [ + 32, + 16, + 48, + 32 + ], + "texture": "#bottom", + "rotation": 180 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/middle_right/270.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/middle_right/270.json new file mode 100644 index 00000000..bddcd717 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/middle_right/270.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "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": [ + 32, + 16, + 48, + 32 + ], + "texture": "#top", + "rotation": 270 + }, + "down": { + "uv": [ + 32, + 16, + 48, + 32 + ], + "texture": "#bottom", + "rotation": 270 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/middle_right/90.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/middle_right/90.json new file mode 100644 index 00000000..0e61ca5a --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/middle_right/90.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "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": [ + 32, + 16, + 48, + 32 + ], + "texture": "#top", + "rotation": 90 + }, + "down": { + "uv": [ + 32, + 16, + 48, + 32 + ], + "texture": "#bottom", + "rotation": 90 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/top_left/0.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/top_left/0.json new file mode 100644 index 00000000..fec4034c --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/top_left/0.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "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", + "rotation": 0 + }, + "down": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#bottom", + "rotation": 0 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/top_left/180.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/top_left/180.json new file mode 100644 index 00000000..0fbefb4d --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/top_left/180.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "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", + "rotation": 180 + }, + "down": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#bottom", + "rotation": 180 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/top_left/270.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/top_left/270.json new file mode 100644 index 00000000..3d48d8f2 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/top_left/270.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "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", + "rotation": 270 + }, + "down": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#bottom", + "rotation": 270 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/top_left/90.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/top_left/90.json new file mode 100644 index 00000000..36f30846 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/top_left/90.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "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", + "rotation": 90 + }, + "down": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#bottom", + "rotation": 90 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/top_middle/0.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/top_middle/0.json new file mode 100644 index 00000000..ab445e79 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/top_middle/0.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "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": [ + 16, + 0, + 32, + 16 + ], + "texture": "#top", + "rotation": 0 + }, + "down": { + "uv": [ + 16, + 0, + 32, + 16 + ], + "texture": "#bottom", + "rotation": 0 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/top_middle/180.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/top_middle/180.json new file mode 100644 index 00000000..53efae6a --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/top_middle/180.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "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": [ + 16, + 0, + 32, + 16 + ], + "texture": "#top", + "rotation": 180 + }, + "down": { + "uv": [ + 16, + 0, + 32, + 16 + ], + "texture": "#bottom", + "rotation": 180 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/top_middle/270.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/top_middle/270.json new file mode 100644 index 00000000..c3424e5f --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/top_middle/270.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "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": [ + 16, + 0, + 32, + 16 + ], + "texture": "#top", + "rotation": 270 + }, + "down": { + "uv": [ + 16, + 0, + 32, + 16 + ], + "texture": "#bottom", + "rotation": 270 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/top_middle/90.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/top_middle/90.json new file mode 100644 index 00000000..1c896803 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/top_middle/90.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "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": [ + 16, + 0, + 32, + 16 + ], + "texture": "#top", + "rotation": 90 + }, + "down": { + "uv": [ + 16, + 0, + 32, + 16 + ], + "texture": "#bottom", + "rotation": 90 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/top_right/0.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/top_right/0.json new file mode 100644 index 00000000..148672a1 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/top_right/0.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "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": [ + 32, + 0, + 48, + 16 + ], + "texture": "#top", + "rotation": 0 + }, + "down": { + "uv": [ + 32, + 0, + 48, + 16 + ], + "texture": "#bottom", + "rotation": 0 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/top_right/180.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/top_right/180.json new file mode 100644 index 00000000..73e41711 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/top_right/180.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "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": [ + 32, + 0, + 48, + 16 + ], + "texture": "#top", + "rotation": 180 + }, + "down": { + "uv": [ + 32, + 0, + 48, + 16 + ], + "texture": "#bottom", + "rotation": 180 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/top_right/270.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/top_right/270.json new file mode 100644 index 00000000..e9869984 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/top_right/270.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "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": [ + 32, + 0, + 48, + 16 + ], + "texture": "#top", + "rotation": 270 + }, + "down": { + "uv": [ + 32, + 0, + 48, + 16 + ], + "texture": "#bottom", + "rotation": 270 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/top_right/90.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/top_right/90.json new file mode 100644 index 00000000..6b4aad17 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/top_right/90.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "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": [ + 32, + 0, + 48, + 16 + ], + "texture": "#top", + "rotation": 90 + }, + "down": { + "uv": [ + 32, + 0, + 48, + 16 + ], + "texture": "#bottom", + "rotation": 90 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/bottom_middle/0.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/bottom_middle/0.json new file mode 100644 index 00000000..b4aabc6e --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/bottom_middle/0.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_2x1", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_2x1" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 16, + 0, + 32, + 16 + ], + "texture": "#top", + "rotation": 0 + }, + "down": { + "uv": [ + 16, + 0, + 32, + 16 + ], + "texture": "#bottom", + "rotation": 0 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/bottom_middle/180.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/bottom_middle/180.json new file mode 100644 index 00000000..3400a4b0 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/bottom_middle/180.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_2x1", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_2x1" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 16, + 0, + 32, + 16 + ], + "texture": "#top", + "rotation": 180 + }, + "down": { + "uv": [ + 16, + 0, + 32, + 16 + ], + "texture": "#bottom", + "rotation": 180 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/bottom_middle/270.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/bottom_middle/270.json new file mode 100644 index 00000000..f3fcef58 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/bottom_middle/270.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_2x1", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_2x1" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 16, + 0, + 32, + 16 + ], + "texture": "#top", + "rotation": 270 + }, + "down": { + "uv": [ + 16, + 0, + 32, + 16 + ], + "texture": "#bottom", + "rotation": 270 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/bottom_middle/90.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/bottom_middle/90.json new file mode 100644 index 00000000..9339f8be --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/bottom_middle/90.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_2x1", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_2x1" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 16, + 0, + 32, + 16 + ], + "texture": "#top", + "rotation": 90 + }, + "down": { + "uv": [ + 16, + 0, + 32, + 16 + ], + "texture": "#bottom", + "rotation": 90 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/middle_left/0.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/middle_left/0.json new file mode 100644 index 00000000..a9c29c20 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/middle_left/0.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_2x1", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_2x1" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#top", + "rotation": 0 + }, + "down": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#bottom", + "rotation": 0 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/middle_left/180.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/middle_left/180.json new file mode 100644 index 00000000..cf003f59 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/middle_left/180.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_2x1", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_2x1" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#top", + "rotation": 180 + }, + "down": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#bottom", + "rotation": 180 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/middle_left/270.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/middle_left/270.json new file mode 100644 index 00000000..6e2049ac --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/middle_left/270.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_2x1", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_2x1" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#top", + "rotation": 270 + }, + "down": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#bottom", + "rotation": 270 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/middle_left/90.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/middle_left/90.json new file mode 100644 index 00000000..dbca2d2d --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/middle_left/90.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_2x1", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_2x1" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#top", + "rotation": 90 + }, + "down": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#bottom", + "rotation": 90 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/middle_right/0.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/middle_right/0.json new file mode 100644 index 00000000..b4aabc6e --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/middle_right/0.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_2x1", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_2x1" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 16, + 0, + 32, + 16 + ], + "texture": "#top", + "rotation": 0 + }, + "down": { + "uv": [ + 16, + 0, + 32, + 16 + ], + "texture": "#bottom", + "rotation": 0 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/middle_right/180.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/middle_right/180.json new file mode 100644 index 00000000..3400a4b0 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/middle_right/180.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_2x1", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_2x1" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 16, + 0, + 32, + 16 + ], + "texture": "#top", + "rotation": 180 + }, + "down": { + "uv": [ + 16, + 0, + 32, + 16 + ], + "texture": "#bottom", + "rotation": 180 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/middle_right/270.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/middle_right/270.json new file mode 100644 index 00000000..f3fcef58 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/middle_right/270.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_2x1", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_2x1" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 16, + 0, + 32, + 16 + ], + "texture": "#top", + "rotation": 270 + }, + "down": { + "uv": [ + 16, + 0, + 32, + 16 + ], + "texture": "#bottom", + "rotation": 270 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/middle_right/90.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/middle_right/90.json new file mode 100644 index 00000000..9339f8be --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/middle_right/90.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_2x1", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_2x1" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 16, + 0, + 32, + 16 + ], + "texture": "#top", + "rotation": 90 + }, + "down": { + "uv": [ + 16, + 0, + 32, + 16 + ], + "texture": "#bottom", + "rotation": 90 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/top_middle/0.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/top_middle/0.json new file mode 100644 index 00000000..a9c29c20 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/top_middle/0.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_2x1", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_2x1" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#top", + "rotation": 0 + }, + "down": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#bottom", + "rotation": 0 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/top_middle/180.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/top_middle/180.json new file mode 100644 index 00000000..cf003f59 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/top_middle/180.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_2x1", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_2x1" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#top", + "rotation": 180 + }, + "down": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#bottom", + "rotation": 180 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/top_middle/270.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/top_middle/270.json new file mode 100644 index 00000000..6e2049ac --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/top_middle/270.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_2x1", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_2x1" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#top", + "rotation": 270 + }, + "down": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#bottom", + "rotation": 270 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/top_middle/90.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/top_middle/90.json new file mode 100644 index 00000000..dbca2d2d --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/top_middle/90.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_2x1", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_2x1" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#top", + "rotation": 90 + }, + "down": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#bottom", + "rotation": 90 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/bottom_left/0.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/bottom_left/0.json new file mode 100644 index 00000000..7f91e262 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/bottom_left/0.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_2x2", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_2x2" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 0, + 16, + 16, + 32 + ], + "texture": "#top", + "rotation": 0 + }, + "down": { + "uv": [ + 0, + 16, + 16, + 32 + ], + "texture": "#bottom", + "rotation": 0 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/bottom_left/180.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/bottom_left/180.json new file mode 100644 index 00000000..50666a30 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/bottom_left/180.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_2x2", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_2x2" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 0, + 16, + 16, + 32 + ], + "texture": "#top", + "rotation": 180 + }, + "down": { + "uv": [ + 0, + 16, + 16, + 32 + ], + "texture": "#bottom", + "rotation": 180 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/bottom_left/270.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/bottom_left/270.json new file mode 100644 index 00000000..16776bb5 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/bottom_left/270.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_2x2", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_2x2" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 0, + 16, + 16, + 32 + ], + "texture": "#top", + "rotation": 270 + }, + "down": { + "uv": [ + 0, + 16, + 16, + 32 + ], + "texture": "#bottom", + "rotation": 270 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/bottom_left/90.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/bottom_left/90.json new file mode 100644 index 00000000..339aa8a2 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/bottom_left/90.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_2x2", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_2x2" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 0, + 16, + 16, + 32 + ], + "texture": "#top", + "rotation": 90 + }, + "down": { + "uv": [ + 0, + 16, + 16, + 32 + ], + "texture": "#bottom", + "rotation": 90 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/bottom_right/0.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/bottom_right/0.json new file mode 100644 index 00000000..1af763ba --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/bottom_right/0.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_2x2", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_2x2" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 16, + 16, + 32, + 32 + ], + "texture": "#top", + "rotation": 0 + }, + "down": { + "uv": [ + 16, + 16, + 32, + 32 + ], + "texture": "#bottom", + "rotation": 0 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/bottom_right/180.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/bottom_right/180.json new file mode 100644 index 00000000..1d0e4305 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/bottom_right/180.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_2x2", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_2x2" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 16, + 16, + 32, + 32 + ], + "texture": "#top", + "rotation": 180 + }, + "down": { + "uv": [ + 16, + 16, + 32, + 32 + ], + "texture": "#bottom", + "rotation": 180 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/bottom_right/270.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/bottom_right/270.json new file mode 100644 index 00000000..816c803e --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/bottom_right/270.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_2x2", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_2x2" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 16, + 16, + 32, + 32 + ], + "texture": "#top", + "rotation": 270 + }, + "down": { + "uv": [ + 16, + 16, + 32, + 32 + ], + "texture": "#bottom", + "rotation": 270 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/bottom_right/90.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/bottom_right/90.json new file mode 100644 index 00000000..f1f585be --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/bottom_right/90.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_2x2", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_2x2" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 16, + 16, + 32, + 32 + ], + "texture": "#top", + "rotation": 90 + }, + "down": { + "uv": [ + 16, + 16, + 32, + 32 + ], + "texture": "#bottom", + "rotation": 90 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/top_left/0.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/top_left/0.json new file mode 100644 index 00000000..f697d02d --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/top_left/0.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_2x2", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_2x2" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#top", + "rotation": 0 + }, + "down": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#bottom", + "rotation": 0 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/top_left/180.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/top_left/180.json new file mode 100644 index 00000000..e34709da --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/top_left/180.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_2x2", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_2x2" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#top", + "rotation": 180 + }, + "down": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#bottom", + "rotation": 180 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/top_left/270.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/top_left/270.json new file mode 100644 index 00000000..8b7be027 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/top_left/270.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_2x2", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_2x2" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#top", + "rotation": 270 + }, + "down": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#bottom", + "rotation": 270 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/top_left/90.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/top_left/90.json new file mode 100644 index 00000000..81c6ad6f --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/top_left/90.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_2x2", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_2x2" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#top", + "rotation": 90 + }, + "down": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#bottom", + "rotation": 90 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/top_right/0.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/top_right/0.json new file mode 100644 index 00000000..5a64c7b5 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/top_right/0.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_2x2", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_2x2" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 16, + 0, + 32, + 16 + ], + "texture": "#top", + "rotation": 0 + }, + "down": { + "uv": [ + 16, + 0, + 32, + 16 + ], + "texture": "#bottom", + "rotation": 0 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/top_right/180.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/top_right/180.json new file mode 100644 index 00000000..27ac0754 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/top_right/180.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_2x2", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_2x2" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 16, + 0, + 32, + 16 + ], + "texture": "#top", + "rotation": 180 + }, + "down": { + "uv": [ + 16, + 0, + 32, + 16 + ], + "texture": "#bottom", + "rotation": 180 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/top_right/270.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/top_right/270.json new file mode 100644 index 00000000..020f177c --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/top_right/270.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_2x2", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_2x2" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 16, + 0, + 32, + 16 + ], + "texture": "#top", + "rotation": 270 + }, + "down": { + "uv": [ + 16, + 0, + 32, + 16 + ], + "texture": "#bottom", + "rotation": 270 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/top_right/90.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/top_right/90.json new file mode 100644 index 00000000..3a667888 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/top_right/90.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_2x2", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_2x2" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 16, + 0, + 32, + 16 + ], + "texture": "#top", + "rotation": 90 + }, + "down": { + "uv": [ + 16, + 0, + 32, + 16 + ], + "texture": "#bottom", + "rotation": 90 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/hanging_peach.json b/common/src/main/resources/assets/antarchy/models/block/hanging_peach.json new file mode 100644 index 00000000..240e552a --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/block/lumen_froglight.json b/common/src/main/resources/assets/antarchy/models/block/lumen_froglight.json new file mode 100644 index 00000000..14e41e27 --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/block/ouranwood_hanging_sign.json b/common/src/main/resources/assets/antarchy/models/block/ouranwood_hanging_sign.json new file mode 100644 index 00000000..36129379 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/ouranwood_hanging_sign.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_hanging_sign", + "textures": { + "texture": "antarchy:models/ouranwood/ouranwood_hanging_sign" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/ouranwood_sign.json b/common/src/main/resources/assets/antarchy/models/block/ouranwood_sign.json new file mode 100644 index 00000000..e83e9659 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/ouranwood_sign.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_sign", + "textures": { + "texture": "antarchy:models/ouranwood/ouranwood_sign" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/ouranwood_wall_hanging_sign.json b/common/src/main/resources/assets/antarchy/models/block/ouranwood_wall_hanging_sign.json new file mode 100644 index 00000000..3839e8d4 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/ouranwood_wall_hanging_sign.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_hanging_sign", + "textures": { + "texture": "antarchy:models/ouranwood/ouranwood_hanging_sign" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/ouranwood_wall_sign.json b/common/src/main/resources/assets/antarchy/models/block/ouranwood_wall_sign.json new file mode 100644 index 00000000..cf57f349 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/ouranwood_wall_sign.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_sign", + "textures": { + "texture": "antarchy:models/ouranwood/ouranwood_sign" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/item/big_bush.json b/common/src/main/resources/assets/antarchy/models/block/peach_button.json similarity index 57% rename from common/src/main/resources/assets/antarchy/models/item/big_bush.json rename to common/src/main/resources/assets/antarchy/models/block/peach_button.json index 0b62849a..77f042f7 100644 --- a/common/src/main/resources/assets/antarchy/models/item/big_bush.json +++ b/common/src/main/resources/assets/antarchy/models/block/peach_button.json @@ -1,6 +1,7 @@ { - "parent": "minecraft:item/generated", + "parent": "minecraft:block/jungle_button", "textures": { - "layer0": "antarchy:block/big_bush/big_bush_stage1" + "texture": "antarchy:block/peach/peach_planks" } } + diff --git a/common/src/main/resources/assets/antarchy/models/block/peach_button_inventory.json b/common/src/main/resources/assets/antarchy/models/block/peach_button_inventory.json new file mode 100644 index 00000000..c2a473ed --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/block/peach_button_pressed.json b/common/src/main/resources/assets/antarchy/models/block/peach_button_pressed.json new file mode 100644 index 00000000..886dde0f --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/block/peach_door_bottom_left.json b/common/src/main/resources/assets/antarchy/models/block/peach_door_bottom_left.json new file mode 100644 index 00000000..6750e6ce --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/block/peach_door_bottom_left_open.json b/common/src/main/resources/assets/antarchy/models/block/peach_door_bottom_left_open.json new file mode 100644 index 00000000..79bf6df4 --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/block/peach_door_bottom_right.json b/common/src/main/resources/assets/antarchy/models/block/peach_door_bottom_right.json new file mode 100644 index 00000000..ecc2ea76 --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/block/peach_door_bottom_right_open.json b/common/src/main/resources/assets/antarchy/models/block/peach_door_bottom_right_open.json new file mode 100644 index 00000000..1c9317d4 --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/block/peach_door_top_left.json b/common/src/main/resources/assets/antarchy/models/block/peach_door_top_left.json new file mode 100644 index 00000000..77956de2 --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/block/peach_door_top_left_open.json b/common/src/main/resources/assets/antarchy/models/block/peach_door_top_left_open.json new file mode 100644 index 00000000..ad865d33 --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/block/peach_door_top_right.json b/common/src/main/resources/assets/antarchy/models/block/peach_door_top_right.json new file mode 100644 index 00000000..3a5d342f --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/block/peach_door_top_right_open.json b/common/src/main/resources/assets/antarchy/models/block/peach_door_top_right_open.json new file mode 100644 index 00000000..a3772f2c --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/block/peach_fence_gate.json b/common/src/main/resources/assets/antarchy/models/block/peach_fence_gate.json new file mode 100644 index 00000000..0e6d3ad5 --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/block/peach_fence_gate_open.json b/common/src/main/resources/assets/antarchy/models/block/peach_fence_gate_open.json new file mode 100644 index 00000000..7e9432ad --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/block/peach_fence_gate_wall.json b/common/src/main/resources/assets/antarchy/models/block/peach_fence_gate_wall.json new file mode 100644 index 00000000..296b5a69 --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/block/peach_fence_gate_wall_open.json b/common/src/main/resources/assets/antarchy/models/block/peach_fence_gate_wall_open.json new file mode 100644 index 00000000..8bd8170c --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/block/peach_fence_inventory.json b/common/src/main/resources/assets/antarchy/models/block/peach_fence_inventory.json new file mode 100644 index 00000000..318d6270 --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/block/peach_fence_post.json b/common/src/main/resources/assets/antarchy/models/block/peach_fence_post.json new file mode 100644 index 00000000..72b4d302 --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/block/peach_fence_side.json b/common/src/main/resources/assets/antarchy/models/block/peach_fence_side.json new file mode 100644 index 00000000..9ee46975 --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/block/peach_hanging_sign.json b/common/src/main/resources/assets/antarchy/models/block/peach_hanging_sign.json new file mode 100644 index 00000000..27016fe3 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/peach_hanging_sign.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_hanging_sign", + "textures": { + "texture": "antarchy:block/peach/peach_hanging" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/peach_leaves.json b/common/src/main/resources/assets/antarchy/models/block/peach_leaves.json new file mode 100644 index 00000000..4b357a8e --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/block/peach_log.json b/common/src/main/resources/assets/antarchy/models/block/peach_log.json new file mode 100644 index 00000000..c20762cc --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/block/peach_log_horizontal.json b/common/src/main/resources/assets/antarchy/models/block/peach_log_horizontal.json new file mode 100644 index 00000000..2d279990 --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/block/peach_planks.json b/common/src/main/resources/assets/antarchy/models/block/peach_planks.json new file mode 100644 index 00000000..db7c1f01 --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/block/peach_pressure_plate.json b/common/src/main/resources/assets/antarchy/models/block/peach_pressure_plate.json new file mode 100644 index 00000000..fe224f3f --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/block/peach_pressure_plate_down.json b/common/src/main/resources/assets/antarchy/models/block/peach_pressure_plate_down.json new file mode 100644 index 00000000..2af87b5f --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/block/peach_sapling.json b/common/src/main/resources/assets/antarchy/models/block/peach_sapling.json new file mode 100644 index 00000000..11f97b6f --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/block/peach_sign.json b/common/src/main/resources/assets/antarchy/models/block/peach_sign.json new file mode 100644 index 00000000..f9541b44 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/peach_sign.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_sign", + "textures": { + "texture": "antarchy:item/peach_sign" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/peach_slab.json b/common/src/main/resources/assets/antarchy/models/block/peach_slab.json new file mode 100644 index 00000000..81588d4d --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/block/peach_slab_top.json b/common/src/main/resources/assets/antarchy/models/block/peach_slab_top.json new file mode 100644 index 00000000..01ee38e4 --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/block/peach_stairs.json b/common/src/main/resources/assets/antarchy/models/block/peach_stairs.json new file mode 100644 index 00000000..d4a28a68 --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/block/peach_stairs_inner.json b/common/src/main/resources/assets/antarchy/models/block/peach_stairs_inner.json new file mode 100644 index 00000000..843cafd6 --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/block/peach_stairs_outer.json b/common/src/main/resources/assets/antarchy/models/block/peach_stairs_outer.json new file mode 100644 index 00000000..545c33ba --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/block/peach_trapdoor_bottom.json b/common/src/main/resources/assets/antarchy/models/block/peach_trapdoor_bottom.json new file mode 100644 index 00000000..17f6d21a --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/block/peach_trapdoor_open.json b/common/src/main/resources/assets/antarchy/models/block/peach_trapdoor_open.json new file mode 100644 index 00000000..d29de2f6 --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/block/peach_trapdoor_top.json b/common/src/main/resources/assets/antarchy/models/block/peach_trapdoor_top.json new file mode 100644 index 00000000..822ea421 --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/block/peach_wall_hanging_sign.json b/common/src/main/resources/assets/antarchy/models/block/peach_wall_hanging_sign.json new file mode 100644 index 00000000..d317123c --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/peach_wall_hanging_sign.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_hanging_sign", + "textures": { + "texture": "antarchy:block/peach/peach_hanging" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/peach_wall_sign.json b/common/src/main/resources/assets/antarchy/models/block/peach_wall_sign.json new file mode 100644 index 00000000..a32a7405 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/peach_wall_sign.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_sign", + "textures": { + "texture": "antarchy:item/peach_sign" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/peach_wood.json b/common/src/main/resources/assets/antarchy/models/block/peach_wood.json new file mode 100644 index 00000000..092ff7fc --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/block/red_ant_nest.json b/common/src/main/resources/assets/antarchy/models/block/red_ant_nest.json index b8200917..178432bd 100644 --- a/common/src/main/resources/assets/antarchy/models/block/red_ant_nest.json +++ b/common/src/main/resources/assets/antarchy/models/block/red_ant_nest.json @@ -1,12 +1,12 @@ { "parent": "minecraft:block/cube", "textures": { - "particle": "minecraft:block/magma", + "particle": "antarchy:block/red_ant_nest/red_ant_nest_side", "down": "minecraft:block/magma", - "up": "antarchy:block/red_ant_nest_top", - "north": "minecraft:block/magma", - "south": "minecraft:block/magma", - "west": "minecraft:block/magma", - "east": "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/src/main/resources/assets/antarchy/models/block/roseate_froglight.json b/common/src/main/resources/assets/antarchy/models/block/roseate_froglight.json new file mode 100644 index 00000000..116f3137 --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/block/spider_lily.json b/common/src/main/resources/assets/antarchy/models/block/spider_lily.json new file mode 100644 index 00000000..48d63092 --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/block/star_coral.json b/common/src/main/resources/assets/antarchy/models/block/star_coral.json new file mode 100644 index 00000000..e8c9751f --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/block/star_coral_block.json b/common/src/main/resources/assets/antarchy/models/block/star_coral_block.json new file mode 100644 index 00000000..7285193c --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/block/star_coral_fan.json b/common/src/main/resources/assets/antarchy/models/block/star_coral_fan.json new file mode 100644 index 00000000..f9921dbf --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/block/star_coral_wall_fan.json b/common/src/main/resources/assets/antarchy/models/block/star_coral_wall_fan.json new file mode 100644 index 00000000..9db77296 --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/block/stripped_peach_log.json b/common/src/main/resources/assets/antarchy/models/block/stripped_peach_log.json new file mode 100644 index 00000000..b0ade65e --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/block/stripped_peach_log_horizontal.json b/common/src/main/resources/assets/antarchy/models/block/stripped_peach_log_horizontal.json new file mode 100644 index 00000000..98b68ebf --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/block/stripped_peach_wood.json b/common/src/main/resources/assets/antarchy/models/block/stripped_peach_wood.json new file mode 100644 index 00000000..03406fca --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/block/umbral_moss_carpet_side_small.json b/common/src/main/resources/assets/antarchy/models/block/umbral_moss_carpet_side_small.json index e943626d..7ab3586f 100644 --- a/common/src/main/resources/assets/antarchy/models/block/umbral_moss_carpet_side_small.json +++ b/common/src/main/resources/assets/antarchy/models/block/umbral_moss_carpet_side_small.json @@ -1,6 +1,18 @@ { - "parent": "minecraft:block/mossy_carpet_side", + "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/src/main/resources/assets/antarchy/models/block/very_short_grass.json b/common/src/main/resources/assets/antarchy/models/block/very_short_grass.json deleted file mode 100644 index c1f1d394..00000000 --- a/common/src/main/resources/assets/antarchy/models/block/very_short_grass.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/tinted_cross", - "textures": { - "cross": "antarchy:block/very_short_grass" - } -} diff --git a/common/src/main/resources/assets/antarchy/models/block/very_tall_grass_bottom.json b/common/src/main/resources/assets/antarchy/models/block/very_tall_grass_bottom.json deleted file mode 100644 index c571f76e..00000000 --- a/common/src/main/resources/assets/antarchy/models/block/very_tall_grass_bottom.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/tinted_cross", - "textures": { - "cross": "antarchy:block/very_tall_grass/very_tall_grass_bottom" - } -} diff --git a/common/src/main/resources/assets/antarchy/models/block/very_tall_grass_middle.json b/common/src/main/resources/assets/antarchy/models/block/very_tall_grass_middle.json deleted file mode 100644 index 5854e53a..00000000 --- a/common/src/main/resources/assets/antarchy/models/block/very_tall_grass_middle.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/tinted_cross", - "textures": { - "cross": "antarchy:block/very_tall_grass/very_tall_grass_middle" - } -} diff --git a/common/src/main/resources/assets/antarchy/models/block/very_tall_grass_top.json b/common/src/main/resources/assets/antarchy/models/block/very_tall_grass_top.json deleted file mode 100644 index 44d2ee41..00000000 --- a/common/src/main/resources/assets/antarchy/models/block/very_tall_grass_top.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/tinted_cross", - "textures": { - "cross": "antarchy:block/very_tall_grass/very_tall_grass_top" - } -} diff --git a/common/src/main/resources/assets/antarchy/models/item/blush_moss_block.json b/common/src/main/resources/assets/antarchy/models/item/blush_moss_block.json new file mode 100644 index 00000000..2d078db7 --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/item/blush_moss_carpet.json b/common/src/main/resources/assets/antarchy/models/item/blush_moss_carpet.json new file mode 100644 index 00000000..3a315ab2 --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/item/torchflower_bush.json b/common/src/main/resources/assets/antarchy/models/item/camellia.json similarity index 55% rename from common/src/main/resources/assets/antarchy/models/item/torchflower_bush.json rename to common/src/main/resources/assets/antarchy/models/item/camellia.json index ed844f3a..7bc819fc 100644 --- a/common/src/main/resources/assets/antarchy/models/item/torchflower_bush.json +++ b/common/src/main/resources/assets/antarchy/models/item/camellia.json @@ -1,6 +1,6 @@ { "parent": "minecraft:item/generated", "textures": { - "layer0": "antarchy:block/torchflower_bush_top" + "layer0": "antarchy:block/camellia_bush_top" } } diff --git a/common/src/main/resources/assets/antarchy/models/item/very_short_grass.json b/common/src/main/resources/assets/antarchy/models/item/cooked_corndog.json similarity index 57% rename from common/src/main/resources/assets/antarchy/models/item/very_short_grass.json rename to common/src/main/resources/assets/antarchy/models/item/cooked_corndog.json index 0929ced1..1cea5262 100644 --- a/common/src/main/resources/assets/antarchy/models/item/very_short_grass.json +++ b/common/src/main/resources/assets/antarchy/models/item/cooked_corndog.json @@ -1,6 +1,6 @@ { "parent": "minecraft:item/generated", "textures": { - "layer0": "antarchy:block/very_short_grass" + "layer0": "antarchy:item/cooked_corndog" } } diff --git a/common/src/main/resources/assets/antarchy/models/item/ouranwood_vine.json b/common/src/main/resources/assets/antarchy/models/item/cooked_venison.json similarity index 53% rename from common/src/main/resources/assets/antarchy/models/item/ouranwood_vine.json rename to common/src/main/resources/assets/antarchy/models/item/cooked_venison.json index dbd3bb74..de553e83 100644 --- a/common/src/main/resources/assets/antarchy/models/item/ouranwood_vine.json +++ b/common/src/main/resources/assets/antarchy/models/item/cooked_venison.json @@ -1,6 +1,6 @@ { "parent": "minecraft:item/generated", "textures": { - "layer0": "antarchy:block/ouranwood/ouranwood_vine" + "layer0": "antarchy:item/cooked_venison" } } diff --git a/common/src/main/resources/assets/antarchy/models/item/corn.json b/common/src/main/resources/assets/antarchy/models/item/corn.json new file mode 100644 index 00000000..c8ff373d --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/item/corn_seeds.json b/common/src/main/resources/assets/antarchy/models/item/corn_seeds.json new file mode 100644 index 00000000..20bee2b7 --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/item/cornbread.json b/common/src/main/resources/assets/antarchy/models/item/cornbread.json new file mode 100644 index 00000000..36a51af9 --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/item/dead_star_coral.json b/common/src/main/resources/assets/antarchy/models/item/dead_star_coral.json new file mode 100644 index 00000000..12f6c85b --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/item/dead_star_coral_block.json b/common/src/main/resources/assets/antarchy/models/item/dead_star_coral_block.json new file mode 100644 index 00000000..4867c42e --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/item/dead_star_coral_fan.json b/common/src/main/resources/assets/antarchy/models/item/dead_star_coral_fan.json new file mode 100644 index 00000000..7802084f --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/item/elka_spawn_egg.json b/common/src/main/resources/assets/antarchy/models/item/elka_spawn_egg.json new file mode 100644 index 00000000..ddd15597 --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/item/giant_lily_pad.json b/common/src/main/resources/assets/antarchy/models/item/giant_lily_pad.json new file mode 100644 index 00000000..c325d587 --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/item/glimmer_bottle.json b/common/src/main/resources/assets/antarchy/models/item/glimmer_bottle.json new file mode 100644 index 00000000..eb725288 --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/item/high_fructose_corn_syrup.json b/common/src/main/resources/assets/antarchy/models/item/high_fructose_corn_syrup.json new file mode 100644 index 00000000..b719b3f0 --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/item/kraken_tentacle.json b/common/src/main/resources/assets/antarchy/models/item/kraken_tentacle.json new file mode 100644 index 00000000..a2303ac6 --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/item/krakens_grasp_gui.json b/common/src/main/resources/assets/antarchy/models/item/krakens_grasp_gui.json new file mode 100644 index 00000000..8b08084b --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/item/krakens_grasp_held.json b/common/src/main/resources/assets/antarchy/models/item/krakens_grasp_held.json new file mode 100644 index 00000000..15217a4d --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/krakens_grasp_held.json @@ -0,0 +1,121 @@ +{ + "parent": "builtin/entity", + "texture_size": [ + 32, + 32 + ], + "gui_light": "front", + "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 + ] + } + } +} \ No newline at end of file diff --git a/common/src/main/resources/assets/antarchy/models/item/lumen_froglight.json b/common/src/main/resources/assets/antarchy/models/item/lumen_froglight.json new file mode 100644 index 00000000..6ba41b3b --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/lumen_froglight.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/lumen_froglight" +} diff --git a/common/src/main/resources/assets/antarchy/models/item/miners_dream.json b/common/src/main/resources/assets/antarchy/models/item/miners_dream.json new file mode 100644 index 00000000..c7a0f166 --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/item/ouranwood_deer_spawn_egg.json b/common/src/main/resources/assets/antarchy/models/item/ouranwood_deer_spawn_egg.json new file mode 100644 index 00000000..ddd15597 --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/item/peach.json b/common/src/main/resources/assets/antarchy/models/item/peach.json new file mode 100644 index 00000000..1f1914ef --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/item/peach_boat.json b/common/src/main/resources/assets/antarchy/models/item/peach_boat.json new file mode 100644 index 00000000..ce8a29a3 --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/item/peach_button.json b/common/src/main/resources/assets/antarchy/models/item/peach_button.json new file mode 100644 index 00000000..b6539669 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/peach_button.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/peach_button_inventory" +} + diff --git a/common/src/main/resources/assets/antarchy/models/item/peach_chest_boat.json b/common/src/main/resources/assets/antarchy/models/item/peach_chest_boat.json new file mode 100644 index 00000000..4aa30319 --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/item/peach_door.json b/common/src/main/resources/assets/antarchy/models/item/peach_door.json new file mode 100644 index 00000000..7f6da626 --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/item/peach_fence.json b/common/src/main/resources/assets/antarchy/models/item/peach_fence.json new file mode 100644 index 00000000..38f63661 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/peach_fence.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/peach_fence_inventory" +} + diff --git a/common/src/main/resources/assets/antarchy/models/item/peach_fence_gate.json b/common/src/main/resources/assets/antarchy/models/item/peach_fence_gate.json new file mode 100644 index 00000000..8601b7e8 --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/item/peach_hanging_sign.json b/common/src/main/resources/assets/antarchy/models/item/peach_hanging_sign.json new file mode 100644 index 00000000..adc4be1f --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/item/peach_leaves.json b/common/src/main/resources/assets/antarchy/models/item/peach_leaves.json new file mode 100644 index 00000000..bbadf8b9 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/peach_leaves.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/peach_leaves" +} + diff --git a/common/src/main/resources/assets/antarchy/models/item/peach_log.json b/common/src/main/resources/assets/antarchy/models/item/peach_log.json new file mode 100644 index 00000000..cc668db3 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/peach_log.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/peach_log" +} + diff --git a/common/src/main/resources/assets/antarchy/models/item/peach_pie.json b/common/src/main/resources/assets/antarchy/models/item/peach_pie.json new file mode 100644 index 00000000..80c8ee63 --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/item/peach_planks.json b/common/src/main/resources/assets/antarchy/models/item/peach_planks.json new file mode 100644 index 00000000..712b1147 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/peach_planks.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/peach_planks" +} + diff --git a/common/src/main/resources/assets/antarchy/models/item/peach_pressure_plate.json b/common/src/main/resources/assets/antarchy/models/item/peach_pressure_plate.json new file mode 100644 index 00000000..0f392d10 --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/item/peach_sapling.json b/common/src/main/resources/assets/antarchy/models/item/peach_sapling.json new file mode 100644 index 00000000..1aeac284 --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/item/peach_sign.json b/common/src/main/resources/assets/antarchy/models/item/peach_sign.json new file mode 100644 index 00000000..977817ee --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/item/peach_slab.json b/common/src/main/resources/assets/antarchy/models/item/peach_slab.json new file mode 100644 index 00000000..69cec5cf --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/peach_slab.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/peach_slab" +} + diff --git a/common/src/main/resources/assets/antarchy/models/item/peach_stairs.json b/common/src/main/resources/assets/antarchy/models/item/peach_stairs.json new file mode 100644 index 00000000..da2ce419 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/peach_stairs.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/peach_stairs" +} + diff --git a/common/src/main/resources/assets/antarchy/models/item/peach_trapdoor.json b/common/src/main/resources/assets/antarchy/models/item/peach_trapdoor.json new file mode 100644 index 00000000..991cc7ab --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/peach_trapdoor.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/peach_trapdoor_bottom" +} + diff --git a/common/src/main/resources/assets/antarchy/models/item/peach_wood.json b/common/src/main/resources/assets/antarchy/models/item/peach_wood.json new file mode 100644 index 00000000..e4b6c7c0 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/peach_wood.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/peach_wood" +} + diff --git a/common/src/main/resources/assets/antarchy/models/item/popcorn.json b/common/src/main/resources/assets/antarchy/models/item/popcorn.json new file mode 100644 index 00000000..7702406c --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/item/raw_corndog.json b/common/src/main/resources/assets/antarchy/models/item/raw_corndog.json new file mode 100644 index 00000000..837b733d --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/item/raw_venison.json b/common/src/main/resources/assets/antarchy/models/item/raw_venison.json new file mode 100644 index 00000000..7d4db7cd --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/item/root_beer.json b/common/src/main/resources/assets/antarchy/models/item/root_beer.json new file mode 100644 index 00000000..f02e8fba --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/item/roseate_froglight.json b/common/src/main/resources/assets/antarchy/models/item/roseate_froglight.json new file mode 100644 index 00000000..e9d680ab --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/roseate_froglight.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/roseate_froglight" +} diff --git a/common/src/main/resources/assets/antarchy/models/item/rpo_launcher_gui.json b/common/src/main/resources/assets/antarchy/models/item/rpo_launcher_gui.json new file mode 100644 index 00000000..035aa419 --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/item/rpo_launcher_held_geo.json b/common/src/main/resources/assets/antarchy/models/item/rpo_launcher_held_geo.json new file mode 100644 index 00000000..b624f476 --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/item/spider_lily.json b/common/src/main/resources/assets/antarchy/models/item/spider_lily.json new file mode 100644 index 00000000..f76fa4db --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/item/spirit_apple.json b/common/src/main/resources/assets/antarchy/models/item/spirit_apple.json new file mode 100644 index 00000000..34602711 --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/item/star_coral.json b/common/src/main/resources/assets/antarchy/models/item/star_coral.json new file mode 100644 index 00000000..a1caf1d1 --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/item/star_coral_block.json b/common/src/main/resources/assets/antarchy/models/item/star_coral_block.json new file mode 100644 index 00000000..a8f8a15d --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/item/star_coral_fan.json b/common/src/main/resources/assets/antarchy/models/item/star_coral_fan.json new file mode 100644 index 00000000..4659f552 --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/item/stripped_peach_log.json b/common/src/main/resources/assets/antarchy/models/item/stripped_peach_log.json new file mode 100644 index 00000000..5ab747f0 --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/item/stripped_peach_wood.json b/common/src/main/resources/assets/antarchy/models/item/stripped_peach_wood.json new file mode 100644 index 00000000..908f1210 --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/models/item/very_tall_grass.json b/common/src/main/resources/assets/antarchy/models/item/very_tall_grass.json deleted file mode 100644 index 541bc2be..00000000 --- a/common/src/main/resources/assets/antarchy/models/item/very_tall_grass.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "antarchy:block/very_tall_grass/very_tall_grass_bottom" - } -} diff --git a/common/src/main/resources/assets/antarchy/particles/peach_leaves_particle.json b/common/src/main/resources/assets/antarchy/particles/peach_leaves_particle.json new file mode 100644 index 00000000..2c124f3e --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/textures/block/big_bush/big_bush_stage1.png b/common/src/main/resources/assets/antarchy/textures/block/big_bush/big_bush_stage1.png deleted file mode 100644 index 21da1087..00000000 Binary files a/common/src/main/resources/assets/antarchy/textures/block/big_bush/big_bush_stage1.png and /dev/null differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/big_bush/big_bush_stage2.png b/common/src/main/resources/assets/antarchy/textures/block/big_bush/big_bush_stage2.png deleted file mode 100644 index eaecfc99..00000000 Binary files a/common/src/main/resources/assets/antarchy/textures/block/big_bush/big_bush_stage2.png and /dev/null differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/big_bush/big_bush_stage3.png b/common/src/main/resources/assets/antarchy/textures/block/big_bush/big_bush_stage3.png deleted file mode 100644 index e4e92e5d..00000000 Binary files a/common/src/main/resources/assets/antarchy/textures/block/big_bush/big_bush_stage3.png and /dev/null differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/bile/bile_vein.png b/common/src/main/resources/assets/antarchy/textures/block/bile/bile_vein.png index 2a99d09c..fbade520 100644 Binary files a/common/src/main/resources/assets/antarchy/textures/block/bile/bile_vein.png and b/common/src/main/resources/assets/antarchy/textures/block/bile/bile_vein.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/bile/bile_vein.png.mcmeta b/common/src/main/resources/assets/antarchy/textures/block/bile/bile_vein.png.mcmeta index b44a2ee6..6714e205 100644 --- a/common/src/main/resources/assets/antarchy/textures/block/bile/bile_vein.png.mcmeta +++ b/common/src/main/resources/assets/antarchy/textures/block/bile/bile_vein.png.mcmeta @@ -1,16 +1,6 @@ { "animation": { "frametime": 16, - "interpolate": true, - "frames": [ - 0, - 1, - 0, - 2, - 0, - 1, - 2, - 1 - ] + "interpolate": true } } diff --git a/common/src/main/resources/assets/antarchy/textures/block/blush_moss/blush_moss_block.png b/common/src/main/resources/assets/antarchy/textures/block/blush_moss/blush_moss_block.png new file mode 100644 index 00000000..0501cf58 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/block/blush_moss/blush_moss_block.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/blush_moss/blush_moss_carpet.png b/common/src/main/resources/assets/antarchy/textures/block/blush_moss/blush_moss_carpet.png new file mode 100644 index 00000000..0501cf58 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/block/blush_moss/blush_moss_carpet.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/camellia_bush_bottom.png b/common/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/src/main/resources/assets/antarchy/textures/block/camellia_bush_bottom.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/camellia_bush_top.png b/common/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/src/main/resources/assets/antarchy/textures/block/camellia_bush_top.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/corn/corn_crop_stage_0.png b/common/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/src/main/resources/assets/antarchy/textures/block/corn/corn_crop_stage_0.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/corn/corn_crop_stage_1.png b/common/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/src/main/resources/assets/antarchy/textures/block/corn/corn_crop_stage_1.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/corn/corn_crop_stage_2_bottom.png b/common/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/src/main/resources/assets/antarchy/textures/block/corn/corn_crop_stage_2_bottom.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/corn/corn_crop_stage_2_top.png b/common/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/src/main/resources/assets/antarchy/textures/block/corn/corn_crop_stage_2_top.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/corn/corn_crop_stage_3_bottom.png b/common/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/src/main/resources/assets/antarchy/textures/block/corn/corn_crop_stage_3_bottom.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/corn/corn_crop_stage_3_top.png b/common/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/src/main/resources/assets/antarchy/textures/block/corn/corn_crop_stage_3_top.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/giant_lilypad/giant_lilypad_1x1.png b/common/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/src/main/resources/assets/antarchy/textures/block/giant_lilypad/giant_lilypad_1x1.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/giant_lilypad/giant_lilypad_2x1.png b/common/src/main/resources/assets/antarchy/textures/block/giant_lilypad/giant_lilypad_2x1.png new file mode 100644 index 00000000..1ae4f41c Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/block/giant_lilypad/giant_lilypad_2x1.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/giant_lilypad/giant_lilypad_2x2.png b/common/src/main/resources/assets/antarchy/textures/block/giant_lilypad/giant_lilypad_2x2.png new file mode 100644 index 00000000..b4406ca1 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/block/giant_lilypad/giant_lilypad_2x2.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/giant_lilypad/giant_lilypad_3x3.png b/common/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/src/main/resources/assets/antarchy/textures/block/giant_lilypad/giant_lilypad_3x3.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/giant_lilypad/giant_lilypad_full_1x1.png b/common/src/main/resources/assets/antarchy/textures/block/giant_lilypad/giant_lilypad_full_1x1.png new file mode 100644 index 00000000..bd23f84a Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/block/giant_lilypad/giant_lilypad_full_1x1.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/giant_lilypad/giant_lilypad_full_2x1.png b/common/src/main/resources/assets/antarchy/textures/block/giant_lilypad/giant_lilypad_full_2x1.png new file mode 100644 index 00000000..89fcc376 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/block/giant_lilypad/giant_lilypad_full_2x1.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/giant_lilypad/giant_lilypad_full_2x2.png b/common/src/main/resources/assets/antarchy/textures/block/giant_lilypad/giant_lilypad_full_2x2.png new file mode 100644 index 00000000..d2f9d2fc Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/block/giant_lilypad/giant_lilypad_full_2x2.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/giant_lilypad/giant_lilypad_full_3x3.png b/common/src/main/resources/assets/antarchy/textures/block/giant_lilypad/giant_lilypad_full_3x3.png new file mode 100644 index 00000000..1b6b3e6a Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/block/giant_lilypad/giant_lilypad_full_3x3.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/lotus.png b/common/src/main/resources/assets/antarchy/textures/block/lotus.png new file mode 100644 index 00000000..370266d7 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/block/lotus.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/lumen_flow.png b/common/src/main/resources/assets/antarchy/textures/block/lumen_flow.png new file mode 100644 index 00000000..4fe95180 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/block/lumen_flow.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/lumen_flow.png.mcmeta b/common/src/main/resources/assets/antarchy/textures/block/lumen_flow.png.mcmeta new file mode 100644 index 00000000..3479f1d8 --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/textures/block/lumen_flowing.png b/common/src/main/resources/assets/antarchy/textures/block/lumen_flowing.png new file mode 100644 index 00000000..4fe95180 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/block/lumen_flowing.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/lumen_flowing.png.mcmeta b/common/src/main/resources/assets/antarchy/textures/block/lumen_flowing.png.mcmeta new file mode 100644 index 00000000..cb44715a --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/textures/block/lumen_froglight_side.png b/common/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/src/main/resources/assets/antarchy/textures/block/lumen_froglight_side.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/lumen_froglight_top.png b/common/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/src/main/resources/assets/antarchy/textures/block/lumen_froglight_top.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/lumen_still.png b/common/src/main/resources/assets/antarchy/textures/block/lumen_still.png new file mode 100644 index 00000000..1b35db30 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/block/lumen_still.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/lumen_still.png.mcmeta b/common/src/main/resources/assets/antarchy/textures/block/lumen_still.png.mcmeta new file mode 100644 index 00000000..cb44715a --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/textures/block/ouranwood/ouranwood_vine.png b/common/src/main/resources/assets/antarchy/textures/block/ouranwood/ouranwood_vine.png deleted file mode 100644 index d95e4c07..00000000 Binary files a/common/src/main/resources/assets/antarchy/textures/block/ouranwood/ouranwood_vine.png and /dev/null differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/ouranwood/ouranwood_vine_plant.png b/common/src/main/resources/assets/antarchy/textures/block/ouranwood/ouranwood_vine_plant.png deleted file mode 100644 index 75b6fa30..00000000 Binary files a/common/src/main/resources/assets/antarchy/textures/block/ouranwood/ouranwood_vine_plant.png and /dev/null differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/pale_nyxite.png b/common/src/main/resources/assets/antarchy/textures/block/pale_nyxite.png index 387c9a6a..2c6a2834 100644 Binary files a/common/src/main/resources/assets/antarchy/textures/block/pale_nyxite.png and b/common/src/main/resources/assets/antarchy/textures/block/pale_nyxite.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/peach/peach_door_bottom.png b/common/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/src/main/resources/assets/antarchy/textures/block/peach/peach_door_bottom.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/peach/peach_door_top.png b/common/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/src/main/resources/assets/antarchy/textures/block/peach/peach_door_top.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/peach/peach_hanging.png b/common/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/src/main/resources/assets/antarchy/textures/block/peach/peach_hanging.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/peach/peach_leaves.png b/common/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/src/main/resources/assets/antarchy/textures/block/peach/peach_leaves.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/peach/peach_log.png b/common/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/src/main/resources/assets/antarchy/textures/block/peach/peach_log.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/peach/peach_log_top.png b/common/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/src/main/resources/assets/antarchy/textures/block/peach/peach_log_top.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/peach/peach_planks.png b/common/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/src/main/resources/assets/antarchy/textures/block/peach/peach_planks.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/peach/peach_sapling.png b/common/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/src/main/resources/assets/antarchy/textures/block/peach/peach_sapling.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/peach/peach_trapdoor.png b/common/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/src/main/resources/assets/antarchy/textures/block/peach/peach_trapdoor.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/peach/stripped_peach_log.png b/common/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/src/main/resources/assets/antarchy/textures/block/peach/stripped_peach_log.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/peach/stripped_peach_log_top.png b/common/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/src/main/resources/assets/antarchy/textures/block/peach/stripped_peach_log_top.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/red_ant_nest.png b/common/src/main/resources/assets/antarchy/textures/block/red_ant_nest.png deleted file mode 100644 index 06db6100..00000000 Binary files a/common/src/main/resources/assets/antarchy/textures/block/red_ant_nest.png and /dev/null differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/red_ant_nest/red_ant_nest_side.png b/common/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/src/main/resources/assets/antarchy/textures/block/red_ant_nest/red_ant_nest_side.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/red_ant_nest/red_ant_nest_side.png.mcmeta b/common/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/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/src/main/resources/assets/antarchy/textures/block/red_ant_nest/red_ant_nest_top.png b/common/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/src/main/resources/assets/antarchy/textures/block/red_ant_nest/red_ant_nest_top.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/red_ant_nest/red_ant_nest_top.png.mcmeta b/common/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/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/src/main/resources/assets/antarchy/textures/block/red_ant_nest_top.png b/common/src/main/resources/assets/antarchy/textures/block/red_ant_nest_top.png deleted file mode 100644 index f14da613..00000000 Binary files a/common/src/main/resources/assets/antarchy/textures/block/red_ant_nest_top.png and /dev/null differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/roseate_froglight_side.png b/common/src/main/resources/assets/antarchy/textures/block/roseate_froglight_side.png new file mode 100644 index 00000000..699b9a0d Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/block/roseate_froglight_side.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/roseate_froglight_top.png b/common/src/main/resources/assets/antarchy/textures/block/roseate_froglight_top.png new file mode 100644 index 00000000..9419b2ea Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/block/roseate_froglight_top.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/spider_lily_stem.png b/common/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/src/main/resources/assets/antarchy/textures/block/spider_lily_stem.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/spider_lily_top.png b/common/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/src/main/resources/assets/antarchy/textures/block/spider_lily_top.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/star_coral/dead_star_coral.png b/common/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/src/main/resources/assets/antarchy/textures/block/star_coral/dead_star_coral.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/star_coral/dead_star_coral_block.png b/common/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/src/main/resources/assets/antarchy/textures/block/star_coral/dead_star_coral_block.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/star_coral/dead_star_coral_fan.png b/common/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/src/main/resources/assets/antarchy/textures/block/star_coral/dead_star_coral_fan.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/star_coral/star_coral.png b/common/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/src/main/resources/assets/antarchy/textures/block/star_coral/star_coral.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/star_coral/star_coral.png.mcmeta b/common/src/main/resources/assets/antarchy/textures/block/star_coral/star_coral.png.mcmeta new file mode 100644 index 00000000..3d71a468 --- /dev/null +++ b/common/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/src/main/resources/assets/antarchy/textures/block/star_coral/star_coral_block.png b/common/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/src/main/resources/assets/antarchy/textures/block/star_coral/star_coral_block.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/star_coral/star_coral_block.png.mcmeta b/common/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/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/src/main/resources/assets/antarchy/textures/block/star_coral/star_coral_fan.png b/common/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/src/main/resources/assets/antarchy/textures/block/star_coral/star_coral_fan.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/star_coral/star_coral_fan.png.mcmeta b/common/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/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/src/main/resources/assets/antarchy/textures/block/torchflower_bush_bottom.png b/common/src/main/resources/assets/antarchy/textures/block/torchflower_bush_bottom.png deleted file mode 100644 index c17c76d8..00000000 Binary files a/common/src/main/resources/assets/antarchy/textures/block/torchflower_bush_bottom.png and /dev/null differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/torchflower_bush_top.png b/common/src/main/resources/assets/antarchy/textures/block/torchflower_bush_top.png deleted file mode 100644 index cdd07bc3..00000000 Binary files a/common/src/main/resources/assets/antarchy/textures/block/torchflower_bush_top.png and /dev/null differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/very_short_grass.png b/common/src/main/resources/assets/antarchy/textures/block/very_short_grass.png deleted file mode 100644 index 2b9c8433..00000000 Binary files a/common/src/main/resources/assets/antarchy/textures/block/very_short_grass.png and /dev/null differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/very_tall_grass/very_tall_grass_bottom.png b/common/src/main/resources/assets/antarchy/textures/block/very_tall_grass/very_tall_grass_bottom.png deleted file mode 100644 index 7b39df63..00000000 Binary files a/common/src/main/resources/assets/antarchy/textures/block/very_tall_grass/very_tall_grass_bottom.png and /dev/null differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/very_tall_grass/very_tall_grass_middle.png b/common/src/main/resources/assets/antarchy/textures/block/very_tall_grass/very_tall_grass_middle.png deleted file mode 100644 index 20d8e01d..00000000 Binary files a/common/src/main/resources/assets/antarchy/textures/block/very_tall_grass/very_tall_grass_middle.png and /dev/null differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/very_tall_grass/very_tall_grass_top.png b/common/src/main/resources/assets/antarchy/textures/block/very_tall_grass/very_tall_grass_top.png deleted file mode 100644 index d81d7528..00000000 Binary files a/common/src/main/resources/assets/antarchy/textures/block/very_tall_grass/very_tall_grass_top.png and /dev/null differ diff --git a/common/src/main/resources/assets/antarchy/textures/entity/boat/peach.png b/common/src/main/resources/assets/antarchy/textures/entity/boat/peach.png new file mode 100644 index 00000000..8dabe8ce Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/entity/boat/peach.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/entity/chest_boat/peach.png b/common/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/src/main/resources/assets/antarchy/textures/entity/chest_boat/peach.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/entity/elka.png b/common/src/main/resources/assets/antarchy/textures/entity/elka.png new file mode 100644 index 00000000..27a2d587 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/entity/elka.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/entity/elka_baby.png b/common/src/main/resources/assets/antarchy/textures/entity/elka_baby.png new file mode 100644 index 00000000..23c415a8 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/entity/elka_baby.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/entity/frog/frog_elythia.png b/common/src/main/resources/assets/antarchy/textures/entity/frog/frog_elythia.png new file mode 100644 index 00000000..f32b311e Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/entity/frog/frog_elythia.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/entity/glimmer/apple_cow_glimmer.png b/common/src/main/resources/assets/antarchy/textures/entity/glimmer/apple_cow_glimmer.png new file mode 100644 index 00000000..8507daba Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/entity/glimmer/apple_cow_glimmer.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/entity/glimmer/apple_cow_glimmer_emissive.png b/common/src/main/resources/assets/antarchy/textures/entity/glimmer/apple_cow_glimmer_emissive.png new file mode 100644 index 00000000..d18c587d Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/entity/glimmer/apple_cow_glimmer_emissive.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/entity/glimmer/apple_cow_glimmer_sheared.png b/common/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/src/main/resources/assets/antarchy/textures/entity/glimmer/apple_cow_glimmer_sheared.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/entity/glimmer/apple_cow_glimmer_sheared_emissive.png b/common/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/src/main/resources/assets/antarchy/textures/entity/glimmer/apple_cow_glimmer_sheared_emissive.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/entity/glimmer/glimmer.png b/common/src/main/resources/assets/antarchy/textures/entity/glimmer/deer_glimmer.png similarity index 100% rename from common/src/main/resources/assets/antarchy/textures/entity/glimmer/glimmer.png rename to common/src/main/resources/assets/antarchy/textures/entity/glimmer/deer_glimmer.png diff --git a/common/src/main/resources/assets/antarchy/textures/entity/glimmer/glimmer_emissive.png b/common/src/main/resources/assets/antarchy/textures/entity/glimmer/deer_glimmer_emissive.png similarity index 100% rename from common/src/main/resources/assets/antarchy/textures/entity/glimmer/glimmer_emissive.png rename to common/src/main/resources/assets/antarchy/textures/entity/glimmer/deer_glimmer_emissive.png diff --git a/common/src/main/resources/assets/antarchy/textures/entity/glimmer/elka_glimmer.png b/common/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/src/main/resources/assets/antarchy/textures/entity/glimmer/elka_glimmer.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/entity/glimmer/elka_glimmer_emmisive.png b/common/src/main/resources/assets/antarchy/textures/entity/glimmer/elka_glimmer_emmisive.png new file mode 100644 index 00000000..8bdbbeaf Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/entity/glimmer/elka_glimmer_emmisive.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/entity/glimmer/frog_glimmer.png b/common/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/src/main/resources/assets/antarchy/textures/entity/glimmer/frog_glimmer.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/entity/glimmer/frog_glimmer_emmisive.png b/common/src/main/resources/assets/antarchy/textures/entity/glimmer/frog_glimmer_emmisive.png new file mode 100644 index 00000000..54570e63 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/entity/glimmer/frog_glimmer_emmisive.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/entity/glimmer/glimmer_ant.png b/common/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/src/main/resources/assets/antarchy/textures/entity/glimmer/glimmer_ant.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/entity/glimmer/glimmer_ant_emmisive.png b/common/src/main/resources/assets/antarchy/textures/entity/glimmer/glimmer_ant_emmisive.png new file mode 100644 index 00000000..0c15178e Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/entity/glimmer/glimmer_ant_emmisive.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/entity/glimmer/glimmer_baby.png b/common/src/main/resources/assets/antarchy/textures/entity/glimmer/glimmer_baby.png deleted file mode 100644 index 4198a656..00000000 Binary files a/common/src/main/resources/assets/antarchy/textures/entity/glimmer/glimmer_baby.png and /dev/null differ diff --git a/common/src/main/resources/assets/antarchy/textures/entity/glimmer/glimmer_baby_day.png b/common/src/main/resources/assets/antarchy/textures/entity/glimmer/glimmer_baby_day.png deleted file mode 100644 index 0ce1e803..00000000 Binary files a/common/src/main/resources/assets/antarchy/textures/entity/glimmer/glimmer_baby_day.png and /dev/null differ diff --git a/common/src/main/resources/assets/antarchy/textures/entity/glimmer/glimmer_baby_emissive.png b/common/src/main/resources/assets/antarchy/textures/entity/glimmer/glimmer_baby_emissive.png deleted file mode 100644 index 4c406021..00000000 Binary files a/common/src/main/resources/assets/antarchy/textures/entity/glimmer/glimmer_baby_emissive.png and /dev/null differ diff --git a/common/src/main/resources/assets/antarchy/textures/entity/glimmer/rabbit_glimmer.png b/common/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/src/main/resources/assets/antarchy/textures/entity/glimmer/rabbit_glimmer.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/entity/glimmer/rabbit_glimmer_emmisive.png b/common/src/main/resources/assets/antarchy/textures/entity/glimmer/rabbit_glimmer_emmisive.png new file mode 100644 index 00000000..9ba7dade Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/entity/glimmer/rabbit_glimmer_emmisive.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/entity/glimmer/glimmer_day.png b/common/src/main/resources/assets/antarchy/textures/entity/ouranwood_deer/deer_buck.png similarity index 100% rename from common/src/main/resources/assets/antarchy/textures/entity/glimmer/glimmer_day.png rename to common/src/main/resources/assets/antarchy/textures/entity/ouranwood_deer/deer_buck.png diff --git a/common/src/main/resources/assets/antarchy/textures/entity/ouranwood_deer/deer_doe.png b/common/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/src/main/resources/assets/antarchy/textures/entity/ouranwood_deer/deer_doe.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/entity/ouranwood_deer/deer_stag.png b/common/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/src/main/resources/assets/antarchy/textures/entity/ouranwood_deer/deer_stag.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/entity/signs/hanging/peach.png b/common/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/src/main/resources/assets/antarchy/textures/entity/signs/hanging/peach.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/entity/signs/peach.png b/common/src/main/resources/assets/antarchy/textures/entity/signs/peach.png new file mode 100644 index 00000000..46c2e786 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/entity/signs/peach.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/entity/tentacle.png b/common/src/main/resources/assets/antarchy/textures/entity/tentacle.png new file mode 100644 index 00000000..8c1f1187 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/entity/tentacle.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/gui/hanging_signs/ouranwood.png b/common/src/main/resources/assets/antarchy/textures/gui/hanging_signs/ouranwood.png index 7903f083..030fada5 100644 Binary files a/common/src/main/resources/assets/antarchy/textures/gui/hanging_signs/ouranwood.png and b/common/src/main/resources/assets/antarchy/textures/gui/hanging_signs/ouranwood.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/gui/hanging_signs/peach.png b/common/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/src/main/resources/assets/antarchy/textures/gui/hanging_signs/peach.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/item/cheep.png b/common/src/main/resources/assets/antarchy/textures/item/cheep.png new file mode 100644 index 00000000..39b5499a Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/item/cheep.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/item/cooked_corndog.png b/common/src/main/resources/assets/antarchy/textures/item/cooked_corndog.png new file mode 100644 index 00000000..3a1a67b3 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/item/cooked_corndog.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/item/cooked_venison.png b/common/src/main/resources/assets/antarchy/textures/item/cooked_venison.png new file mode 100644 index 00000000..f0a7a31f Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/item/cooked_venison.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/item/corn.png b/common/src/main/resources/assets/antarchy/textures/item/corn.png new file mode 100644 index 00000000..ff703392 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/item/corn.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/item/corn_seeds.png b/common/src/main/resources/assets/antarchy/textures/item/corn_seeds.png new file mode 100644 index 00000000..bea63bd9 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/item/corn_seeds.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/item/cornbread.png b/common/src/main/resources/assets/antarchy/textures/item/cornbread.png new file mode 100644 index 00000000..304f70c4 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/item/cornbread.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/item/glimmer_bottle.png b/common/src/main/resources/assets/antarchy/textures/item/glimmer_bottle.png new file mode 100644 index 00000000..f9c4da5c Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/item/glimmer_bottle.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/item/high_fructose_corn_syrup.png b/common/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/src/main/resources/assets/antarchy/textures/item/high_fructose_corn_syrup.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/item/kraken_tentacle.png b/common/src/main/resources/assets/antarchy/textures/item/kraken_tentacle.png new file mode 100644 index 00000000..25ff5880 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/item/kraken_tentacle.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/item/kraken_tooth.png b/common/src/main/resources/assets/antarchy/textures/item/kraken_tooth.png index 200ab731..c1a119d3 100644 Binary files a/common/src/main/resources/assets/antarchy/textures/item/kraken_tooth.png and b/common/src/main/resources/assets/antarchy/textures/item/kraken_tooth.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/item/krakens_grasp/krakens_grasp.png b/common/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/src/main/resources/assets/antarchy/textures/item/krakens_grasp/krakens_grasp.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/item/krakens_grasp/krakens_grasp_item.png b/common/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/src/main/resources/assets/antarchy/textures/item/krakens_grasp/krakens_grasp_item.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/item/lumen_bucket.png b/common/src/main/resources/assets/antarchy/textures/item/lumen_bucket.png new file mode 100644 index 00000000..4bfd1f2a Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/item/lumen_bucket.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/item/miners_dream.png b/common/src/main/resources/assets/antarchy/textures/item/miners_dream.png new file mode 100644 index 00000000..d8371b7b Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/item/miners_dream.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/item/peach.png b/common/src/main/resources/assets/antarchy/textures/item/peach.png new file mode 100644 index 00000000..02c9e1dd Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/item/peach.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/item/peach_boat.png b/common/src/main/resources/assets/antarchy/textures/item/peach_boat.png new file mode 100644 index 00000000..320204cf Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/item/peach_boat.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/item/peach_chest_boat.png b/common/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/src/main/resources/assets/antarchy/textures/item/peach_chest_boat.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/item/peach_door_icon.png b/common/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/src/main/resources/assets/antarchy/textures/item/peach_door_icon.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/item/peach_hanging_sign.png b/common/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/src/main/resources/assets/antarchy/textures/item/peach_hanging_sign.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/item/peach_pie.png b/common/src/main/resources/assets/antarchy/textures/item/peach_pie.png new file mode 100644 index 00000000..31cf56fb Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/item/peach_pie.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/item/peach_sign.png b/common/src/main/resources/assets/antarchy/textures/item/peach_sign.png new file mode 100644 index 00000000..17d927dc Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/item/peach_sign.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/item/popcorn.png b/common/src/main/resources/assets/antarchy/textures/item/popcorn.png new file mode 100644 index 00000000..a7130653 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/item/popcorn.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/item/raw_corndog.png b/common/src/main/resources/assets/antarchy/textures/item/raw_corndog.png new file mode 100644 index 00000000..a8e5749e Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/item/raw_corndog.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/item/raw_venison.png b/common/src/main/resources/assets/antarchy/textures/item/raw_venison.png new file mode 100644 index 00000000..3bf72b68 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/item/raw_venison.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/item/root_beer.png b/common/src/main/resources/assets/antarchy/textures/item/root_beer.png new file mode 100644 index 00000000..63024ad4 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/item/root_beer.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/item/rpo_launcher_item.png b/common/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/src/main/resources/assets/antarchy/textures/item/rpo_launcher_item.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/item/spirit_apple.png b/common/src/main/resources/assets/antarchy/textures/item/spirit_apple.png new file mode 100644 index 00000000..118f47e5 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/item/spirit_apple.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/mob_effect/bloodglass_ward.png b/common/src/main/resources/assets/antarchy/textures/mob_effect/bloodglass_ward.png index fb2becad..1f6cf4fd 100644 Binary files a/common/src/main/resources/assets/antarchy/textures/mob_effect/bloodglass_ward.png and b/common/src/main/resources/assets/antarchy/textures/mob_effect/bloodglass_ward.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/mob_effect/glimmers_grace.png b/common/src/main/resources/assets/antarchy/textures/mob_effect/glimmers_grace.png deleted file mode 100644 index b0214de7..00000000 Binary files a/common/src/main/resources/assets/antarchy/textures/mob_effect/glimmers_grace.png and /dev/null differ diff --git a/common/src/main/resources/assets/antarchy/textures/mob_effect/stinky.png b/common/src/main/resources/assets/antarchy/textures/mob_effect/stinky.png index 7436c983..316e3b2c 100644 Binary files a/common/src/main/resources/assets/antarchy/textures/mob_effect/stinky.png and b/common/src/main/resources/assets/antarchy/textures/mob_effect/stinky.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/models/item/rpo_launcher.png b/common/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/src/main/resources/assets/antarchy/textures/models/item/rpo_launcher.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/particle/peach/peach_0.png b/common/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/src/main/resources/assets/antarchy/textures/particle/peach/peach_0.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/particle/peach/peach_1.png b/common/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/src/main/resources/assets/antarchy/textures/particle/peach/peach_1.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/particle/peach/peach_10.png b/common/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/src/main/resources/assets/antarchy/textures/particle/peach/peach_10.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/particle/peach/peach_11.png b/common/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/src/main/resources/assets/antarchy/textures/particle/peach/peach_11.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/particle/peach/peach_2.png b/common/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/src/main/resources/assets/antarchy/textures/particle/peach/peach_2.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/particle/peach/peach_3.png b/common/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/src/main/resources/assets/antarchy/textures/particle/peach/peach_3.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/particle/peach/peach_4.png b/common/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/src/main/resources/assets/antarchy/textures/particle/peach/peach_4.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/particle/peach/peach_5.png b/common/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/src/main/resources/assets/antarchy/textures/particle/peach/peach_5.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/particle/peach/peach_6.png b/common/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/src/main/resources/assets/antarchy/textures/particle/peach/peach_6.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/particle/peach/peach_7.png b/common/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/src/main/resources/assets/antarchy/textures/particle/peach/peach_7.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/particle/peach/peach_8.png b/common/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/src/main/resources/assets/antarchy/textures/particle/peach/peach_8.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/particle/peach/peach_9.png b/common/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/src/main/resources/assets/antarchy/textures/particle/peach/peach_9.png differ diff --git a/common/src/main/resources/assets/minecraft/atlases/armor_trims.json b/common/src/main/resources/assets/minecraft/atlases/armor_trims.json new file mode 100644 index 00000000..a4220b78 --- /dev/null +++ b/common/src/main/resources/assets/minecraft/atlases/armor_trims.json @@ -0,0 +1,52 @@ +{ + "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": { + "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/src/main/resources/assets/minecraft/textures/entity/signs/hanging/ouranwood.png b/common/src/main/resources/assets/minecraft/textures/entity/signs/hanging/ouranwood.png deleted file mode 100644 index 7903f083..00000000 Binary files a/common/src/main/resources/assets/minecraft/textures/entity/signs/hanging/ouranwood.png and /dev/null differ diff --git a/common/src/main/resources/assets/minecraft/textures/entity/signs/ouranwood.png b/common/src/main/resources/assets/minecraft/textures/entity/signs/ouranwood.png deleted file mode 100644 index b134ba8c..00000000 Binary files a/common/src/main/resources/assets/minecraft/textures/entity/signs/ouranwood.png and /dev/null differ diff --git a/common/src/main/resources/data/antarchy/advancement/apple_of_my_eye.json b/common/src/main/resources/data/antarchy/advancement/apple_of_my_eye.json new file mode 100644 index 00000000..da282d0d --- /dev/null +++ b/common/src/main/resources/data/antarchy/advancement/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, + "id": "antarchy:glimmer_bottle" + }, + "show_toast": true, + "title": { + "translate": "advancements.antarchy.apple_of_my_eye.title" + } + }, + "requirements": [ + [ + "impossible" + ] + ], + "sends_telemetry_event": true +} diff --git a/common/src/main/resources/data/antarchy/advancement/deerly_beloved.json b/common/src/main/resources/data/antarchy/advancement/deerly_beloved.json new file mode 100644 index 00000000..f0c07944 --- /dev/null +++ b/common/src/main/resources/data/antarchy/advancement/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, + "id": "antarchy:glimmer_bottle" + }, + "show_toast": true, + "title": { + "translate": "advancements.antarchy.deerly_beloved.title" + } + }, + "requirements": [ + [ + "impossible" + ] + ], + "sends_telemetry_event": true +} diff --git a/common/src/main/resources/data/antarchy/advancement/elkcellent_choice.json b/common/src/main/resources/data/antarchy/advancement/elkcellent_choice.json new file mode 100644 index 00000000..924d3655 --- /dev/null +++ b/common/src/main/resources/data/antarchy/advancement/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, + "id": "antarchy:glimmer_bottle" + }, + "show_toast": true, + "title": { + "translate": "advancements.antarchy.elkcellent_choice.title" + } + }, + "requirements": [ + [ + "impossible" + ] + ], + "sends_telemetry_event": true +} diff --git a/common/src/main/resources/data/antarchy/advancement/hoppy_together.json b/common/src/main/resources/data/antarchy/advancement/hoppy_together.json new file mode 100644 index 00000000..db152869 --- /dev/null +++ b/common/src/main/resources/data/antarchy/advancement/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, + "id": "antarchy:glimmer_bottle" + }, + "show_toast": true, + "title": { + "translate": "advancements.antarchy.hoppy_together.title" + } + }, + "requirements": [ + [ + "impossible" + ] + ], + "sends_telemetry_event": true +} diff --git a/common/src/main/resources/data/antarchy/advancement/rocket_powered_octopus.json b/common/src/main/resources/data/antarchy/advancement/rocket_powered_octopus.json new file mode 100644 index 00000000..3bc55c0d --- /dev/null +++ b/common/src/main/resources/data/antarchy/advancement/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, + "id": "antarchy:rpo_launcher" + }, + "show_toast": true, + "title": { + "translate": "advancements.antarchy.rocket_powered_octopus.title" + } + }, + "requirements": [ + [ + "craft_rpo_launcher" + ] + ], + "sends_telemetry_event": true +} diff --git a/common/src/main/resources/data/antarchy/advancement/spirant_animal.json b/common/src/main/resources/data/antarchy/advancement/spirant_animal.json new file mode 100644 index 00000000..87c986a6 --- /dev/null +++ b/common/src/main/resources/data/antarchy/advancement/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, + "id": "antarchy:glimmer_bottle" + }, + "show_toast": true, + "title": { + "translate": "advancements.antarchy.spirant_animal.title" + } + }, + "requirements": [ + [ + "impossible" + ] + ], + "sends_telemetry_event": true +} diff --git a/common/src/main/resources/data/antarchy/dimension/elythia.json b/common/src/main/resources/data/antarchy/dimension/elythia.json index 551c88de..4b966674 100644 --- a/common/src/main/resources/data/antarchy/dimension/elythia.json +++ b/common/src/main/resources/data/antarchy/dimension/elythia.json @@ -95,38 +95,86 @@ } }, { - "biome": "antarchy:ouranwood_forest", + "biome": "antarchy:peach_forest", "parameters": { "temperature": 0.67, - "humidity": 0.93, + "humidity": 0.91, "continentalness": 0.54, - "erosion": 0.25, - "weirdness": -0.50, + "erosion": 0.16, + "weirdness": -0.42, "depth": 0.45, "offset": 0.0 } }, { - "biome": "antarchy:sparse_ouranwood_forest", + "biome": "antarchy:peach_forest", "parameters": { - "temperature": 0.67, - "humidity": 0.93, + "temperature": 0.66, + "humidity": 0.89, "continentalness": 0.54, - "erosion": 0.25, - "weirdness": -0.50, + "erosion": 0.38, + "weirdness": -0.42, "depth": 0.45, "offset": 0.0 } }, { - "biome": "antarchy:ouranwood_forest", + "biome": "antarchy:peach_forest", "parameters": { - "temperature": 0.45, - "humidity": 0.85, + "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.15, - "weirdness": -0.75, - "depth": 0.3, + "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.50, + "depth": 0.45, + "offset": 0.0 + } + }, + { + "biome": "antarchy:ouranwood_forest", + "parameters": { + "temperature": 0.67, + "humidity": 0.93, + "continentalness": 0.54, + "erosion": 0.20, + "weirdness": -0.40, + "depth": 0.45, "offset": 0.0 } }, @@ -166,30 +214,6 @@ "offset": 0.0 } }, - { - "biome": "antarchy:ouranwood_forest", - "parameters": { - "temperature": 0.45, - "humidity": 0.85, - "continentalness": 0.55, - "erosion": -0.15, - "weirdness": -0.75, - "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.0, - "offset": 0.0 - } - }, { "biome": "antarchy:ouranwood_forest", "parameters": { @@ -205,17 +229,17 @@ { "biome": "antarchy:sparse_ouranwood_forest", "parameters": { - "temperature": 0.45, - "humidity": 0.85, - "continentalness": 0.75, - "erosion": 0.0, - "weirdness": 0.7, + "temperature": 0.20, + "humidity": 0.62, + "continentalness": 0.95, + "erosion": -0.35, + "weirdness": 0.98, "depth": 0.0, "offset": 0.0 } }, { - "biome": "antarchy:sparse_ouranwood_forest", + "biome": "antarchy:ouranwood_forest", "parameters": { "temperature": 0.55, "humidity": 0.9, @@ -250,18 +274,6 @@ "offset": 0.0 } }, - { - "biome": "antarchy:torchflower_fields", - "parameters": { - "temperature": 0.76, - "humidity": 0.98, - "continentalness": 0.62, - "erosion": 0.18, - "weirdness": 0.32, - "depth": 0.0, - "offset": 0.0 - } - }, { "biome": "antarchy:butterfly_fields", "parameters": { @@ -310,18 +322,6 @@ "offset": 0.0 } }, - { - "biome": "antarchy:ouranwood_forest", - "parameters": { - "temperature": 0.45, - "humidity": 0.85, - "continentalness": 0.55, - "erosion": -0.15, - "weirdness": -0.75, - "depth": 0.5, - "offset": 0.0 - } - }, { "biome": "antarchy:ouranwood_forest", "parameters": { @@ -346,18 +346,6 @@ "offset": 0.0 } }, - { - "biome": "antarchy:ouranwood_forest", - "parameters": { - "temperature": 0.50, - "humidity": 0.87, - "continentalness": 0.70, - "erosion": -0.05, - "weirdness": 0.0, - "depth": 0.85, - "offset": 0.0 - } - }, { "biome": "antarchy:butterfly_fields", "parameters": { @@ -394,18 +382,6 @@ "offset": 0.0 } }, - { - "biome": "antarchy:torchflower_fields", - "parameters": { - "temperature": 0.74, - "humidity": 0.985, - "continentalness": 0.58, - "erosion": 0.16, - "weirdness": 0.24, - "depth": 0.5, - "offset": 0.0 - } - }, { "biome": "antarchy:elythia_meadow", "parameters": { diff --git a/common/src/main/resources/data/antarchy/loot_table/blocks/blush_moss_block.json b/common/src/main/resources/data/antarchy/loot_table/blocks/blush_moss_block.json new file mode 100644 index 00000000..566101fa --- /dev/null +++ b/common/src/main/resources/data/antarchy/loot_table/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/src/main/resources/data/antarchy/loot_table/blocks/blush_moss_carpet.json b/common/src/main/resources/data/antarchy/loot_table/blocks/blush_moss_carpet.json new file mode 100644 index 00000000..2c408c83 --- /dev/null +++ b/common/src/main/resources/data/antarchy/loot_table/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/src/main/resources/data/antarchy/loot_table/blocks/camellia.json b/common/src/main/resources/data/antarchy/loot_table/blocks/camellia.json new file mode 100644 index 00000000..897225ec --- /dev/null +++ b/common/src/main/resources/data/antarchy/loot_table/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/src/main/resources/data/antarchy/loot_table/blocks/corn_crop.json b/common/src/main/resources/data/antarchy/loot_table/blocks/corn_crop.json new file mode 100644 index 00000000..90a0d86e --- /dev/null +++ b/common/src/main/resources/data/antarchy/loot_table/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/src/main/resources/data/antarchy/loot_table/blocks/dead_star_coral.json b/common/src/main/resources/data/antarchy/loot_table/blocks/dead_star_coral.json new file mode 100644 index 00000000..d34f10d0 --- /dev/null +++ b/common/src/main/resources/data/antarchy/loot_table/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/src/main/resources/data/antarchy/loot_table/blocks/dead_star_coral_block.json b/common/src/main/resources/data/antarchy/loot_table/blocks/dead_star_coral_block.json new file mode 100644 index 00000000..06d2dfd0 --- /dev/null +++ b/common/src/main/resources/data/antarchy/loot_table/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/src/main/resources/data/antarchy/loot_table/blocks/dead_star_coral_fan.json b/common/src/main/resources/data/antarchy/loot_table/blocks/dead_star_coral_fan.json new file mode 100644 index 00000000..43218c24 --- /dev/null +++ b/common/src/main/resources/data/antarchy/loot_table/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/src/main/resources/data/antarchy/loot_table/blocks/dead_star_coral_wall_fan.json b/common/src/main/resources/data/antarchy/loot_table/blocks/dead_star_coral_wall_fan.json new file mode 100644 index 00000000..43218c24 --- /dev/null +++ b/common/src/main/resources/data/antarchy/loot_table/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/src/main/resources/data/antarchy/loot_table/blocks/giant_lily_pad.json b/common/src/main/resources/data/antarchy/loot_table/blocks/giant_lily_pad.json new file mode 100644 index 00000000..1737450b --- /dev/null +++ b/common/src/main/resources/data/antarchy/loot_table/blocks/giant_lily_pad.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:giant_lily_pad" + } + ] + } + ], + "random_sequence": "antarchy:blocks/giant_lily_pad" +} diff --git a/common/src/main/resources/data/antarchy/loot_table/blocks/hanging_peach.json b/common/src/main/resources/data/antarchy/loot_table/blocks/hanging_peach.json new file mode 100644 index 00000000..96e05f39 --- /dev/null +++ b/common/src/main/resources/data/antarchy/loot_table/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/src/main/resources/data/antarchy/loot_table/blocks/ouranwood_hanging_sign.json b/common/src/main/resources/data/antarchy/loot_table/blocks/ouranwood_hanging_sign.json index b5a2483d..abe13499 100644 --- a/common/src/main/resources/data/antarchy/loot_table/blocks/ouranwood_hanging_sign.json +++ b/common/src/main/resources/data/antarchy/loot_table/blocks/ouranwood_hanging_sign.json @@ -17,5 +17,5 @@ "rolls": 1.0 } ], - "random_sequence": "minecraft:blocks/jungle_hanging_sign" -} \ No newline at end of file + "random_sequence": "antarchy:blocks/ouranwood_hanging_sign" +} diff --git a/common/src/main/resources/data/antarchy/loot_table/blocks/ouranwood_sign.json b/common/src/main/resources/data/antarchy/loot_table/blocks/ouranwood_sign.json index 88c29f07..d74b95f4 100644 --- a/common/src/main/resources/data/antarchy/loot_table/blocks/ouranwood_sign.json +++ b/common/src/main/resources/data/antarchy/loot_table/blocks/ouranwood_sign.json @@ -17,5 +17,5 @@ "rolls": 1.0 } ], - "random_sequence": "minecraft:blocks/jungle_sign" -} \ No newline at end of file + "random_sequence": "antarchy:blocks/ouranwood_sign" +} diff --git a/common/src/main/resources/data/antarchy/loot_table/blocks/peach_button.json b/common/src/main/resources/data/antarchy/loot_table/blocks/peach_button.json new file mode 100644 index 00000000..74410c74 --- /dev/null +++ b/common/src/main/resources/data/antarchy/loot_table/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/src/main/resources/data/antarchy/loot_table/blocks/peach_door.json b/common/src/main/resources/data/antarchy/loot_table/blocks/peach_door.json new file mode 100644 index 00000000..c8b63c95 --- /dev/null +++ b/common/src/main/resources/data/antarchy/loot_table/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/src/main/resources/data/antarchy/loot_table/blocks/peach_fence.json b/common/src/main/resources/data/antarchy/loot_table/blocks/peach_fence.json new file mode 100644 index 00000000..31c7edd6 --- /dev/null +++ b/common/src/main/resources/data/antarchy/loot_table/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/src/main/resources/data/antarchy/loot_table/blocks/peach_fence_gate.json b/common/src/main/resources/data/antarchy/loot_table/blocks/peach_fence_gate.json new file mode 100644 index 00000000..fd509861 --- /dev/null +++ b/common/src/main/resources/data/antarchy/loot_table/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/src/main/resources/data/antarchy/loot_table/blocks/peach_hanging_sign.json b/common/src/main/resources/data/antarchy/loot_table/blocks/peach_hanging_sign.json new file mode 100644 index 00000000..a5d88061 --- /dev/null +++ b/common/src/main/resources/data/antarchy/loot_table/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/src/main/resources/data/antarchy/loot_table/blocks/peach_leaves.json b/common/src/main/resources/data/antarchy/loot_table/blocks/peach_leaves.json new file mode 100644 index 00000000..f1a2b349 --- /dev/null +++ b/common/src/main/resources/data/antarchy/loot_table/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/src/main/resources/data/antarchy/loot_table/blocks/peach_log.json b/common/src/main/resources/data/antarchy/loot_table/blocks/peach_log.json new file mode 100644 index 00000000..35a91254 --- /dev/null +++ b/common/src/main/resources/data/antarchy/loot_table/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/src/main/resources/data/antarchy/loot_table/blocks/peach_planks.json b/common/src/main/resources/data/antarchy/loot_table/blocks/peach_planks.json new file mode 100644 index 00000000..1bd313c7 --- /dev/null +++ b/common/src/main/resources/data/antarchy/loot_table/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/src/main/resources/data/antarchy/loot_table/blocks/peach_pressure_plate.json b/common/src/main/resources/data/antarchy/loot_table/blocks/peach_pressure_plate.json new file mode 100644 index 00000000..7f9121ef --- /dev/null +++ b/common/src/main/resources/data/antarchy/loot_table/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/src/main/resources/data/antarchy/loot_table/blocks/peach_sapling.json b/common/src/main/resources/data/antarchy/loot_table/blocks/peach_sapling.json new file mode 100644 index 00000000..7d35a420 --- /dev/null +++ b/common/src/main/resources/data/antarchy/loot_table/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/src/main/resources/data/antarchy/loot_table/blocks/peach_sign.json b/common/src/main/resources/data/antarchy/loot_table/blocks/peach_sign.json new file mode 100644 index 00000000..b71fbb4b --- /dev/null +++ b/common/src/main/resources/data/antarchy/loot_table/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/src/main/resources/data/antarchy/loot_table/blocks/peach_slab.json b/common/src/main/resources/data/antarchy/loot_table/blocks/peach_slab.json new file mode 100644 index 00000000..53e759d0 --- /dev/null +++ b/common/src/main/resources/data/antarchy/loot_table/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/src/main/resources/data/antarchy/loot_table/blocks/peach_stairs.json b/common/src/main/resources/data/antarchy/loot_table/blocks/peach_stairs.json new file mode 100644 index 00000000..3f81f57e --- /dev/null +++ b/common/src/main/resources/data/antarchy/loot_table/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/src/main/resources/data/antarchy/loot_table/blocks/peach_trapdoor.json b/common/src/main/resources/data/antarchy/loot_table/blocks/peach_trapdoor.json new file mode 100644 index 00000000..ee2c8580 --- /dev/null +++ b/common/src/main/resources/data/antarchy/loot_table/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/src/main/resources/data/antarchy/loot_table/blocks/peach_wood.json b/common/src/main/resources/data/antarchy/loot_table/blocks/peach_wood.json new file mode 100644 index 00000000..f1787698 --- /dev/null +++ b/common/src/main/resources/data/antarchy/loot_table/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/src/main/resources/data/antarchy/loot_table/blocks/spider_lily.json b/common/src/main/resources/data/antarchy/loot_table/blocks/spider_lily.json new file mode 100644 index 00000000..cf82c4af --- /dev/null +++ b/common/src/main/resources/data/antarchy/loot_table/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/src/main/resources/data/antarchy/loot_table/blocks/ouranwood_vine.json b/common/src/main/resources/data/antarchy/loot_table/blocks/star_coral.json similarity index 50% rename from common/src/main/resources/data/antarchy/loot_table/blocks/ouranwood_vine.json rename to common/src/main/resources/data/antarchy/loot_table/blocks/star_coral.json index 193598c4..f7397a97 100644 --- a/common/src/main/resources/data/antarchy/loot_table/blocks/ouranwood_vine.json +++ b/common/src/main/resources/data/antarchy/loot_table/blocks/star_coral.json @@ -2,24 +2,27 @@ "type": "minecraft:block", "pools": [ { + "rolls": 1, "conditions": [ { "condition": "minecraft:match_tool", "predicate": { - "items": [ - "minecraft:shears" - ] + "components": { + "minecraft:enchantments": { + "levels": { + "minecraft:silk_touch": 1 + } + } + } } } ], "entries": [ { "type": "minecraft:item", - "name": "antarchy:ouranwood_vine" + "name": "antarchy:star_coral" } - ], - "rolls": 1.0 + ] } - ], - "random_sequence": "antarchy:blocks/ouranwood_vine" + ] } diff --git a/common/src/main/resources/data/antarchy/loot_table/blocks/star_coral_block.json b/common/src/main/resources/data/antarchy/loot_table/blocks/star_coral_block.json new file mode 100644 index 00000000..726008ad --- /dev/null +++ b/common/src/main/resources/data/antarchy/loot_table/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/src/main/resources/data/antarchy/loot_table/blocks/star_coral_fan.json b/common/src/main/resources/data/antarchy/loot_table/blocks/star_coral_fan.json new file mode 100644 index 00000000..62bea052 --- /dev/null +++ b/common/src/main/resources/data/antarchy/loot_table/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/src/main/resources/data/antarchy/loot_table/blocks/star_coral_wall_fan.json b/common/src/main/resources/data/antarchy/loot_table/blocks/star_coral_wall_fan.json new file mode 100644 index 00000000..62bea052 --- /dev/null +++ b/common/src/main/resources/data/antarchy/loot_table/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/src/main/resources/data/antarchy/loot_table/blocks/stripped_peach_log.json b/common/src/main/resources/data/antarchy/loot_table/blocks/stripped_peach_log.json new file mode 100644 index 00000000..514158bb --- /dev/null +++ b/common/src/main/resources/data/antarchy/loot_table/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/src/main/resources/data/antarchy/loot_table/blocks/stripped_peach_wood.json b/common/src/main/resources/data/antarchy/loot_table/blocks/stripped_peach_wood.json new file mode 100644 index 00000000..91106444 --- /dev/null +++ b/common/src/main/resources/data/antarchy/loot_table/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/src/main/resources/data/antarchy/loot_table/blocks/wild_corn.json b/common/src/main/resources/data/antarchy/loot_table/blocks/wild_corn.json new file mode 100644 index 00000000..46f29bdc --- /dev/null +++ b/common/src/main/resources/data/antarchy/loot_table/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/src/main/resources/data/antarchy/loot_table/entities/kraken.json b/common/src/main/resources/data/antarchy/loot_table/entities/kraken.json index d99cdada..dbaa8297 100644 --- a/common/src/main/resources/data/antarchy/loot_table/entities/kraken.json +++ b/common/src/main/resources/data/antarchy/loot_table/entities/kraken.json @@ -18,6 +18,24 @@ "condition": "minecraft:killed_by_player" } ] + }, + { + "rolls": { + "type": "minecraft:uniform", + "min": 1, + "max": 2 + }, + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:kraken_tentacle" + } + ], + "conditions": [ + { + "condition": "minecraft:killed_by_player" + } + ] } ] } diff --git a/common/src/main/resources/data/antarchy/loot_table/entities/ouranwood_deer.json b/common/src/main/resources/data/antarchy/loot_table/entities/ouranwood_deer.json new file mode 100644 index 00000000..5bd5aaec --- /dev/null +++ b/common/src/main/resources/data/antarchy/loot_table/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/src/main/resources/data/antarchy/recipe/americanize.json b/common/src/main/resources/data/antarchy/recipe/americanize.json new file mode 100644 index 00000000..ebddb8ef --- /dev/null +++ b/common/src/main/resources/data/antarchy/recipe/americanize.json @@ -0,0 +1,4 @@ +{ + "type": "antarchy:americanize", + "category": "misc" +} diff --git a/common/src/main/resources/data/antarchy/recipe/blush_moss_carpet.json b/common/src/main/resources/data/antarchy/recipe/blush_moss_carpet.json new file mode 100644 index 00000000..0a73f660 --- /dev/null +++ b/common/src/main/resources/data/antarchy/recipe/blush_moss_carpet.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:blush_moss_block" + } + }, + "pattern": [ + "#", + "#" + ], + "result": { + "count": 3, + "id": "antarchy:blush_moss_carpet" + } +} diff --git a/common/src/main/resources/data/antarchy/recipe/cooked_corndog_from_smelting.json b/common/src/main/resources/data/antarchy/recipe/cooked_corndog_from_smelting.json new file mode 100644 index 00000000..8e6950c1 --- /dev/null +++ b/common/src/main/resources/data/antarchy/recipe/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": { + "id": "antarchy:cooked_corndog" + } +} diff --git a/common/src/main/resources/data/antarchy/recipe/cooked_corndog_from_smoking.json b/common/src/main/resources/data/antarchy/recipe/cooked_corndog_from_smoking.json new file mode 100644 index 00000000..b34b2896 --- /dev/null +++ b/common/src/main/resources/data/antarchy/recipe/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": { + "id": "antarchy:cooked_corndog" + } +} diff --git a/common/src/main/resources/data/antarchy/recipe/cooked_venison_from_smelting.json b/common/src/main/resources/data/antarchy/recipe/cooked_venison_from_smelting.json new file mode 100644 index 00000000..bd3b2c3a --- /dev/null +++ b/common/src/main/resources/data/antarchy/recipe/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": { + "id": "antarchy:cooked_venison" + } +} diff --git a/common/src/main/resources/data/antarchy/recipe/cooked_venison_from_smoking.json b/common/src/main/resources/data/antarchy/recipe/cooked_venison_from_smoking.json new file mode 100644 index 00000000..00e79a05 --- /dev/null +++ b/common/src/main/resources/data/antarchy/recipe/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": { + "id": "antarchy:cooked_venison" + } +} diff --git a/common/src/main/resources/data/antarchy/recipe/corn_seeds.json b/common/src/main/resources/data/antarchy/recipe/corn_seeds.json new file mode 100644 index 00000000..2afe7c63 --- /dev/null +++ b/common/src/main/resources/data/antarchy/recipe/corn_seeds.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "item": "antarchy:corn" + } + ], + "result": { + "count": 3, + "id": "antarchy:corn_seeds" + } +} diff --git a/common/src/main/resources/data/antarchy/recipe/cornbread.json b/common/src/main/resources/data/antarchy/recipe/cornbread.json new file mode 100644 index 00000000..3a6e3fbb --- /dev/null +++ b/common/src/main/resources/data/antarchy/recipe/cornbread.json @@ -0,0 +1,27 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "food", + "key": { + "C": { + "item": "antarchy:corn" + }, + "G": { + "item": "minecraft:egg" + }, + "H": { + "item": "minecraft:honey_bottle" + }, + "W": { + "item": "minecraft:wheat" + } + }, + "pattern": [ + " H ", + "CGC", + "WWW" + ], + "result": { + "count": 1, + "id": "antarchy:cornbread" + } +} diff --git a/common/src/main/resources/data/antarchy/recipe/krakens_grasp.json b/common/src/main/resources/data/antarchy/recipe/krakens_grasp.json new file mode 100644 index 00000000..45d4c2d6 --- /dev/null +++ b/common/src/main/resources/data/antarchy/recipe/krakens_grasp.json @@ -0,0 +1,14 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "pattern": [ + "EEE", + " T ", + " T " + ], + "key": { + "E": { "item": "antarchy:kraken_tooth" }, + "T": { "item": "antarchy:kraken_tentacle" } + }, + "result": { "id": "antarchy:krakens_grasp", "count": 1 } +} diff --git a/common/src/main/resources/data/antarchy/recipe/miners_dream.json.disabled b/common/src/main/resources/data/antarchy/recipe/miners_dream.json.disabled new file mode 100644 index 00000000..b35b1c80 --- /dev/null +++ b/common/src/main/resources/data/antarchy/recipe/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": { + "id": "antarchy:miners_dream", + "count": 1 + } +} diff --git a/common/src/main/resources/data/antarchy/recipe/peach/peach_boat.json b/common/src/main/resources/data/antarchy/recipe/peach/peach_boat.json new file mode 100644 index 00000000..9007e56b --- /dev/null +++ b/common/src/main/resources/data/antarchy/recipe/peach/peach_boat.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "key": { + "#": { + "item": "antarchy:peach_planks" + } + }, + "pattern": [ + "# #", + "###" + ], + "result": { + "count": 1, + "id": "antarchy:peach_boat" + } +} + diff --git a/common/src/main/resources/data/antarchy/recipe/peach/peach_button.json b/common/src/main/resources/data/antarchy/recipe/peach/peach_button.json new file mode 100644 index 00000000..385fea05 --- /dev/null +++ b/common/src/main/resources/data/antarchy/recipe/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, + "id": "antarchy:peach_button" + } +} diff --git a/common/src/main/resources/data/antarchy/recipe/peach/peach_chest_boat.json b/common/src/main/resources/data/antarchy/recipe/peach/peach_chest_boat.json new file mode 100644 index 00000000..c865282a --- /dev/null +++ b/common/src/main/resources/data/antarchy/recipe/peach/peach_chest_boat.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "equipment", + "ingredients": [ + { + "item": "antarchy:peach_boat" + }, + { + "item": "minecraft:chest" + } + ], + "result": { + "count": 1, + "id": "antarchy:peach_chest_boat" + } +} + diff --git a/common/src/main/resources/data/antarchy/recipe/peach/peach_door.json b/common/src/main/resources/data/antarchy/recipe/peach/peach_door.json new file mode 100644 index 00000000..d912173b --- /dev/null +++ b/common/src/main/resources/data/antarchy/recipe/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, + "id": "antarchy:peach_door" + } +} diff --git a/common/src/main/resources/data/antarchy/recipe/peach/peach_fence.json b/common/src/main/resources/data/antarchy/recipe/peach/peach_fence.json new file mode 100644 index 00000000..f86ace23 --- /dev/null +++ b/common/src/main/resources/data/antarchy/recipe/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, + "id": "antarchy:peach_fence" + } +} diff --git a/common/src/main/resources/data/antarchy/recipe/peach/peach_fence_gate.json b/common/src/main/resources/data/antarchy/recipe/peach/peach_fence_gate.json new file mode 100644 index 00000000..7954228f --- /dev/null +++ b/common/src/main/resources/data/antarchy/recipe/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, + "id": "antarchy:peach_fence_gate" + } +} diff --git a/common/src/main/resources/data/antarchy/recipe/peach/peach_hanging_sign.json b/common/src/main/resources/data/antarchy/recipe/peach/peach_hanging_sign.json new file mode 100644 index 00000000..8fcc4847 --- /dev/null +++ b/common/src/main/resources/data/antarchy/recipe/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, + "id": "antarchy:peach_hanging_sign" + } +} diff --git a/common/src/main/resources/data/antarchy/recipe/peach/peach_planks.json b/common/src/main/resources/data/antarchy/recipe/peach/peach_planks.json new file mode 100644 index 00000000..d0892886 --- /dev/null +++ b/common/src/main/resources/data/antarchy/recipe/peach/peach_planks.json @@ -0,0 +1,14 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "building", + "group": "planks", + "ingredients": [ + { + "tag": "antarchy:peach_logs" + } + ], + "result": { + "count": 4, + "id": "antarchy:peach_planks" + } +} diff --git a/common/src/main/resources/data/antarchy/recipe/peach/peach_pressure_plate.json b/common/src/main/resources/data/antarchy/recipe/peach/peach_pressure_plate.json new file mode 100644 index 00000000..09fb8352 --- /dev/null +++ b/common/src/main/resources/data/antarchy/recipe/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, + "id": "antarchy:peach_pressure_plate" + } +} diff --git a/common/src/main/resources/data/antarchy/recipe/peach/peach_sign.json b/common/src/main/resources/data/antarchy/recipe/peach/peach_sign.json new file mode 100644 index 00000000..cc36aa0d --- /dev/null +++ b/common/src/main/resources/data/antarchy/recipe/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, + "id": "antarchy:peach_sign" + } +} diff --git a/common/src/main/resources/data/antarchy/recipe/peach/peach_slab.json b/common/src/main/resources/data/antarchy/recipe/peach/peach_slab.json new file mode 100644 index 00000000..7cfe2b41 --- /dev/null +++ b/common/src/main/resources/data/antarchy/recipe/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, + "id": "antarchy:peach_slab" + } +} diff --git a/common/src/main/resources/data/antarchy/recipe/peach/peach_stairs.json b/common/src/main/resources/data/antarchy/recipe/peach/peach_stairs.json new file mode 100644 index 00000000..84cad977 --- /dev/null +++ b/common/src/main/resources/data/antarchy/recipe/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, + "id": "antarchy:peach_stairs" + } +} diff --git a/common/src/main/resources/data/antarchy/recipe/peach/peach_trapdoor.json b/common/src/main/resources/data/antarchy/recipe/peach/peach_trapdoor.json new file mode 100644 index 00000000..3332467d --- /dev/null +++ b/common/src/main/resources/data/antarchy/recipe/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, + "id": "antarchy:peach_trapdoor" + } +} diff --git a/common/src/main/resources/data/antarchy/recipe/peach/peach_wood.json b/common/src/main/resources/data/antarchy/recipe/peach/peach_wood.json new file mode 100644 index 00000000..5fd213ea --- /dev/null +++ b/common/src/main/resources/data/antarchy/recipe/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, + "id": "antarchy:peach_wood" + } +} diff --git a/common/src/main/resources/data/antarchy/recipe/peach/stripped_peach_wood.json b/common/src/main/resources/data/antarchy/recipe/peach/stripped_peach_wood.json new file mode 100644 index 00000000..6c28a618 --- /dev/null +++ b/common/src/main/resources/data/antarchy/recipe/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, + "id": "antarchy:stripped_peach_wood" + } +} diff --git a/common/src/main/resources/data/antarchy/recipe/peach_pie.json b/common/src/main/resources/data/antarchy/recipe/peach_pie.json new file mode 100644 index 00000000..9a226ee7 --- /dev/null +++ b/common/src/main/resources/data/antarchy/recipe/peach_pie.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "food", + "ingredients": [ + { + "item": "antarchy:peach" + }, + { + "item": "minecraft:sugar" + }, + { + "item": "minecraft:egg" + } + ], + "result": { + "count": 1, + "id": "antarchy:peach_pie" + } +} diff --git a/common/src/main/resources/data/antarchy/recipe/pink_dye_from_camellia.json b/common/src/main/resources/data/antarchy/recipe/pink_dye_from_camellia.json new file mode 100644 index 00000000..2567622d --- /dev/null +++ b/common/src/main/resources/data/antarchy/recipe/pink_dye_from_camellia.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "item": "antarchy:camellia" + } + ], + "result": { + "count": 2, + "id": "minecraft:pink_dye" + } +} diff --git a/common/src/main/resources/data/antarchy/recipe/popcorn_from_smelting.json b/common/src/main/resources/data/antarchy/recipe/popcorn_from_smelting.json new file mode 100644 index 00000000..145d1a82 --- /dev/null +++ b/common/src/main/resources/data/antarchy/recipe/popcorn_from_smelting.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:smelting", + "category": "food", + "cookingtime": 200, + "experience": 0.1, + "ingredient": { + "item": "antarchy:corn_seeds" + }, + "result": { + "id": "antarchy:popcorn" + } +} diff --git a/common/src/main/resources/data/antarchy/recipe/popcorn_from_smoking.json b/common/src/main/resources/data/antarchy/recipe/popcorn_from_smoking.json new file mode 100644 index 00000000..529783bb --- /dev/null +++ b/common/src/main/resources/data/antarchy/recipe/popcorn_from_smoking.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:smoking", + "category": "food", + "cookingtime": 100, + "experience": 0.1, + "ingredient": { + "item": "antarchy:corn_seeds" + }, + "result": { + "id": "antarchy:popcorn" + } +} diff --git a/common/src/main/resources/data/antarchy/recipe/raw_corndog.json b/common/src/main/resources/data/antarchy/recipe/raw_corndog.json new file mode 100644 index 00000000..6d5e09fb --- /dev/null +++ b/common/src/main/resources/data/antarchy/recipe/raw_corndog.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "food", + "key": { + "#": { + "tag": "antarchy:corndog_meats" + }, + "C": { + "item": "antarchy:corn" + }, + "S": { + "item": "minecraft:stick" + } + }, + "pattern": [ + "CCC", + " # ", + " S " + ], + "result": { + "count": 1, + "id": "antarchy:raw_corndog" + } +} diff --git a/common/src/main/resources/data/antarchy/recipe/red_dye_from_spider_lily.json b/common/src/main/resources/data/antarchy/recipe/red_dye_from_spider_lily.json new file mode 100644 index 00000000..b2c55b48 --- /dev/null +++ b/common/src/main/resources/data/antarchy/recipe/red_dye_from_spider_lily.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "item": "antarchy:spider_lily" + } + ], + "result": { + "count": 1, + "id": "minecraft:red_dye" + } +} diff --git a/common/src/main/resources/data/antarchy/recipe/rpo_launcher.json b/common/src/main/resources/data/antarchy/recipe/rpo_launcher.json new file mode 100644 index 00000000..02ea37b5 --- /dev/null +++ b/common/src/main/resources/data/antarchy/recipe/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": { + "id": "antarchy:rpo_launcher", + "count": 1 + } +} diff --git a/common/src/main/resources/data/antarchy/tags/block/blush_moss_replaceable.json b/common/src/main/resources/data/antarchy/tags/block/blush_moss_replaceable.json new file mode 100644 index 00000000..9ccd3add --- /dev/null +++ b/common/src/main/resources/data/antarchy/tags/block/blush_moss_replaceable.json @@ -0,0 +1,8 @@ +{ + "values": [ + "#minecraft:moss_replaceable", + "antarchy:nyxite", + "minecraft:blackstone", + "antarchy:blush_moss_block" + ] +} diff --git a/common/src/main/resources/data/antarchy/tags/block/coral_blocks.json b/common/src/main/resources/data/antarchy/tags/block/coral_blocks.json new file mode 100644 index 00000000..731c04f2 --- /dev/null +++ b/common/src/main/resources/data/antarchy/tags/block/coral_blocks.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:star_coral_block" + ] +} diff --git a/common/src/main/resources/data/antarchy/tags/block/coral_plants.json b/common/src/main/resources/data/antarchy/tags/block/coral_plants.json new file mode 100644 index 00000000..964b717d --- /dev/null +++ b/common/src/main/resources/data/antarchy/tags/block/coral_plants.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:star_coral" + ] +} diff --git a/common/src/main/resources/data/antarchy/tags/block/corals.json b/common/src/main/resources/data/antarchy/tags/block/corals.json new file mode 100644 index 00000000..d900f62f --- /dev/null +++ b/common/src/main/resources/data/antarchy/tags/block/corals.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "antarchy:star_coral", + "antarchy:star_coral_fan" + ] +} diff --git a/common/src/main/resources/data/antarchy/tags/block/miners_dream_carvable.json b/common/src/main/resources/data/antarchy/tags/block/miners_dream_carvable.json new file mode 100644 index 00000000..6f7d26ee --- /dev/null +++ b/common/src/main/resources/data/antarchy/tags/block/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/src/main/resources/data/antarchy/tags/block/peach_logs.json b/common/src/main/resources/data/antarchy/tags/block/peach_logs.json new file mode 100644 index 00000000..5a1d9ec3 --- /dev/null +++ b/common/src/main/resources/data/antarchy/tags/block/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/src/main/resources/data/antarchy/tags/block/wall_corals.json b/common/src/main/resources/data/antarchy/tags/block/wall_corals.json new file mode 100644 index 00000000..a42a8397 --- /dev/null +++ b/common/src/main/resources/data/antarchy/tags/block/wall_corals.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:star_coral_wall_fan" + ] +} diff --git a/common/src/main/resources/data/antarchy/tags/entity_type/basilisk_prey.json b/common/src/main/resources/data/antarchy/tags/entity_type/basilisk_prey.json index cca32e6b..73079119 100644 --- a/common/src/main/resources/data/antarchy/tags/entity_type/basilisk_prey.json +++ b/common/src/main/resources/data/antarchy/tags/entity_type/basilisk_prey.json @@ -7,6 +7,7 @@ "minecraft:sheep", "minecraft:cow", "minecraft:mooshroom", + "minecraft:frog", "antarchy:flying_squirrel", "antarchy:moleworm", "antarchy:red_ant", @@ -15,6 +16,7 @@ "antarchy:apple_cow", "antarchy:golden_apple_cow", "antarchy:enchanted_golden_apple_cow", - "antarchy:caterpillar" + "antarchy:caterpillar", + "antarchy:ouranwood_deer" ] } diff --git a/common/src/main/resources/data/antarchy/tags/entity_type/dread_hallucination_mobs.json b/common/src/main/resources/data/antarchy/tags/entity_type/dread_hallucination_mobs.json index b78de163..c3129700 100644 --- a/common/src/main/resources/data/antarchy/tags/entity_type/dread_hallucination_mobs.json +++ b/common/src/main/resources/data/antarchy/tags/entity_type/dread_hallucination_mobs.json @@ -9,6 +9,9 @@ "minecraft:wither", "minecraft:creeper", "minecraft:skeleton", - "minecraft:spider" + "minecraft:spider", + "antarchy:toreterror", + "antarchy:creeping_horror", + "antarchy:lurking_terror" ] } diff --git a/common/src/main/resources/data/antarchy/tags/entity_type/frog_glimmer_no_eat.json b/common/src/main/resources/data/antarchy/tags/entity_type/frog_glimmer_no_eat.json new file mode 100644 index 00000000..abe11627 --- /dev/null +++ b/common/src/main/resources/data/antarchy/tags/entity_type/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/src/main/resources/data/antarchy/tags/fluids/giant_lily_pad_supporting_fluids.json b/common/src/main/resources/data/antarchy/tags/fluids/giant_lily_pad_supporting_fluids.json new file mode 100644 index 00000000..db6013a5 --- /dev/null +++ b/common/src/main/resources/data/antarchy/tags/fluids/giant_lily_pad_supporting_fluids.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "minecraft:water", + "antarchy:lumen" + ] +} diff --git a/common/src/main/resources/data/antarchy/tags/fluids/lumen.json b/common/src/main/resources/data/antarchy/tags/fluids/lumen.json new file mode 100644 index 00000000..f44595c4 --- /dev/null +++ b/common/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/src/main/resources/data/antarchy/tags/item/corndog_meats.json b/common/src/main/resources/data/antarchy/tags/item/corndog_meats.json new file mode 100644 index 00000000..e7b7233e --- /dev/null +++ b/common/src/main/resources/data/antarchy/tags/item/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/src/main/resources/data/antarchy/tags/item/glimmer_augment_ant.json b/common/src/main/resources/data/antarchy/tags/item/glimmer_augment_ant.json new file mode 100644 index 00000000..2bee141d --- /dev/null +++ b/common/src/main/resources/data/antarchy/tags/item/glimmer_augment_ant.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:bread" + ] +} diff --git a/common/src/main/resources/data/antarchy/tags/item/glimmer_augment_apple_cow.json b/common/src/main/resources/data/antarchy/tags/item/glimmer_augment_apple_cow.json new file mode 100644 index 00000000..3fa00a6b --- /dev/null +++ b/common/src/main/resources/data/antarchy/tags/item/glimmer_augment_apple_cow.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:apple" + ] +} diff --git a/common/src/main/resources/data/antarchy/tags/item/glimmer_augment_elka.json b/common/src/main/resources/data/antarchy/tags/item/glimmer_augment_elka.json new file mode 100644 index 00000000..b11da3ed --- /dev/null +++ b/common/src/main/resources/data/antarchy/tags/item/glimmer_augment_elka.json @@ -0,0 +1,5 @@ +{ + "values": [ + "antarchy:peach" + ] +} diff --git a/common/src/main/resources/data/antarchy/tags/item/glimmer_augment_frog.json b/common/src/main/resources/data/antarchy/tags/item/glimmer_augment_frog.json new file mode 100644 index 00000000..d9233809 --- /dev/null +++ b/common/src/main/resources/data/antarchy/tags/item/glimmer_augment_frog.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:slime_ball" + ] +} diff --git a/common/src/main/resources/data/antarchy/tags/item/glimmer_augment_ouranwood_deer.json b/common/src/main/resources/data/antarchy/tags/item/glimmer_augment_ouranwood_deer.json new file mode 100644 index 00000000..f0885728 --- /dev/null +++ b/common/src/main/resources/data/antarchy/tags/item/glimmer_augment_ouranwood_deer.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:glow_berries" + ] +} diff --git a/common/src/main/resources/data/antarchy/tags/item/hfcs_cannot_americanize.json b/common/src/main/resources/data/antarchy/tags/item/hfcs_cannot_americanize.json new file mode 100644 index 00000000..86dde3df --- /dev/null +++ b/common/src/main/resources/data/antarchy/tags/item/hfcs_cannot_americanize.json @@ -0,0 +1,3 @@ +{ + "values": [] +} diff --git a/common/src/main/resources/data/antarchy/tags/item/multishot_enchantable.json b/common/src/main/resources/data/antarchy/tags/item/multishot_enchantable.json index 6fd60b67..1b6b505d 100644 --- a/common/src/main/resources/data/antarchy/tags/item/multishot_enchantable.json +++ b/common/src/main/resources/data/antarchy/tags/item/multishot_enchantable.json @@ -2,6 +2,7 @@ "replace": false, "values": [ "#minecraft:enchantable/crossbow", - "antarchy:squidzooka" + "antarchy:squidzooka", + "antarchy:rpo_launcher" ] } diff --git a/common/src/main/resources/data/antarchy/tags/item/glimmer_food.json b/common/src/main/resources/data/antarchy/tags/item/ouranwood_deer_food.json similarity index 100% rename from common/src/main/resources/data/antarchy/tags/item/glimmer_food.json rename to common/src/main/resources/data/antarchy/tags/item/ouranwood_deer_food.json diff --git a/common/src/main/resources/data/antarchy/tags/item/peach_logs.json b/common/src/main/resources/data/antarchy/tags/item/peach_logs.json new file mode 100644 index 00000000..5a1d9ec3 --- /dev/null +++ b/common/src/main/resources/data/antarchy/tags/item/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/src/main/resources/data/antarchy/tags/item/roots.json b/common/src/main/resources/data/antarchy/tags/item/roots.json new file mode 100644 index 00000000..149abdd0 --- /dev/null +++ b/common/src/main/resources/data/antarchy/tags/item/roots.json @@ -0,0 +1,8 @@ +{ + "replace": false, + "values": [ + "minecraft:hanging_roots", + "minecraft:crimson_roots", + "minecraft:warped_roots" + ] +} diff --git a/common/src/main/resources/data/antarchy/tags/item/venison_foods.json b/common/src/main/resources/data/antarchy/tags/item/venison_foods.json new file mode 100644 index 00000000..43bb9bec --- /dev/null +++ b/common/src/main/resources/data/antarchy/tags/item/venison_foods.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "antarchy:raw_venison", + "antarchy:cooked_venison" + ] +} diff --git a/common/src/main/resources/data/antarchy/tags/worldgen/biome/cloud_shark_spawn_biomes.json b/common/src/main/resources/data/antarchy/tags/worldgen/biome/cloud_shark_spawn_biomes.json index ce383501..6968700c 100644 --- a/common/src/main/resources/data/antarchy/tags/worldgen/biome/cloud_shark_spawn_biomes.json +++ b/common/src/main/resources/data/antarchy/tags/worldgen/biome/cloud_shark_spawn_biomes.json @@ -1,7 +1,6 @@ { "replace": false, "values": [ - "antarchy:ouranwood_forest", - "antarchy:elythia_meadow" + "antarchy:cloud_sea" ] } diff --git a/common/src/main/resources/data/antarchy/tags/worldgen/biome/elythia_firefly_particle_biomes.json b/common/src/main/resources/data/antarchy/tags/worldgen/biome/elythia_firefly_particle_biomes.json index ff348954..6e759e17 100644 --- a/common/src/main/resources/data/antarchy/tags/worldgen/biome/elythia_firefly_particle_biomes.json +++ b/common/src/main/resources/data/antarchy/tags/worldgen/biome/elythia_firefly_particle_biomes.json @@ -2,9 +2,9 @@ "replace": false, "values": [ "antarchy:elythia_meadow", - "antarchy:torchflower_fields", "antarchy:butterfly_fields", "antarchy:ouranwood_forest", + "antarchy:peach_forest", "antarchy:sparse_ouranwood_forest" ] } diff --git a/common/src/main/resources/data/antarchy/tags/worldgen/biome/flying_squirrel_spawn_biomes.json b/common/src/main/resources/data/antarchy/tags/worldgen/biome/flying_squirrel_spawn_biomes.json index 893e9545..f0e41d94 100644 --- a/common/src/main/resources/data/antarchy/tags/worldgen/biome/flying_squirrel_spawn_biomes.json +++ b/common/src/main/resources/data/antarchy/tags/worldgen/biome/flying_squirrel_spawn_biomes.json @@ -1,6 +1,7 @@ { "replace": false, "values": [ - "antarchy:ouranwood_forest" + "antarchy:ouranwood_forest", + "antarchy:peach_forest" ] } diff --git a/common/src/main/resources/data/antarchy/tags/worldgen/biome/has_star_coral.json b/common/src/main/resources/data/antarchy/tags/worldgen/biome/has_star_coral.json new file mode 100644 index 00000000..d70e35cc --- /dev/null +++ b/common/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/src/main/resources/data/antarchy/tags/worldgen/biome/honeyed_apple_cow_spawn_biomes.json b/common/src/main/resources/data/antarchy/tags/worldgen/biome/honeyed_apple_cow_spawn_biomes.json deleted file mode 100644 index 8b04fba0..00000000 --- a/common/src/main/resources/data/antarchy/tags/worldgen/biome/honeyed_apple_cow_spawn_biomes.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "replace": false, - "values": [ - "#c:is_plains", - "#c:is_forest", - "#c:is_taiga", - "antarchy:ouranwood_forest", - "antarchy:elythia_meadow" - ] -} diff --git a/common/src/main/resources/data/antarchy/tags/worldgen/biome/is_elythia.json b/common/src/main/resources/data/antarchy/tags/worldgen/biome/is_elythia.json index 8e11611d..e115fe0e 100644 --- a/common/src/main/resources/data/antarchy/tags/worldgen/biome/is_elythia.json +++ b/common/src/main/resources/data/antarchy/tags/worldgen/biome/is_elythia.json @@ -5,9 +5,10 @@ "antarchy:elythia_lush_caves", "antarchy:elythia_meadow", "antarchy:elythia_river", - "antarchy:torchflower_fields", "antarchy:moleworm_caves", "antarchy:ouranwood_forest", + "antarchy:peach_forest", + "antarchy:glimmering_pools", "antarchy:sparse_ouranwood_forest", "antarchy:elythia_ocean", "antarchy:elythia_coral_spikes", diff --git a/common/src/main/resources/data/antarchy/tags/worldgen/biome/wild_corn_spawn_biomes.json b/common/src/main/resources/data/antarchy/tags/worldgen/biome/wild_corn_spawn_biomes.json new file mode 100644 index 00000000..44db277a --- /dev/null +++ b/common/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/src/main/resources/data/antarchy/worldgen/biome/butterfly_fields.json b/common/src/main/resources/data/antarchy/worldgen/biome/butterfly_fields.json index e876c597..27fac466 100644 --- a/common/src/main/resources/data/antarchy/worldgen/biome/butterfly_fields.json +++ b/common/src/main/resources/data/antarchy/worldgen/biome/butterfly_fields.json @@ -64,14 +64,14 @@ ], [] ], - "creature_spawn_probability": 0.8, + "creature_spawn_probability": 0.20, "spawners": { "monster": [ ], "creature": [ { "type": "antarchy:caterpillar", - "weight": 90, + "weight": 30, "minCount": 6, "maxCount": 12 }, @@ -84,8 +84,8 @@ { "type": "antarchy:enchanted_golden_apple_cow", "weight": 4, - "minCount": 2, - "maxCount": 3 + "minCount": 1, + "maxCount": 1 } ], "ambient": [ diff --git a/common/src/main/resources/data/antarchy/worldgen/biome/elythia_meadow.json b/common/src/main/resources/data/antarchy/worldgen/biome/elythia_meadow.json index 52a9652b..860df444 100644 --- a/common/src/main/resources/data/antarchy/worldgen/biome/elythia_meadow.json +++ b/common/src/main/resources/data/antarchy/worldgen/biome/elythia_meadow.json @@ -18,9 +18,17 @@ } }, "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": { @@ -101,6 +109,12 @@ "minCount": 1, "maxCount": 3 }, + { + "type": "antarchy:glimmer", + "weight": 2, + "minCount": 1, + "maxCount": 1 + } ], "ambient": [ { diff --git a/common/src/main/resources/data/antarchy/worldgen/biome/fungal_ouranwood_forest.json b/common/src/main/resources/data/antarchy/worldgen/biome/fungal_ouranwood_forest.json index 356f0ce0..567e1843 100644 --- a/common/src/main/resources/data/antarchy/worldgen/biome/fungal_ouranwood_forest.json +++ b/common/src/main/resources/data/antarchy/worldgen/biome/fungal_ouranwood_forest.json @@ -23,7 +23,12 @@ "offset": 2.0 } }, - "spawn_costs": {}, + "spawn_costs": { + "antarchy:glimmer": { + "energy_budget": 0.1, + "charge": 9 + } + }, "carvers": { "air": [], "liquid": [] @@ -73,6 +78,12 @@ "spawners": { "monster": [], "creature": [ + { + "type": "minecraft:frog", + "weight": 3, + "minCount": 1, + "maxCount": 1 + }, { "type": "antarchy:caterpillar", "weight": 5, @@ -85,6 +96,18 @@ "minCount": 1, "maxCount": 2 }, + { + "type": "antarchy:ouranwood_deer", + "weight": 5, + "minCount": 1, + "maxCount": 2 + }, + { + "type": "antarchy:glimmer", + "weight": 1, + "minCount": 1, + "maxCount": 1 + } ], "ambient": [ { diff --git a/common/src/main/resources/data/antarchy/worldgen/biome/torchflower_fields.json b/common/src/main/resources/data/antarchy/worldgen/biome/glimmering_pools.json similarity index 73% rename from common/src/main/resources/data/antarchy/worldgen/biome/torchflower_fields.json rename to common/src/main/resources/data/antarchy/worldgen/biome/glimmering_pools.json index 3d3c7ff9..bf145eac 100644 --- a/common/src/main/resources/data/antarchy/worldgen/biome/torchflower_fields.json +++ b/common/src/main/resources/data/antarchy/worldgen/biome/glimmering_pools.json @@ -1,18 +1,18 @@ { "has_precipitation": false, - "temperature": 0.84, + "temperature": 0.76, "downfall": 1.0, "effects": { "fog_color": 8084735, - "water_color": 5021432, - "water_fog_color": 2502722, + "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.basalt_deltas.mood", - "tick_delay": 8000, + "sound": "minecraft:ambient.crimson_forest.mood", + "tick_delay": 6000, "block_search_extent": 8, "offset": 2.0 } @@ -24,7 +24,11 @@ }, "features": [ [], - [], + [ + "antarchy:lumen_pools", + "antarchy:lumen_streams", + "antarchy:lumen_lily_pads" + ], [], [], [], @@ -54,39 +58,35 @@ ], [], [ - "antarchy:elythia_torchflower_fields_flora", + "antarchy:ouranwood_trees_sparse", + "antarchy:elythia_forest_flora", "antarchy:elythia_brown_ant_nests", "antarchy:elythia_rainbow_ant_nests" ], [] ], - "creature_spawn_probability": 0.08, + "creature_spawn_probability": 0.4, "spawners": { "monster": [], "creature": [ { - "type": "antarchy:golden_apple_cow", - "weight": 14, - "minCount": 2, - "maxCount": 4 - }, - { - "type": "antarchy:enchanted_golden_apple_cow", - "weight": 8, - "minCount": 2, - "maxCount": 3 - } - ], - "ambient": [ - { - "type": "antarchy:butterfly", - "weight": 24, + "type": "antarchy:glimmer", + "weight": 36, "minCount": 3, "maxCount": 6 } ], + "ambient": [ + ], "axolotls": [], - "underground_water_creature": [], + "underground_water_creature": [ + { + "type": "minecraft:glow_squid", + "weight": 14, + "minCount": 2, + "maxCount": 4 + } + ], "water_creature": [], "water_ambient": [], "misc": [] diff --git a/common/src/main/resources/data/antarchy/worldgen/biome/ouranwood_forest.json b/common/src/main/resources/data/antarchy/worldgen/biome/ouranwood_forest.json index a9bc5c29..bcc3929b 100644 --- a/common/src/main/resources/data/antarchy/worldgen/biome/ouranwood_forest.json +++ b/common/src/main/resources/data/antarchy/worldgen/biome/ouranwood_forest.json @@ -27,6 +27,10 @@ "antarchy:basilisk": { "energy_budget": 0.1, "charge": 14.0 + }, + "antarchy:glimmer": { + "energy_budget": 0.1, + "charge": 9 } }, "carvers": { @@ -74,7 +78,7 @@ "antarchy:triffid_patch" ] ], - "creature_spawn_probability": 0.05, + "creature_spawn_probability": 0.07, "spawners": { "monster": [ { @@ -85,6 +89,12 @@ } ], "creature": [ + { + "type": "minecraft:frog", + "weight": 3, + "minCount": 1, + "maxCount": 1 + }, { "type": "antarchy:caterpillar", "weight": 6, @@ -97,6 +107,18 @@ "minCount": 1, "maxCount": 1 }, + { + "type": "antarchy:ouranwood_deer", + "weight": 6, + "minCount": 1, + "maxCount": 2 + }, + { + "type": "antarchy:glimmer", + "weight": 1, + "minCount": 1, + "maxCount": 1 + } ], "ambient": [ ], diff --git a/common/src/main/resources/data/antarchy/worldgen/biome/peach_forest.json b/common/src/main/resources/data/antarchy/worldgen/biome/peach_forest.json new file mode 100644 index 00000000..26bd17d6 --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/biome/peach_forest.json @@ -0,0 +1,110 @@ +{ + "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_medium", + "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" + ], + [] + ], + "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/src/main/resources/data/antarchy/worldgen/biome/sparse_ouranwood_forest.json b/common/src/main/resources/data/antarchy/worldgen/biome/sparse_ouranwood_forest.json index 59bb1f89..d3018dd7 100644 --- a/common/src/main/resources/data/antarchy/worldgen/biome/sparse_ouranwood_forest.json +++ b/common/src/main/resources/data/antarchy/worldgen/biome/sparse_ouranwood_forest.json @@ -1,101 +1,152 @@ { - "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" + "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" + } + }, + "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 } - }, - "mood_sound": { - "sound": "minecraft:ambient.crimson_forest.mood", - "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_medium", - "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 - } - ], - "ambient": [ - { - "type": "antarchy:butterfly", - "weight": 7, - "minCount": 1, - "maxCount": 2 - } - ], - "axolotls": [], - "underground_water_creature": [], - "water_creature": [], - "water_ambient": [], - "misc": [] - } + + }, + "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_medium", + "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/src/main/resources/data/antarchy/worldgen/configured_feature/blush_moss_patch.json b/common/src/main/resources/data/antarchy/worldgen/configured_feature/blush_moss_patch.json new file mode 100644 index 00000000..1c3ecfe4 --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/configured_feature/blush_moss_patch.json @@ -0,0 +1,27 @@ +{ + "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", + "max_inclusive": 7, + "min_inclusive": 4 + } + } +} diff --git a/common/src/main/resources/data/antarchy/worldgen/configured_feature/blush_moss_patch_bonemeal.json b/common/src/main/resources/data/antarchy/worldgen/configured_feature/blush_moss_patch_bonemeal.json new file mode 100644 index 00000000..1c3ecfe4 --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/configured_feature/blush_moss_patch_bonemeal.json @@ -0,0 +1,27 @@ +{ + "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", + "max_inclusive": 7, + "min_inclusive": 4 + } + } +} diff --git a/common/src/main/resources/data/antarchy/worldgen/configured_feature/blush_moss_vegetation.json b/common/src/main/resources/data/antarchy/worldgen/configured_feature/blush_moss_vegetation.json new file mode 100644 index 00000000..bcf78e9a --- /dev/null +++ b/common/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/src/main/resources/data/antarchy/worldgen/configured_feature/corn_patch.json b/common/src/main/resources/data/antarchy/worldgen/configured_feature/corn_patch.json new file mode 100644 index 00000000..d6fd8f3c --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/configured_feature/corn_patch.json @@ -0,0 +1,4 @@ +{ + "type": "antarchy:corn_patch", + "config": {} +} diff --git a/common/src/main/resources/data/antarchy/worldgen/configured_feature/elythia_torchflower_fields_flora.json b/common/src/main/resources/data/antarchy/worldgen/configured_feature/elythia_torchflower_fields_flora.json deleted file mode 100644 index 6ac9970b..00000000 --- a/common/src/main/resources/data/antarchy/worldgen/configured_feature/elythia_torchflower_fields_flora.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "type": "antarchy:elythia_torchflower_fields_flora", - "config": {} -} diff --git a/common/src/main/resources/data/antarchy/worldgen/configured_feature/lumen_lily_pads.json b/common/src/main/resources/data/antarchy/worldgen/configured_feature/lumen_lily_pads.json new file mode 100644 index 00000000..f266ce88 --- /dev/null +++ b/common/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/src/main/resources/data/antarchy/worldgen/configured_feature/lumen_pools.json b/common/src/main/resources/data/antarchy/worldgen/configured_feature/lumen_pools.json new file mode 100644 index 00000000..2c7be22b --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/configured_feature/lumen_pools.json @@ -0,0 +1,4 @@ +{ + "type": "antarchy:lumen_pools", + "config": {} +} diff --git a/common/src/main/resources/data/antarchy/worldgen/configured_feature/lumen_spires.json b/common/src/main/resources/data/antarchy/worldgen/configured_feature/lumen_spires.json new file mode 100644 index 00000000..dee83232 --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/configured_feature/lumen_spires.json @@ -0,0 +1,4 @@ +{ + "type": "antarchy:lumen_spires", + "config": {} +} diff --git a/common/src/main/resources/data/antarchy/worldgen/configured_feature/lumen_streams.json b/common/src/main/resources/data/antarchy/worldgen/configured_feature/lumen_streams.json new file mode 100644 index 00000000..d90db198 --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/configured_feature/lumen_streams.json @@ -0,0 +1,4 @@ +{ + "type": "antarchy:lumen_streams", + "config": {} +} diff --git a/common/src/main/resources/data/antarchy/worldgen/configured_feature/peach_forest_flora.json b/common/src/main/resources/data/antarchy/worldgen/configured_feature/peach_forest_flora.json new file mode 100644 index 00000000..7dfc323c --- /dev/null +++ b/common/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/src/main/resources/data/antarchy/worldgen/configured_feature/peach_forest_mossy_boulder.json b/common/src/main/resources/data/antarchy/worldgen/configured_feature/peach_forest_mossy_boulder.json new file mode 100644 index 00000000..b980262e --- /dev/null +++ b/common/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/src/main/resources/data/antarchy/worldgen/configured_feature/peach_forest_petals.json b/common/src/main/resources/data/antarchy/worldgen/configured_feature/peach_forest_petals.json new file mode 100644 index 00000000..0f348bb7 --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/configured_feature/peach_forest_petals.json @@ -0,0 +1,11 @@ +{ + "type": "minecraft:simple_block", + "config": { + "to_place": { + "type": "minecraft:simple_state_provider", + "state": { + "Name": "minecraft:pink_petals" + } + } + } +} diff --git a/common/src/main/resources/data/antarchy/worldgen/configured_feature/peach_forest_pond_large.json b/common/src/main/resources/data/antarchy/worldgen/configured_feature/peach_forest_pond_large.json new file mode 100644 index 00000000..bd272aec --- /dev/null +++ b/common/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/src/main/resources/data/antarchy/worldgen/configured_feature/peach_forest_pond_medium.json b/common/src/main/resources/data/antarchy/worldgen/configured_feature/peach_forest_pond_medium.json new file mode 100644 index 00000000..440d8a53 --- /dev/null +++ b/common/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/src/main/resources/data/antarchy/worldgen/configured_feature/peach_forest_pond_small.json b/common/src/main/resources/data/antarchy/worldgen/configured_feature/peach_forest_pond_small.json new file mode 100644 index 00000000..2c9bfc5c --- /dev/null +++ b/common/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/src/main/resources/data/antarchy/worldgen/configured_feature/peach_large_tree.json b/common/src/main/resources/data/antarchy/worldgen/configured_feature/peach_large_tree.json new file mode 100644 index 00000000..ba4ed76d --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/configured_feature/peach_large_tree.json @@ -0,0 +1,43 @@ +{ + "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", + "min_inclusive": 20, + "max_inclusive": 30 + }, + "canopy_radius": { + "type": "minecraft:uniform", + "min_inclusive": 7, + "max_inclusive": 8 + }, + "branch_count": { + "type": "minecraft:uniform", + "min_inclusive": 4, + "max_inclusive": 6 + }, + "trunk_width": 2, + "fruit_chance": 0.6, + "top_canopy_scale": 0.72 + } +} diff --git a/common/src/main/resources/data/antarchy/worldgen/configured_feature/peach_tree.json b/common/src/main/resources/data/antarchy/worldgen/configured_feature/peach_tree.json new file mode 100644 index 00000000..ca1934c2 --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/configured_feature/peach_tree.json @@ -0,0 +1,43 @@ +{ + "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", + "min_inclusive": 10, + "max_inclusive": 15 + }, + "canopy_radius": { + "type": "minecraft:uniform", + "min_inclusive": 4, + "max_inclusive": 5 + }, + "branch_count": { + "type": "minecraft:uniform", + "min_inclusive": 3, + "max_inclusive": 5 + }, + "trunk_width": 1, + "fruit_chance": 0.45, + "top_canopy_scale": 0.62 + } +} diff --git a/common/src/main/resources/data/antarchy/worldgen/configured_feature/star_coral_patch.json b/common/src/main/resources/data/antarchy/worldgen/configured_feature/star_coral_patch.json new file mode 100644 index 00000000..26ef9212 --- /dev/null +++ b/common/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/src/main/resources/data/antarchy/worldgen/noise_settings/elythia.json b/common/src/main/resources/data/antarchy/worldgen/noise_settings/elythia.json index adb6c57a..82987b8d 100644 --- a/common/src/main/resources/data/antarchy/worldgen/noise_settings/elythia.json +++ b/common/src/main/resources/data/antarchy/worldgen/noise_settings/elythia.json @@ -645,6 +645,60 @@ ] } }, + { + "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": { diff --git a/common/src/main/resources/data/antarchy/worldgen/placed_feature/blush_moss_patch.json b/common/src/main/resources/data/antarchy/worldgen/placed_feature/blush_moss_patch.json new file mode 100644 index 00000000..3f427bca --- /dev/null +++ b/common/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/src/main/resources/data/antarchy/worldgen/placed_feature/corn_patch.json b/common/src/main/resources/data/antarchy/worldgen/placed_feature/corn_patch.json new file mode 100644 index 00000000..7549c008 --- /dev/null +++ b/common/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": 36 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:heightmap", + "heightmap": "WORLD_SURFACE_WG" + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common/src/main/resources/data/antarchy/worldgen/placed_feature/elythia_torchflower_fields_flora.json b/common/src/main/resources/data/antarchy/worldgen/placed_feature/lumen_lily_pads.json similarity index 82% rename from common/src/main/resources/data/antarchy/worldgen/placed_feature/elythia_torchflower_fields_flora.json rename to common/src/main/resources/data/antarchy/worldgen/placed_feature/lumen_lily_pads.json index d73358fb..35200fdf 100644 --- a/common/src/main/resources/data/antarchy/worldgen/placed_feature/elythia_torchflower_fields_flora.json +++ b/common/src/main/resources/data/antarchy/worldgen/placed_feature/lumen_lily_pads.json @@ -1,5 +1,5 @@ { - "feature": "antarchy:elythia_torchflower_fields_flora", + "feature": "antarchy:lumen_lily_pads", "placement": [ { "type": "minecraft:count", diff --git a/common/src/main/resources/data/antarchy/worldgen/placed_feature/lumen_pools.json b/common/src/main/resources/data/antarchy/worldgen/placed_feature/lumen_pools.json new file mode 100644 index 00000000..11f62e28 --- /dev/null +++ b/common/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/src/main/resources/data/antarchy/worldgen/placed_feature/lumen_spires.json b/common/src/main/resources/data/antarchy/worldgen/placed_feature/lumen_spires.json new file mode 100644 index 00000000..ac4400ba --- /dev/null +++ b/common/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/src/main/resources/data/antarchy/worldgen/placed_feature/lumen_streams.json b/common/src/main/resources/data/antarchy/worldgen/placed_feature/lumen_streams.json new file mode 100644 index 00000000..d875b63f --- /dev/null +++ b/common/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/src/main/resources/data/antarchy/worldgen/placed_feature/peach_forest_flora.json b/common/src/main/resources/data/antarchy/worldgen/placed_feature/peach_forest_flora.json new file mode 100644 index 00000000..83a59387 --- /dev/null +++ b/common/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/src/main/resources/data/antarchy/worldgen/placed_feature/peach_forest_mossy_boulders.json b/common/src/main/resources/data/antarchy/worldgen/placed_feature/peach_forest_mossy_boulders.json new file mode 100644 index 00000000..f0f30851 --- /dev/null +++ b/common/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/src/main/resources/data/antarchy/worldgen/placed_feature/peach_forest_petals.json b/common/src/main/resources/data/antarchy/worldgen/placed_feature/peach_forest_petals.json new file mode 100644 index 00000000..fa38da85 --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/placed_feature/peach_forest_petals.json @@ -0,0 +1,19 @@ +{ + "feature": "antarchy:peach_forest_petals", + "placement": [ + { + "type": "minecraft:count", + "count": 3 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:heightmap", + "heightmap": "WORLD_SURFACE_WG" + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common/src/main/resources/data/antarchy/worldgen/placed_feature/peach_forest_ponds_large.json b/common/src/main/resources/data/antarchy/worldgen/placed_feature/peach_forest_ponds_large.json new file mode 100644 index 00000000..d118e03f --- /dev/null +++ b/common/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/src/main/resources/data/antarchy/worldgen/placed_feature/peach_forest_ponds_medium.json b/common/src/main/resources/data/antarchy/worldgen/placed_feature/peach_forest_ponds_medium.json new file mode 100644 index 00000000..265370a5 --- /dev/null +++ b/common/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/src/main/resources/data/antarchy/worldgen/placed_feature/peach_forest_ponds_small.json b/common/src/main/resources/data/antarchy/worldgen/placed_feature/peach_forest_ponds_small.json new file mode 100644 index 00000000..e0951250 --- /dev/null +++ b/common/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/src/main/resources/data/antarchy/worldgen/placed_feature/peach_large_tree.json b/common/src/main/resources/data/antarchy/worldgen/placed_feature/peach_large_tree.json new file mode 100644 index 00000000..e08a2556 --- /dev/null +++ b/common/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/src/main/resources/data/antarchy/worldgen/placed_feature/peach_tree.json b/common/src/main/resources/data/antarchy/worldgen/placed_feature/peach_tree.json new file mode 100644 index 00000000..7c6a4341 --- /dev/null +++ b/common/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/src/main/resources/data/antarchy/worldgen/placed_feature/star_coral_patch.json b/common/src/main/resources/data/antarchy/worldgen/placed_feature/star_coral_patch.json new file mode 100644 index 00000000..4d42abb9 --- /dev/null +++ b/common/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": 14 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:heightmap", + "heightmap": "OCEAN_FLOOR_WG" + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common/src/main/resources/data/antarchy/worldgen/placed_feature/titanium_ore.json b/common/src/main/resources/data/antarchy/worldgen/placed_feature/titanium_ore.json index 06f177fe..c49ace8f 100644 --- a/common/src/main/resources/data/antarchy/worldgen/placed_feature/titanium_ore.json +++ b/common/src/main/resources/data/antarchy/worldgen/placed_feature/titanium_ore.json @@ -3,7 +3,7 @@ "placement": [ { "type": "minecraft:count", - "count": 12 + "count": 13 }, { "type": "minecraft:in_square" diff --git a/common/src/main/resources/data/antarchy/worldgen/placed_feature/uranium_ore.json b/common/src/main/resources/data/antarchy/worldgen/placed_feature/uranium_ore.json index 1e443937..6297fb6c 100644 --- a/common/src/main/resources/data/antarchy/worldgen/placed_feature/uranium_ore.json +++ b/common/src/main/resources/data/antarchy/worldgen/placed_feature/uranium_ore.json @@ -3,7 +3,7 @@ "placement": [ { "type": "minecraft:count", - "count": 12 + "count": 13 }, { "type": "minecraft:in_square" diff --git a/common/src/main/resources/data/c/tags/item/foods.json b/common/src/main/resources/data/c/tags/item/foods.json index aae71222..d8703380 100644 --- a/common/src/main/resources/data/c/tags/item/foods.json +++ b/common/src/main/resources/data/c/tags/item/foods.json @@ -3,9 +3,21 @@ "values": [ "#c:foods/soup", "antarchy:blood_crystal_apple", + "antarchy:cornbread", + "antarchy:popcorn", + "antarchy:peach_pie", + "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:moleworm", + "antarchy:peach", + "antarchy:corn", + "antarchy:raw_corndog", + "antarchy:cooked_corndog", + "antarchy:root_beer" ] } diff --git a/common/src/main/resources/data/minecraft/loot_table/entities/magma_cube.json b/common/src/main/resources/data/minecraft/loot_table/entities/magma_cube.json new file mode 100644 index 00000000..4e011b10 --- /dev/null +++ b/common/src/main/resources/data/minecraft/loot_table/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/src/main/resources/data/minecraft/tags/block/all_hanging_signs.json b/common/src/main/resources/data/minecraft/tags/block/all_hanging_signs.json index a9f77d6c..7e4be6b5 100644 --- a/common/src/main/resources/data/minecraft/tags/block/all_hanging_signs.json +++ b/common/src/main/resources/data/minecraft/tags/block/all_hanging_signs.json @@ -2,6 +2,8 @@ "replace": false, "values": [ "antarchy:ouranwood_hanging_sign", - "antarchy:ouranwood_wall_hanging_sign" + "antarchy:ouranwood_wall_hanging_sign", + "antarchy:peach_hanging_sign", + "antarchy:peach_wall_hanging_sign" ] } diff --git a/common/src/main/resources/data/minecraft/tags/block/animals_spawnable_on.json b/common/src/main/resources/data/minecraft/tags/block/animals_spawnable_on.json new file mode 100644 index 00000000..a5ea1c6e --- /dev/null +++ b/common/src/main/resources/data/minecraft/tags/block/animals_spawnable_on.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "antarchy:blush_moss_block", + "minecraft:moss_block" + ] +} diff --git a/common/src/main/resources/data/minecraft/tags/block/ceiling_hanging_signs.json b/common/src/main/resources/data/minecraft/tags/block/ceiling_hanging_signs.json index b030962b..746c5071 100644 --- a/common/src/main/resources/data/minecraft/tags/block/ceiling_hanging_signs.json +++ b/common/src/main/resources/data/minecraft/tags/block/ceiling_hanging_signs.json @@ -1,6 +1,7 @@ { "replace": false, "values": [ - "antarchy:ouranwood_hanging_sign" + "antarchy:ouranwood_hanging_sign", + "antarchy:peach_hanging_sign" ] } diff --git a/common/src/main/resources/data/minecraft/tags/block/dirt.json b/common/src/main/resources/data/minecraft/tags/block/dirt.json index 26f30b50..071a0bbc 100644 --- a/common/src/main/resources/data/minecraft/tags/block/dirt.json +++ b/common/src/main/resources/data/minecraft/tags/block/dirt.json @@ -1,8 +1,9 @@ { - "replace": false, - "values": [ - "antarchy:infested_rooted_dirt", - "antarchy:infested_coarse_dirt", - "antarchy:umbral_moss_block" - ] + "replace": false, + "values": [ + "antarchy:infested_rooted_dirt", + "antarchy:infested_coarse_dirt", + "antarchy:umbral_moss_block", + "antarchy:blush_moss_block" + ] } diff --git a/common/src/main/resources/data/minecraft/tags/block/fence_gates.json b/common/src/main/resources/data/minecraft/tags/block/fence_gates.json index 628a0416..738ac5c8 100644 --- a/common/src/main/resources/data/minecraft/tags/block/fence_gates.json +++ b/common/src/main/resources/data/minecraft/tags/block/fence_gates.json @@ -1,6 +1,7 @@ { "replace": false, "values": [ - "antarchy:ouranwood_fence_gate" + "antarchy:ouranwood_fence_gate", + "antarchy:peach_fence_gate" ] } diff --git a/common/src/main/resources/data/minecraft/tags/block/flowers.json b/common/src/main/resources/data/minecraft/tags/block/flowers.json index 02f823bf..14c5c999 100644 --- a/common/src/main/resources/data/minecraft/tags/block/flowers.json +++ b/common/src/main/resources/data/minecraft/tags/block/flowers.json @@ -1,7 +1,9 @@ { "replace": false, "values": [ + "antarchy:camellia", "antarchy:orange_milkweed", - "antarchy:pink_milkweed" + "antarchy:pink_milkweed", + "antarchy:spider_lily" ] } diff --git a/common/src/main/resources/data/minecraft/tags/block/frogs_spawnable_on.json b/common/src/main/resources/data/minecraft/tags/block/frogs_spawnable_on.json new file mode 100644 index 00000000..a5ea1c6e --- /dev/null +++ b/common/src/main/resources/data/minecraft/tags/block/frogs_spawnable_on.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "antarchy:blush_moss_block", + "minecraft:moss_block" + ] +} diff --git a/common/src/main/resources/data/minecraft/tags/block/leaves.json b/common/src/main/resources/data/minecraft/tags/block/leaves.json index 019600cb..aee0c428 100644 --- a/common/src/main/resources/data/minecraft/tags/block/leaves.json +++ b/common/src/main/resources/data/minecraft/tags/block/leaves.json @@ -1,6 +1,7 @@ { "replace": false, "values": [ - "antarchy:ouranwood_leaves" + "antarchy:ouranwood_leaves", + "antarchy:peach_leaves" ] } diff --git a/common/src/main/resources/data/minecraft/tags/block/logs.json b/common/src/main/resources/data/minecraft/tags/block/logs.json index 01800b33..bdda48a5 100644 --- a/common/src/main/resources/data/minecraft/tags/block/logs.json +++ b/common/src/main/resources/data/minecraft/tags/block/logs.json @@ -6,6 +6,10 @@ "antarchy:mossy_ouranwood_log", "antarchy:mossy_ouranwood_wood", "antarchy:stripped_ouranwood_log", - "antarchy:stripped_ouranwood_wood" + "antarchy:stripped_ouranwood_wood", + "antarchy:peach_log", + "antarchy:peach_wood", + "antarchy:stripped_peach_log", + "antarchy:stripped_peach_wood" ] } diff --git a/common/src/main/resources/data/minecraft/tags/block/logs_that_burn.json b/common/src/main/resources/data/minecraft/tags/block/logs_that_burn.json index 01800b33..bdda48a5 100644 --- a/common/src/main/resources/data/minecraft/tags/block/logs_that_burn.json +++ b/common/src/main/resources/data/minecraft/tags/block/logs_that_burn.json @@ -6,6 +6,10 @@ "antarchy:mossy_ouranwood_log", "antarchy:mossy_ouranwood_wood", "antarchy:stripped_ouranwood_log", - "antarchy:stripped_ouranwood_wood" + "antarchy:stripped_ouranwood_wood", + "antarchy:peach_log", + "antarchy:peach_wood", + "antarchy:stripped_peach_log", + "antarchy:stripped_peach_wood" ] } diff --git a/common/src/main/resources/data/minecraft/tags/block/mineable/axe.json b/common/src/main/resources/data/minecraft/tags/block/mineable/axe.json index 136beca6..4f9f8b33 100644 --- a/common/src/main/resources/data/minecraft/tags/block/mineable/axe.json +++ b/common/src/main/resources/data/minecraft/tags/block/mineable/axe.json @@ -19,6 +19,23 @@ "antarchy:ouranwood_sign", "antarchy:ouranwood_wall_sign", "antarchy:ouranwood_hanging_sign", - "antarchy:ouranwood_wall_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" ] } diff --git a/common/src/main/resources/data/minecraft/tags/block/mineable/hoe.json b/common/src/main/resources/data/minecraft/tags/block/mineable/hoe.json index f12957c0..ece963cc 100644 --- a/common/src/main/resources/data/minecraft/tags/block/mineable/hoe.json +++ b/common/src/main/resources/data/minecraft/tags/block/mineable/hoe.json @@ -1,8 +1,13 @@ { - "replace": false, - "values": [ - "antarchy:ouranwood_leaves", - "antarchy:umbral_moss_block", - "antarchy:umbral_moss_carpet" - ] + "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" + ] } diff --git a/common/src/main/resources/data/minecraft/tags/block/mineable/pickaxe.json b/common/src/main/resources/data/minecraft/tags/block/mineable/pickaxe.json index 22851f51..72954032 100644 --- a/common/src/main/resources/data/minecraft/tags/block/mineable/pickaxe.json +++ b/common/src/main/resources/data/minecraft/tags/block/mineable/pickaxe.json @@ -1,74 +1,82 @@ { - "replace": false, - "values": [ - "antarchy:uranium_ore", - "antarchy:deepslate_uranium_ore", - "antarchy:titanium_ore", - "antarchy:deepslate_titanium_ore", - "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", - "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", - "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:nyxite_brick_stairs", - "antarchy:nyxite_brick_slab", - "antarchy:nyxite_brick_wall", - "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: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" - ] + "replace": false, + "values": [ + "antarchy:uranium_ore", + "antarchy:deepslate_uranium_ore", + "antarchy:titanium_ore", + "antarchy:deepslate_titanium_ore", + "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", + "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", + "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:nyxite_brick_stairs", + "antarchy:nyxite_brick_slab", + "antarchy:nyxite_brick_wall", + "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: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" + ] } diff --git a/common/src/main/resources/data/minecraft/tags/block/planks.json b/common/src/main/resources/data/minecraft/tags/block/planks.json index fbfbe78e..d98bff17 100644 --- a/common/src/main/resources/data/minecraft/tags/block/planks.json +++ b/common/src/main/resources/data/minecraft/tags/block/planks.json @@ -1,6 +1,7 @@ { "replace": false, "values": [ - "antarchy:ouranwood_planks" + "antarchy:ouranwood_planks", + "antarchy:peach_planks" ] } diff --git a/common/src/main/resources/data/minecraft/tags/block/saplings.json b/common/src/main/resources/data/minecraft/tags/block/saplings.json index 2af25ce5..5a06a14d 100644 --- a/common/src/main/resources/data/minecraft/tags/block/saplings.json +++ b/common/src/main/resources/data/minecraft/tags/block/saplings.json @@ -1,6 +1,7 @@ { "replace": false, "values": [ - "antarchy:ouranwood_acorn" + "antarchy:ouranwood_acorn", + "antarchy:peach_sapling" ] } diff --git a/common/src/main/resources/data/minecraft/tags/block/small_flowers.json b/common/src/main/resources/data/minecraft/tags/block/small_flowers.json new file mode 100644 index 00000000..b41d7661 --- /dev/null +++ b/common/src/main/resources/data/minecraft/tags/block/small_flowers.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:spider_lily" + ] +} diff --git a/common/src/main/resources/data/minecraft/tags/block/standing_signs.json b/common/src/main/resources/data/minecraft/tags/block/standing_signs.json index 61a8a4d5..6ec9e2a8 100644 --- a/common/src/main/resources/data/minecraft/tags/block/standing_signs.json +++ b/common/src/main/resources/data/minecraft/tags/block/standing_signs.json @@ -1,6 +1,7 @@ { "replace": false, "values": [ - "antarchy:ouranwood_sign" + "antarchy:ouranwood_sign", + "antarchy:peach_sign" ] } diff --git a/common/src/main/resources/data/minecraft/tags/block/tall_flowers.json b/common/src/main/resources/data/minecraft/tags/block/tall_flowers.json index 02f823bf..cf2db3ab 100644 --- a/common/src/main/resources/data/minecraft/tags/block/tall_flowers.json +++ b/common/src/main/resources/data/minecraft/tags/block/tall_flowers.json @@ -1,6 +1,7 @@ { "replace": false, "values": [ + "antarchy:camellia", "antarchy:orange_milkweed", "antarchy:pink_milkweed" ] diff --git a/common/src/main/resources/data/minecraft/tags/block/underwater_bonemeals.json b/common/src/main/resources/data/minecraft/tags/block/underwater_bonemeals.json new file mode 100644 index 00000000..a8614dfb --- /dev/null +++ b/common/src/main/resources/data/minecraft/tags/block/underwater_bonemeals.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "antarchy:star_coral", + "antarchy:star_coral_wall_fan" + ] +} diff --git a/common/src/main/resources/data/minecraft/tags/block/wall_hanging_signs.json b/common/src/main/resources/data/minecraft/tags/block/wall_hanging_signs.json index 2b95abe7..3472b17e 100644 --- a/common/src/main/resources/data/minecraft/tags/block/wall_hanging_signs.json +++ b/common/src/main/resources/data/minecraft/tags/block/wall_hanging_signs.json @@ -1,6 +1,7 @@ { "replace": false, "values": [ - "antarchy:ouranwood_wall_hanging_sign" + "antarchy:ouranwood_wall_hanging_sign", + "antarchy:peach_wall_hanging_sign" ] } diff --git a/common/src/main/resources/data/minecraft/tags/block/wall_signs.json b/common/src/main/resources/data/minecraft/tags/block/wall_signs.json index 47091e17..406407ee 100644 --- a/common/src/main/resources/data/minecraft/tags/block/wall_signs.json +++ b/common/src/main/resources/data/minecraft/tags/block/wall_signs.json @@ -1,6 +1,7 @@ { "replace": false, "values": [ - "antarchy:ouranwood_wall_sign" + "antarchy:ouranwood_wall_sign", + "antarchy:peach_wall_sign" ] } diff --git a/common/src/main/resources/data/minecraft/tags/block/wooden_buttons.json b/common/src/main/resources/data/minecraft/tags/block/wooden_buttons.json index 9f9f176f..1d626cef 100644 --- a/common/src/main/resources/data/minecraft/tags/block/wooden_buttons.json +++ b/common/src/main/resources/data/minecraft/tags/block/wooden_buttons.json @@ -1,6 +1,7 @@ { "replace": false, "values": [ - "antarchy:ouranwood_button" + "antarchy:ouranwood_button", + "antarchy:peach_button" ] } diff --git a/common/src/main/resources/data/minecraft/tags/block/wooden_doors.json b/common/src/main/resources/data/minecraft/tags/block/wooden_doors.json index 93bb2e7f..e4ebd50e 100644 --- a/common/src/main/resources/data/minecraft/tags/block/wooden_doors.json +++ b/common/src/main/resources/data/minecraft/tags/block/wooden_doors.json @@ -1,6 +1,7 @@ { "replace": false, "values": [ - "antarchy:ouranwood_door" + "antarchy:ouranwood_door", + "antarchy:peach_door" ] } diff --git a/common/src/main/resources/data/minecraft/tags/block/wooden_fences.json b/common/src/main/resources/data/minecraft/tags/block/wooden_fences.json index d103ebdd..f1b5eb5a 100644 --- a/common/src/main/resources/data/minecraft/tags/block/wooden_fences.json +++ b/common/src/main/resources/data/minecraft/tags/block/wooden_fences.json @@ -1,6 +1,7 @@ { "replace": false, "values": [ - "antarchy:ouranwood_fence" + "antarchy:ouranwood_fence", + "antarchy:peach_fence" ] } diff --git a/common/src/main/resources/data/minecraft/tags/block/wooden_pressure_plates.json b/common/src/main/resources/data/minecraft/tags/block/wooden_pressure_plates.json index fb1e3e81..7f3d5149 100644 --- a/common/src/main/resources/data/minecraft/tags/block/wooden_pressure_plates.json +++ b/common/src/main/resources/data/minecraft/tags/block/wooden_pressure_plates.json @@ -1,6 +1,7 @@ { "replace": false, "values": [ - "antarchy:ouranwood_pressure_plate" + "antarchy:ouranwood_pressure_plate", + "antarchy:peach_pressure_plate" ] } diff --git a/common/src/main/resources/data/minecraft/tags/block/wooden_slabs.json b/common/src/main/resources/data/minecraft/tags/block/wooden_slabs.json index d60c2f07..9b0b8371 100644 --- a/common/src/main/resources/data/minecraft/tags/block/wooden_slabs.json +++ b/common/src/main/resources/data/minecraft/tags/block/wooden_slabs.json @@ -1,6 +1,7 @@ { "replace": false, "values": [ - "antarchy:ouranwood_slab" + "antarchy:ouranwood_slab", + "antarchy:peach_slab" ] } diff --git a/common/src/main/resources/data/minecraft/tags/block/wooden_stairs.json b/common/src/main/resources/data/minecraft/tags/block/wooden_stairs.json index 8e1ff149..5d419448 100644 --- a/common/src/main/resources/data/minecraft/tags/block/wooden_stairs.json +++ b/common/src/main/resources/data/minecraft/tags/block/wooden_stairs.json @@ -1,6 +1,7 @@ { "replace": false, "values": [ - "antarchy:ouranwood_stairs" + "antarchy:ouranwood_stairs", + "antarchy:peach_stairs" ] } diff --git a/common/src/main/resources/data/minecraft/tags/block/wooden_trapdoors.json b/common/src/main/resources/data/minecraft/tags/block/wooden_trapdoors.json index 3567295e..df34c0e6 100644 --- a/common/src/main/resources/data/minecraft/tags/block/wooden_trapdoors.json +++ b/common/src/main/resources/data/minecraft/tags/block/wooden_trapdoors.json @@ -1,6 +1,7 @@ { "replace": false, "values": [ - "antarchy:ouranwood_trapdoor" + "antarchy:ouranwood_trapdoor", + "antarchy:peach_trapdoor" ] } diff --git a/common/src/main/resources/data/minecraft/tags/item/boats.json b/common/src/main/resources/data/minecraft/tags/item/boats.json index 6ee8cf49..fd04ca71 100644 --- a/common/src/main/resources/data/minecraft/tags/item/boats.json +++ b/common/src/main/resources/data/minecraft/tags/item/boats.json @@ -2,6 +2,7 @@ "replace": false, "values": [ "antarchy:ouranwood_boat", - "antarchy:ouranwood_chest_boat" + "antarchy:ouranwood_chest_boat", + "antarchy:peach_boat" ] } diff --git a/common/src/main/resources/data/minecraft/tags/item/chest_boats.json b/common/src/main/resources/data/minecraft/tags/item/chest_boats.json index 8e18b86e..47f46f23 100644 --- a/common/src/main/resources/data/minecraft/tags/item/chest_boats.json +++ b/common/src/main/resources/data/minecraft/tags/item/chest_boats.json @@ -1,6 +1,7 @@ { "replace": false, "values": [ - "antarchy:ouranwood_chest_boat" + "antarchy:ouranwood_chest_boat", + "antarchy:peach_chest_boat" ] } diff --git a/common/src/main/resources/data/minecraft/tags/item/enchantable/trident.json b/common/src/main/resources/data/minecraft/tags/item/enchantable/trident.json new file mode 100644 index 00000000..4d4e3067 --- /dev/null +++ b/common/src/main/resources/data/minecraft/tags/item/enchantable/trident.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:krakens_grasp" + ] +} diff --git a/common/src/main/resources/data/minecraft/tags/item/fence_gates.json b/common/src/main/resources/data/minecraft/tags/item/fence_gates.json index 628a0416..738ac5c8 100644 --- a/common/src/main/resources/data/minecraft/tags/item/fence_gates.json +++ b/common/src/main/resources/data/minecraft/tags/item/fence_gates.json @@ -1,6 +1,7 @@ { "replace": false, "values": [ - "antarchy:ouranwood_fence_gate" + "antarchy:ouranwood_fence_gate", + "antarchy:peach_fence_gate" ] } diff --git a/common/src/main/resources/data/minecraft/tags/item/flowers.json b/common/src/main/resources/data/minecraft/tags/item/flowers.json index 02f823bf..14c5c999 100644 --- a/common/src/main/resources/data/minecraft/tags/item/flowers.json +++ b/common/src/main/resources/data/minecraft/tags/item/flowers.json @@ -1,7 +1,9 @@ { "replace": false, "values": [ + "antarchy:camellia", "antarchy:orange_milkweed", - "antarchy:pink_milkweed" + "antarchy:pink_milkweed", + "antarchy:spider_lily" ] } diff --git a/common/src/main/resources/data/minecraft/tags/item/hanging_signs.json b/common/src/main/resources/data/minecraft/tags/item/hanging_signs.json index b030962b..746c5071 100644 --- a/common/src/main/resources/data/minecraft/tags/item/hanging_signs.json +++ b/common/src/main/resources/data/minecraft/tags/item/hanging_signs.json @@ -1,6 +1,7 @@ { "replace": false, "values": [ - "antarchy:ouranwood_hanging_sign" + "antarchy:ouranwood_hanging_sign", + "antarchy:peach_hanging_sign" ] } diff --git a/common/src/main/resources/data/minecraft/tags/item/leaves.json b/common/src/main/resources/data/minecraft/tags/item/leaves.json index 019600cb..aee0c428 100644 --- a/common/src/main/resources/data/minecraft/tags/item/leaves.json +++ b/common/src/main/resources/data/minecraft/tags/item/leaves.json @@ -1,6 +1,7 @@ { "replace": false, "values": [ - "antarchy:ouranwood_leaves" + "antarchy:ouranwood_leaves", + "antarchy:peach_leaves" ] } diff --git a/common/src/main/resources/data/minecraft/tags/item/logs.json b/common/src/main/resources/data/minecraft/tags/item/logs.json index 01800b33..bdda48a5 100644 --- a/common/src/main/resources/data/minecraft/tags/item/logs.json +++ b/common/src/main/resources/data/minecraft/tags/item/logs.json @@ -6,6 +6,10 @@ "antarchy:mossy_ouranwood_log", "antarchy:mossy_ouranwood_wood", "antarchy:stripped_ouranwood_log", - "antarchy:stripped_ouranwood_wood" + "antarchy:stripped_ouranwood_wood", + "antarchy:peach_log", + "antarchy:peach_wood", + "antarchy:stripped_peach_log", + "antarchy:stripped_peach_wood" ] } diff --git a/common/src/main/resources/data/minecraft/tags/item/logs_that_burn.json b/common/src/main/resources/data/minecraft/tags/item/logs_that_burn.json index 01800b33..bdda48a5 100644 --- a/common/src/main/resources/data/minecraft/tags/item/logs_that_burn.json +++ b/common/src/main/resources/data/minecraft/tags/item/logs_that_burn.json @@ -6,6 +6,10 @@ "antarchy:mossy_ouranwood_log", "antarchy:mossy_ouranwood_wood", "antarchy:stripped_ouranwood_log", - "antarchy:stripped_ouranwood_wood" + "antarchy:stripped_ouranwood_wood", + "antarchy:peach_log", + "antarchy:peach_wood", + "antarchy:stripped_peach_log", + "antarchy:stripped_peach_wood" ] } diff --git a/common/src/main/resources/data/minecraft/tags/item/planks.json b/common/src/main/resources/data/minecraft/tags/item/planks.json index fbfbe78e..d98bff17 100644 --- a/common/src/main/resources/data/minecraft/tags/item/planks.json +++ b/common/src/main/resources/data/minecraft/tags/item/planks.json @@ -1,6 +1,7 @@ { "replace": false, "values": [ - "antarchy:ouranwood_planks" + "antarchy:ouranwood_planks", + "antarchy:peach_planks" ] } diff --git a/common/src/main/resources/data/minecraft/tags/item/saplings.json b/common/src/main/resources/data/minecraft/tags/item/saplings.json index 2af25ce5..5a06a14d 100644 --- a/common/src/main/resources/data/minecraft/tags/item/saplings.json +++ b/common/src/main/resources/data/minecraft/tags/item/saplings.json @@ -1,6 +1,7 @@ { "replace": false, "values": [ - "antarchy:ouranwood_acorn" + "antarchy:ouranwood_acorn", + "antarchy:peach_sapling" ] } diff --git a/common/src/main/resources/data/minecraft/tags/item/signs.json b/common/src/main/resources/data/minecraft/tags/item/signs.json index 61a8a4d5..6ec9e2a8 100644 --- a/common/src/main/resources/data/minecraft/tags/item/signs.json +++ b/common/src/main/resources/data/minecraft/tags/item/signs.json @@ -1,6 +1,7 @@ { "replace": false, "values": [ - "antarchy:ouranwood_sign" + "antarchy:ouranwood_sign", + "antarchy:peach_sign" ] } diff --git a/common/src/main/resources/data/minecraft/tags/item/small_flowers.json b/common/src/main/resources/data/minecraft/tags/item/small_flowers.json new file mode 100644 index 00000000..b41d7661 --- /dev/null +++ b/common/src/main/resources/data/minecraft/tags/item/small_flowers.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:spider_lily" + ] +} diff --git a/common/src/main/resources/data/minecraft/tags/item/tall_flowers.json b/common/src/main/resources/data/minecraft/tags/item/tall_flowers.json index 02f823bf..cf2db3ab 100644 --- a/common/src/main/resources/data/minecraft/tags/item/tall_flowers.json +++ b/common/src/main/resources/data/minecraft/tags/item/tall_flowers.json @@ -1,6 +1,7 @@ { "replace": false, "values": [ + "antarchy:camellia", "antarchy:orange_milkweed", "antarchy:pink_milkweed" ] diff --git a/common/src/main/resources/data/minecraft/tags/item/trimmable_armor.json b/common/src/main/resources/data/minecraft/tags/item/trimmable_armor.json new file mode 100644 index 00000000..aa4ccea2 --- /dev/null +++ b/common/src/main/resources/data/minecraft/tags/item/trimmable_armor.json @@ -0,0 +1,19 @@ +{ + "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" + ] +} diff --git a/common/src/main/resources/data/minecraft/tags/item/wooden_buttons.json b/common/src/main/resources/data/minecraft/tags/item/wooden_buttons.json index 9f9f176f..1d626cef 100644 --- a/common/src/main/resources/data/minecraft/tags/item/wooden_buttons.json +++ b/common/src/main/resources/data/minecraft/tags/item/wooden_buttons.json @@ -1,6 +1,7 @@ { "replace": false, "values": [ - "antarchy:ouranwood_button" + "antarchy:ouranwood_button", + "antarchy:peach_button" ] } diff --git a/common/src/main/resources/data/minecraft/tags/item/wooden_doors.json b/common/src/main/resources/data/minecraft/tags/item/wooden_doors.json index 93bb2e7f..e4ebd50e 100644 --- a/common/src/main/resources/data/minecraft/tags/item/wooden_doors.json +++ b/common/src/main/resources/data/minecraft/tags/item/wooden_doors.json @@ -1,6 +1,7 @@ { "replace": false, "values": [ - "antarchy:ouranwood_door" + "antarchy:ouranwood_door", + "antarchy:peach_door" ] } diff --git a/common/src/main/resources/data/minecraft/tags/item/wooden_fences.json b/common/src/main/resources/data/minecraft/tags/item/wooden_fences.json index d103ebdd..f1b5eb5a 100644 --- a/common/src/main/resources/data/minecraft/tags/item/wooden_fences.json +++ b/common/src/main/resources/data/minecraft/tags/item/wooden_fences.json @@ -1,6 +1,7 @@ { "replace": false, "values": [ - "antarchy:ouranwood_fence" + "antarchy:ouranwood_fence", + "antarchy:peach_fence" ] } diff --git a/common/src/main/resources/data/minecraft/tags/item/wooden_pressure_plates.json b/common/src/main/resources/data/minecraft/tags/item/wooden_pressure_plates.json index fb1e3e81..7f3d5149 100644 --- a/common/src/main/resources/data/minecraft/tags/item/wooden_pressure_plates.json +++ b/common/src/main/resources/data/minecraft/tags/item/wooden_pressure_plates.json @@ -1,6 +1,7 @@ { "replace": false, "values": [ - "antarchy:ouranwood_pressure_plate" + "antarchy:ouranwood_pressure_plate", + "antarchy:peach_pressure_plate" ] } diff --git a/common/src/main/resources/data/minecraft/tags/item/wooden_slabs.json b/common/src/main/resources/data/minecraft/tags/item/wooden_slabs.json index d60c2f07..9b0b8371 100644 --- a/common/src/main/resources/data/minecraft/tags/item/wooden_slabs.json +++ b/common/src/main/resources/data/minecraft/tags/item/wooden_slabs.json @@ -1,6 +1,7 @@ { "replace": false, "values": [ - "antarchy:ouranwood_slab" + "antarchy:ouranwood_slab", + "antarchy:peach_slab" ] } diff --git a/common/src/main/resources/data/minecraft/tags/item/wooden_stairs.json b/common/src/main/resources/data/minecraft/tags/item/wooden_stairs.json index 8e1ff149..5d419448 100644 --- a/common/src/main/resources/data/minecraft/tags/item/wooden_stairs.json +++ b/common/src/main/resources/data/minecraft/tags/item/wooden_stairs.json @@ -1,6 +1,7 @@ { "replace": false, "values": [ - "antarchy:ouranwood_stairs" + "antarchy:ouranwood_stairs", + "antarchy:peach_stairs" ] } diff --git a/common/src/main/resources/data/minecraft/tags/item/wooden_trapdoors.json b/common/src/main/resources/data/minecraft/tags/item/wooden_trapdoors.json index 3567295e..df34c0e6 100644 --- a/common/src/main/resources/data/minecraft/tags/item/wooden_trapdoors.json +++ b/common/src/main/resources/data/minecraft/tags/item/wooden_trapdoors.json @@ -1,6 +1,7 @@ { "replace": false, "values": [ - "antarchy:ouranwood_trapdoor" + "antarchy:ouranwood_trapdoor", + "antarchy:peach_trapdoor" ] } diff --git a/fabric/build.gradle b/fabric/build.gradle index 56f8f8a1..26766adc 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -23,6 +23,8 @@ dependencies { modApi "net.fabricmc.fabric-api:fabric-api:${project.fabric_api_version}" modImplementation "software.bernie.geckolib:geckolib-fabric-${project.minecraft_version}:${project.geckolib_version}" compileOnly("curse.maven:intapi-${project.intapi_curseforge_id}:${project.intapi_curseforge_file_id_neoforge}") + compileOnly "mezz.jei:jei-${project.minecraft_version}-common-api:${project.jei_version}" + compileOnly "mezz.jei:jei-${project.minecraft_version}-fabric-api:${project.jei_version}" // compileOnly("curse.maven:create-${project.create_curseforge_id_neoforge}:${project.create_curseforge_file_id_neoforge}") // compileOnly("curse.maven:marvel-${project.marvel_curseforge_id}:${project.marvel_curseforge_file_id}") // compileOnly("curse.maven:stellaris-${project.stellaris_curseforge_id}:${project.stellaris_curseforge_file_id}") @@ -32,8 +34,9 @@ dependencies { // compileOnly("curse.maven:iaf-${project.iaf_curseforge_id}:${project.iaf_curseforge_file_id}") // compileOnly("curse.maven:backpack-${project.backpack_curseforge_id}:${project.backpack_curseforge_file_id}") // compileOnly("curse.maven:regions_unexplored-${project.regions_unexplored_curseforge_id}:${project.regions_unexplored_curseforge_file_id}") - compileOnly(files("$rootDir/infinite_dimensions_jars/infinity-2.7.1+1.21.1-neoforge.jar")) - compileOnly(files("$rootDir/infinite_dimensions_jars/infinity-2.7.1+1.21.1-neoforge-sources.jar")) +// compileOnly(files("$rootDir/infinite_dimensions_jars/infinity-2.7.1+1.21.1-neoforge.jar")) + compileOnly(files("$rootDir/infinite_dimensions_jars/infinity-2.7.2+1.21.1-neoforge.jar")) +// compileOnly(files("$rootDir/infinite_dimensions_jars/infinity-2.7.1+1.21.1-neoforge-sources.jar")) compileOnly(files("$rootDir/infinite_dimensions_jars/gravity-api-1.0.7-1.20.1.jar")) // compileOnly(files("$rootDir/infinite_dimensions_jars/Cloro's Gravity Gun Mod (Release 1.3.1).jar")) // compileOnly(files("$rootDir/infinite_dimensions_jars/VanillaBackport-neoforge-1.21.1-1.1.7.6.jar")) diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyConfigModuleFabric.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyConfigModuleFabric.java index be11f333..deee4175 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyConfigModuleFabric.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyConfigModuleFabric.java @@ -208,8 +208,10 @@ public final class AntarchyConfigModuleFabric { || name.startsWith("squidzooka") || name.equals("invertProjectilesFromInvertedPlayers") || name.startsWith("gravityGun") + || name.startsWith("minersDream") || name.equals("potentNyxiteInvertedDurationSeconds") || name.equals("corneaEarNightVisionSeconds") + || name.startsWith("american") || name.startsWith("mogglesVision") || name.equals("ductTapeRepairPercentPerUse") || name.startsWith("fallenKingCrown"); diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabric.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabric.java index 569179f7..f3d23fb8 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabric.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabric.java @@ -1,4 +1,5 @@ package com.craisinlord.antarchy.fabric; +import com.craisinlord.antarchy.fabric.registry.AntarchyFabricEntities; import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.content.item.BloodCrystalShardItem; @@ -38,6 +39,82 @@ public final class AntarchyFabric implements ModInitializer { Registries.BIOME, ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "mantis_overworld_spawn_biomes") ); + private static final TagKey OVERWORLD_ANT_NEST_SPAWN_BIOMES = TagKey.create( + Registries.BIOME, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "overworld_ant_nest_spawn_biomes") + ); + private static final TagKey RED_ANT_NEST_SPAWN_BIOMES = TagKey.create( + Registries.BIOME, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "red_ant_nest_spawn_biomes") + ); + private static final TagKey IS_ELYTHIA = TagKey.create( + Registries.BIOME, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "is_elythia") + ); + private static final TagKey APPLE_COW_SPAWN_BIOMES = TagKey.create( + Registries.BIOME, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "apple_cow_spawn_biomes") + ); + private static final TagKey GOLDEN_APPLE_COW_SPAWN_BIOMES = TagKey.create( + Registries.BIOME, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "golden_apple_cow_spawn_biomes") + ); + private static final TagKey FLYING_SQUIRREL_SPAWN_BIOMES = TagKey.create( + Registries.BIOME, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "flying_squirrel_spawn_biomes") + ); + private static final TagKey FLOWER_FOREST_BUTTERFLY_SPAWN_BIOMES = TagKey.create( + Registries.BIOME, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "flower_forest_butterfly_spawn_biomes") + ); + private static final TagKey FLOWER_FOREST_CATERPILLAR_SPAWN_BIOMES = TagKey.create( + Registries.BIOME, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "flower_forest_caterpillar_spawn_biomes") + ); + private static final TagKey MILKWEED_SPAWN_BIOMES = TagKey.create( + Registries.BIOME, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "milkweed_spawn_biomes") + ); + private static final TagKey WILD_CORN_SPAWN_BIOMES = TagKey.create( + Registries.BIOME, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "wild_corn_spawn_biomes") + ); + private static final ResourceKey BROWN_ANT_NEST = ResourceKey.create( + Registries.PLACED_FEATURE, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "brown_ant_nest") + ); + private static final ResourceKey RAINBOW_ANT_NEST = ResourceKey.create( + Registries.PLACED_FEATURE, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "rainbow_ant_nest") + ); + private static final ResourceKey RED_ANT_NEST = ResourceKey.create( + Registries.PLACED_FEATURE, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "red_ant_nest") + ); + private static final ResourceKey URANIUM_ORE = ResourceKey.create( + Registries.PLACED_FEATURE, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "uranium_ore") + ); + private static final ResourceKey TITANIUM_ORE = ResourceKey.create( + Registries.PLACED_FEATURE, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "titanium_ore") + ); + private static final ResourceKey FLOWER_FOREST_MILKWEED = ResourceKey.create( + Registries.PLACED_FEATURE, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "flower_forest_milkweed") + ); + private static final ResourceKey CORN_PATCH = ResourceKey.create( + Registries.PLACED_FEATURE, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "corn_patch") + ); + private static final TagKey HAS_STAR_CORAL = TagKey.create( + Registries.BIOME, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "has_star_coral") + ); + private static final ResourceKey STAR_CORAL_PATCH = ResourceKey.create( + Registries.PLACED_FEATURE, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "star_coral_patch") + ); @Override public void onInitialize() { AntarchyFabricNetworking.register(); @@ -70,26 +147,106 @@ public final class AntarchyFabric implements ModInitializer { BiomeModifications.addSpawn( BiomeSelectors.tag(MISSILE_SQUID_SPAWN_BIOMES), net.minecraft.world.entity.MobCategory.MONSTER, - AntarchyFabricContent.MISSILE_SQUID.get(), + AntarchyFabricEntities.MISSILE_SQUID.get(), 2, 1, 2 ); BiomeModifications.addSpawn( BiomeSelectors.tag(OCTOPUS_BOMB_SPAWN_BIOMES), net.minecraft.world.entity.MobCategory.MONSTER, - AntarchyFabricContent.OCTOPUS_BOMB.get(), + AntarchyFabricEntities.OCTOPUS_BOMB.get(), 2, 1, 2 ); BiomeModifications.addSpawn( BiomeSelectors.tag(MANTIS_OVERWORLD_SPAWN_BIOMES), net.minecraft.world.entity.MobCategory.MONSTER, - AntarchyFabricContent.MANTIS.get(), + AntarchyFabricEntities.MANTIS.get(), 8, 1, 1 ); BiomeModifications.addSpawn( BiomeSelectors.tag(MANTIS_OVERWORLD_SPAWN_BIOMES), net.minecraft.world.entity.MobCategory.MONSTER, - AntarchyFabricContent.ALPHA_MANTIS.get(), + AntarchyFabricEntities.ALPHA_MANTIS.get(), 1, 1, 1 ); + BiomeModifications.addFeature( + BiomeSelectors.tag(OVERWORLD_ANT_NEST_SPAWN_BIOMES), + GenerationStep.Decoration.VEGETAL_DECORATION, + BROWN_ANT_NEST + ); + BiomeModifications.addFeature( + BiomeSelectors.tag(OVERWORLD_ANT_NEST_SPAWN_BIOMES), + GenerationStep.Decoration.VEGETAL_DECORATION, + RAINBOW_ANT_NEST + ); + BiomeModifications.addFeature( + BiomeSelectors.tag(RED_ANT_NEST_SPAWN_BIOMES), + GenerationStep.Decoration.VEGETAL_DECORATION, + RED_ANT_NEST + ); + BiomeModifications.addFeature( + BiomeSelectors.foundInOverworld(), + GenerationStep.Decoration.UNDERGROUND_ORES, + URANIUM_ORE + ); + BiomeModifications.addFeature( + BiomeSelectors.foundInOverworld(), + GenerationStep.Decoration.UNDERGROUND_ORES, + TITANIUM_ORE + ); + BiomeModifications.addFeature( + BiomeSelectors.tag(IS_ELYTHIA), + GenerationStep.Decoration.UNDERGROUND_ORES, + URANIUM_ORE + ); + BiomeModifications.addFeature( + BiomeSelectors.tag(IS_ELYTHIA), + GenerationStep.Decoration.UNDERGROUND_ORES, + TITANIUM_ORE + ); + BiomeModifications.addFeature( + BiomeSelectors.tag(MILKWEED_SPAWN_BIOMES), + GenerationStep.Decoration.VEGETAL_DECORATION, + FLOWER_FOREST_MILKWEED + ); + BiomeModifications.addFeature( + BiomeSelectors.tag(WILD_CORN_SPAWN_BIOMES), + GenerationStep.Decoration.VEGETAL_DECORATION, + CORN_PATCH + ); + BiomeModifications.addFeature( + BiomeSelectors.tag(HAS_STAR_CORAL), + GenerationStep.Decoration.VEGETAL_DECORATION, + STAR_CORAL_PATCH + ); + BiomeModifications.addSpawn( + BiomeSelectors.tag(APPLE_COW_SPAWN_BIOMES), + net.minecraft.world.entity.MobCategory.CREATURE, + AntarchyFabricEntities.APPLE_COW.get(), + 10, 2, 4 + ); + BiomeModifications.addSpawn( + BiomeSelectors.tag(GOLDEN_APPLE_COW_SPAWN_BIOMES), + net.minecraft.world.entity.MobCategory.CREATURE, + AntarchyFabricEntities.GOLDEN_APPLE_COW.get(), + 3, 1, 3 + ); + BiomeModifications.addSpawn( + BiomeSelectors.tag(FLYING_SQUIRREL_SPAWN_BIOMES), + net.minecraft.world.entity.MobCategory.CREATURE, + AntarchyFabricEntities.FLYING_SQUIRREL.get(), + 8, 1, 3 + ); + BiomeModifications.addSpawn( + BiomeSelectors.tag(FLOWER_FOREST_BUTTERFLY_SPAWN_BIOMES), + net.minecraft.world.entity.MobCategory.AMBIENT, + AntarchyFabricEntities.BUTTERFLY.get(), + 28, 2, 5 + ); + BiomeModifications.addSpawn( + BiomeSelectors.tag(FLOWER_FOREST_CATERPILLAR_SPAWN_BIOMES), + net.minecraft.world.entity.MobCategory.CREATURE, + AntarchyFabricEntities.CATERPILLAR.get(), + 24, 2, 4 + ); } } diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricContent.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricContent.java index 65fe4254..480bcd53 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricContent.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricContent.java @@ -2,2538 +2,392 @@ package com.craisinlord.antarchy.fabric; import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.compat.infinity.InfinityCompat; -import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.compat.infinity.InfinityCompatVersion; import com.craisinlord.antarchy.content.AntarchyObjects; import com.craisinlord.antarchy.content.block.*; import com.craisinlord.antarchy.content.AntarchySoundEvents; -import com.craisinlord.antarchy.content.item.BloodCrystalArmorItem; -import com.craisinlord.antarchy.content.item.BloodCrystalAppleItem; import com.craisinlord.antarchy.content.item.BloodCrystalKatanaItem; -import com.craisinlord.antarchy.content.block.entity.AntNestBlockEntity; -import com.craisinlord.antarchy.content.block.entity.DreamCampfireBlockEntity; -import com.craisinlord.antarchy.content.block.entity.HushweedBlockEntity; -import com.craisinlord.antarchy.content.block.entity.PotentNyxiteBlockEntity; -import com.craisinlord.antarchy.content.block.entity.WaspNestBlockEntity; -import com.craisinlord.antarchy.content.fluid.BileLiquidBlock; -import com.craisinlord.antarchy.content.worldgen.ants.BrownAntNestFeature; -import com.craisinlord.antarchy.content.worldgen.ants.RainbowAntNestFeature; -import com.craisinlord.antarchy.content.worldgen.ants.RedAntNestFeature; -import com.craisinlord.antarchy.content.worldgen.ants.TermiteNestFeature; -import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynBileCystFeature; -import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynBileVeinFeature; -import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynCreepvineFeature; -import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynWallAmberMossFeature; -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.NyxiteSpikeFeature; -import com.craisinlord.antarchy.content.worldgen.thoraxis.PotentNyxiteFeature; -import com.craisinlord.antarchy.fabric.content.fluid.AntiwaterFluid; -import com.craisinlord.antarchy.fabric.content.fluid.AntiwaterLiquidBlock; -import com.craisinlord.antarchy.fabric.item.DeferredSpawnEggItem; import com.craisinlord.antarchy.fabric.network.AntarchyFabricNetworking; -import com.craisinlord.antarchy.fabric.registry.DeferredBlock; import com.craisinlord.antarchy.fabric.registry.DeferredHolder; -import com.craisinlord.antarchy.fabric.registry.DeferredItem; -import com.craisinlord.antarchy.fabric.registry.DeferredRegister; -import com.craisinlord.antarchy.content.effect.DreadMobEffect; -import com.craisinlord.antarchy.content.effect.GrowthMobEffect; -import com.craisinlord.antarchy.content.effect.InvertedMobEffect; -import com.craisinlord.antarchy.content.effect.ParalyzedMobEffect; -import com.craisinlord.antarchy.content.effect.ShrinkMobEffect; -import com.craisinlord.antarchy.content.effect.StinkyMobEffect; -import com.craisinlord.antarchy.content.entity.AppleCowEntityVariants.AppleCow; -import com.craisinlord.antarchy.content.entity.AppleCowEntityVariants.EnchantedGoldenAppleCow; -import com.craisinlord.antarchy.content.entity.AppleCowEntityVariants.GoldenAppleCow; -import com.craisinlord.antarchy.content.entity.cloud_shark.CloudSharkEntity; -import com.craisinlord.antarchy.content.entity.BedBugEntity; -import com.craisinlord.antarchy.content.entity.ButterflyEntity; -import com.craisinlord.antarchy.content.entity.CaterpillarEntity; -import com.craisinlord.antarchy.content.entity.DiamondMinecartEntity; -import com.craisinlord.antarchy.content.entity.DrTrayaurusEntity; -import com.craisinlord.antarchy.content.entity.brutalfly.BrutalflyEntity; -import com.craisinlord.antarchy.content.entity.brutalfly.BrutalflyOrbEntity; -import com.craisinlord.antarchy.content.entity.EasterBunnyEntity; -import com.craisinlord.antarchy.content.entity.flying_squirrel.FlyingSquirrelEntity; -import com.craisinlord.antarchy.content.entity.ReverieEntity; -import com.craisinlord.antarchy.content.entity.MissileSquidEntity; import com.craisinlord.antarchy.content.entity.lucid.LucidEntity; import com.craisinlord.antarchy.content.entity.lucid.LucidBoltEntity; import com.craisinlord.antarchy.content.entity.lucid.LucidEyeProjectileEntity; -import com.craisinlord.antarchy.content.entity.HushProjectileEntity; -import com.craisinlord.antarchy.content.entity.JumpyBugEntity; -import com.craisinlord.antarchy.content.entity.StinkBugEntity; -import com.craisinlord.antarchy.content.entity.OuranwoodBoatEntity; -import com.craisinlord.antarchy.content.entity.OuranwoodChestBoatEntity; -import com.craisinlord.antarchy.content.entity.AlphaMantisEntity; -import com.craisinlord.antarchy.content.entity.MantisEntity; -import com.craisinlord.antarchy.content.entity.RollyPollyEntity; -import com.craisinlord.antarchy.content.entity.basilisk.BasiliskEntity; -import com.craisinlord.antarchy.content.entity.EmperorScorpionEntity; -import com.craisinlord.antarchy.content.entity.ScorpionEntity; -import com.craisinlord.antarchy.content.item.LucidEyeItem; -import com.craisinlord.antarchy.content.item.LucidPearlItem; -import com.craisinlord.antarchy.content.entity.nightmare.NightmareEntity; -import com.craisinlord.antarchy.content.entity.ToreterrorEntity; -import com.craisinlord.antarchy.content.entity.WaterBombEntity; -import com.craisinlord.antarchy.content.item.PrimordialArmorItem; -import com.craisinlord.antarchy.content.item.WaterCannonItem; -import com.craisinlord.antarchy.content.entity.kraken.KrakenEntity; -import com.craisinlord.antarchy.content.entity.OctopusBombEntity; -import com.craisinlord.antarchy.content.entity.MolevoreEntity; -import com.craisinlord.antarchy.content.entity.MolewormEntity; -import com.craisinlord.antarchy.content.entity.BomberEntity; -import com.craisinlord.antarchy.content.entity.SizeRayProjectileEntity; -import com.craisinlord.antarchy.content.entity.TriffidEntity; -import com.craisinlord.antarchy.content.entity.WaspEntity; -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 com.craisinlord.antarchy.content.item.BattleAxeItem; -import com.craisinlord.antarchy.content.item.BasiliskDaggerItem; -import com.craisinlord.antarchy.content.item.BigBerthaItem; -import com.craisinlord.antarchy.content.item.AntimetalBlockItem; -import com.craisinlord.antarchy.fabric.item.AntimetalScaffoldingItem; -import com.craisinlord.antarchy.content.item.CloudSharkFinSoupItem; -import com.craisinlord.antarchy.content.item.CorneaEarItem; -import com.craisinlord.antarchy.content.item.GravityGunItem; -import com.craisinlord.antarchy.content.item.DuctTapeBlockItem; -import com.craisinlord.antarchy.content.item.BrutalflyElytraItem; -import com.craisinlord.antarchy.content.item.MobComingSoonTooltipItem; -import com.craisinlord.antarchy.content.item.MogglesItem; -import com.craisinlord.antarchy.content.item.ultimate.UltimateAxeItem; -import com.craisinlord.antarchy.content.item.ultimate.UltimateHoeItem; -import com.craisinlord.antarchy.content.item.ultimate.UltimatePickaxeItem; -import com.craisinlord.antarchy.content.item.ultimate.UtlimateShovelItem; -import com.craisinlord.antarchy.content.item.ultimate.UltimateSwordItem; -import com.craisinlord.antarchy.content.item.DiamondMinecartItem; -import com.craisinlord.antarchy.content.item.ReverieBottleItem; -import com.craisinlord.antarchy.content.item.ScorpionWhipItem; import com.craisinlord.antarchy.content.item.ScorpionWhipTetherSync; import com.craisinlord.antarchy.content.network.HerculesBeetleImpactShakeSync; -import com.craisinlord.antarchy.content.item.SizeRayItem; -import com.craisinlord.antarchy.content.item.SquidzookaItem; -import com.craisinlord.antarchy.content.item.SimpleToolTier; -import com.craisinlord.antarchy.content.item.ultimate.UltimateArmorItem; -import com.craisinlord.antarchy.content.item.ultimate.UltimateBowItem; -import com.craisinlord.antarchy.content.item.ultimate.UltimateCrossbowItem; -import com.craisinlord.antarchy.content.item.NightmareArmorItem; -import com.craisinlord.antarchy.content.item.NightmareSwordItem; -import com.craisinlord.antarchy.content.item.OuranwoodBoatOnlyItem; -import com.craisinlord.antarchy.content.item.OuranwoodChestBoatItem; -import com.craisinlord.antarchy.content.item.RainbowSugarItem; -import com.craisinlord.antarchy.content.worldgen.elythia.CoralSpikeFeature; -import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaBiomeSource; -import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaRiverCarveFunction; -import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaFloraFeature; -import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaLargeTuffBoulderFeature; -import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaPondFeature; -import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaSurfaceCoverFeature; -import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaTuffBoulderFeature; -import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaUndergroundFeature; -import com.craisinlord.antarchy.content.worldgen.elythia.MolewormCaveEntranceFeature; -import com.craisinlord.antarchy.content.worldgen.elythia.MolewormSurfaceMoundsFeature; -import com.craisinlord.antarchy.content.worldgen.elythia.BrutalflyCocoonFeature; -import com.craisinlord.antarchy.content.worldgen.elythia.MolewormTunnelsFeature; -import com.craisinlord.antarchy.content.worldgen.elythia.MolewormWarrensFeature; -import com.craisinlord.antarchy.content.worldgen.elythia.OuranwoodCocoonTreeFeature; -import com.craisinlord.antarchy.content.worldgen.elythia.OuranwoodTreeConfiguration; -import com.craisinlord.antarchy.content.worldgen.elythia.OuranwoodTreeFeature; -import com.craisinlord.antarchy.content.worldgen.elythia.TriffidPatchFeature; -import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynEggPatchFeature; -import com.craisinlord.antarchy.content.worldgen.cavaryn.ChitenSpikeConfiguration; -import com.craisinlord.antarchy.content.worldgen.cavaryn.ChitenSpikeFeature; -import com.craisinlord.antarchy.content.worldgen.thoraxis.BedBugNestFeature; -import com.craisinlord.antarchy.content.worldgen.thoraxis.BedBugSurfaceClusterFeature; -import com.craisinlord.antarchy.content.worldgen.thoraxis.CloudSeaCalciteFeature; -import com.craisinlord.antarchy.content.worldgen.thoraxis.LucidAntiwaterPoolFeature; -import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisBiomeSource; -import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisDuneConfiguration; -import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisDuneFeature; -import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisFissureConfiguration; -import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisFissureFeature; -import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisBloodCrystalConfiguration; -import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisBloodCrystalFeature; -import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisAntiwaterPoolConfiguration; -import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisAntiwaterPoolFeature; -import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisRibColumnsConfiguration; -import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisRibColumnsFeature; -import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisSpikeConfiguration; -import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisSpikeFeature; -import com.craisinlord.antarchy.content.client.particle.InvertedGeyserBaseParticleOptions; -import com.craisinlord.antarchy.content.client.particle.InvertedGeyserParticleOptions; import com.craisinlord.antarchy.content.portal.PermanentPortalType; -import java.util.List; -import java.util.ArrayList; -import java.util.Comparator; -import com.mojang.serialization.MapCodec; - -import net.fabricmc.fabric.api.object.builder.v1.entity.FabricDefaultAttributeRegistry; import net.fabricmc.fabric.api.registry.FabricBrewingRecipeRegistryBuilder; -import net.minecraft.advancements.critereon.EntitySubPredicate; import net.minecraft.core.Holder; -import net.minecraft.core.registries.Registries; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.resources.ResourceLocation; -import net.minecraft.sounds.SoundEvent; -import net.minecraft.sounds.SoundEvents; import net.minecraft.world.item.alchemy.Potion; -import net.minecraft.world.item.alchemy.PotionContents; -import net.minecraft.world.effect.MobEffect; -import net.minecraft.world.effect.MobEffectInstance; -import net.minecraft.world.effect.MobEffects; -import net.minecraft.tags.TagKey; -import net.minecraft.world.damagesource.DamageType; -import net.minecraft.world.entity.EntityType; -import net.minecraft.world.entity.MobCategory; -import net.minecraft.world.entity.ai.attributes.Attribute; -import net.minecraft.world.entity.ai.attributes.AttributeSupplier; -import net.minecraft.world.entity.ai.attributes.Attributes; -import net.minecraft.world.entity.animal.Cow; -import net.minecraft.world.entity.animal.Rabbit; -import net.minecraft.world.entity.SpawnPlacementTypes; -import net.minecraft.world.entity.SpawnPlacements; -import net.minecraft.world.entity.npc.Villager; -import net.minecraft.world.entity.monster.Monster; -import net.minecraft.world.item.ArmorItem; -import net.minecraft.world.item.ArmorMaterial; -import net.minecraft.world.item.BucketItem; -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.Rarity; -import net.minecraft.world.item.StandingAndWallBlockItem; -import net.minecraft.world.food.FoodProperties; -import net.minecraft.world.item.Tier; -import net.minecraft.world.item.Tiers; import net.minecraft.world.item.alchemy.Potions; import net.minecraft.world.item.crafting.Ingredient; -import net.minecraft.core.Direction; -import net.minecraft.core.particles.ParticleType; -import net.minecraft.core.particles.SimpleParticleType; -import net.minecraft.util.valueproviders.UniformInt; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.AmethystClusterBlock; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.DropExperienceBlock; -import net.minecraft.world.level.block.GlowLichenBlock; -import net.minecraft.world.level.block.HorizontalDirectionalBlock; import net.minecraft.world.level.block.LiquidBlock; -import net.minecraft.world.level.block.RotatedPillarBlock; -import net.minecraft.world.level.block.SoundType; -import net.minecraft.world.level.block.VineBlock; -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.biome.BiomeSource; -import net.minecraft.world.level.levelgen.DensityFunction; -import net.minecraft.world.level.levelgen.feature.Feature; -import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; -import net.minecraft.world.level.levelgen.feature.configurations.SimpleBlockConfiguration; -import net.minecraft.world.level.levelgen.Heightmap; import net.fabricmc.loader.api.FabricLoader; -import net.minecraft.world.level.material.Fluid; -import net.minecraft.world.item.context.BlockPlaceContext; -import net.minecraft.world.level.block.Mirror; -import net.minecraft.world.level.block.Rotation; +import com.craisinlord.antarchy.fabric.registry.AntarchyFabricBlocks; +import com.craisinlord.antarchy.fabric.registry.AntarchyFabricItems; +import com.craisinlord.antarchy.fabric.registry.AntarchyFabricEntities; +import com.craisinlord.antarchy.fabric.registry.AntarchyFabricCreativeModeTabs; +import com.craisinlord.antarchy.fabric.registry.AntarchyFabricSounds; +import com.craisinlord.antarchy.fabric.registry.AntarchyFabricMisc; +import com.craisinlord.antarchy.fabric.registry.AntarchyFabricEntityAttributes; +import com.craisinlord.antarchy.fabric.registry.AntarchyFabricSpawnPlacements; public final class AntarchyFabricContent { - private static final DeferredRegister.Blocks BLOCKS = DeferredRegister.createBlocks(Antarchy.MODID); - private static final DeferredRegister.Items ITEMS = DeferredRegister.createItems(Antarchy.MODID); - private static final DeferredRegister CREATIVE_MODE_TABS = DeferredRegister.create(Registries.CREATIVE_MODE_TAB, Antarchy.MODID); - private static final DeferredRegister ARMOR_MATERIALS = DeferredRegister.create(Registries.ARMOR_MATERIAL, Antarchy.MODID); - private static final DeferredRegister> ENTITY_TYPES = DeferredRegister.create(Registries.ENTITY_TYPE, Antarchy.MODID); - private static final DeferredRegister> BLOCK_ENTITY_TYPES = DeferredRegister.create(Registries.BLOCK_ENTITY_TYPE, Antarchy.MODID); - private static final DeferredRegister> PARTICLE_TYPES = DeferredRegister.create(Registries.PARTICLE_TYPE, Antarchy.MODID); - private static final DeferredRegister> FEATURES = DeferredRegister.create(Registries.FEATURE, Antarchy.MODID); - private static final DeferredRegister> BIOME_SOURCES = DeferredRegister.create(Registries.BIOME_SOURCE, Antarchy.MODID); - private static final DeferredRegister> DENSITY_FUNCTION_TYPES = DeferredRegister.create(Registries.DENSITY_FUNCTION_TYPE, Antarchy.MODID); - private static final DeferredRegister> ENTITY_SUB_PREDICATES = DeferredRegister.create(Registries.ENTITY_SUB_PREDICATE_TYPE, Antarchy.MODID); - private static final DeferredRegister ATTRIBUTES = DeferredRegister.create(Registries.ATTRIBUTE, Antarchy.MODID); - private static final TagKey BYPASSES_BLOODGLASS = - TagKey.create(net.minecraft.core.registries.Registries.DAMAGE_TYPE, ResourceLocation.fromNamespaceAndPath("antarchy", "bypasses_bloodglass")); - private static final DeferredHolder DOUBLE_DAMAGE_CHANCE = ATTRIBUTES.register( - "double_damage_chance", - () -> new net.minecraft.world.entity.ai.attributes.RangedAttribute("attribute.antarchy.double_damage_chance", 0.0, 0.0, 1.0).setSyncable(true) - ); - private static final DeferredRegister MOB_EFFECTS = DeferredRegister.create(Registries.MOB_EFFECT, Antarchy.MODID); - private static final DeferredRegister POTIONS = DeferredRegister.create(Registries.POTION, Antarchy.MODID); - private static final DeferredRegister SOUND_EVENTS = DeferredRegister.create(Registries.SOUND_EVENT, Antarchy.MODID); - private static final DeferredRegister FLUIDS = DeferredRegister.create(Registries.FLUID, Antarchy.MODID); - private static final DeferredRegister> MENUS = DeferredRegister.create(Registries.MENU, Antarchy.MODID); - private static final Tier ULTIMATE_TIER = new SimpleToolTier( - 3072, - 10.5F, - 0.0F, - Tiers.NETHERITE.getIncorrectBlocksForDrops(), - 25, - AntarchyFabricContent::ultimateRepairIngredient - ); - private static final Tier BLOOD_CRYSTAL_KATANA_TIER = new SimpleToolTier( - 1200, - 8.0F, - 0.0F, - Tiers.DIAMOND.getIncorrectBlocksForDrops(), - 18, - AntarchyFabricContent::bloodCrystalRepairIngredient - ); - public static final DeferredItem NIGHTMARE_SCALE = ITEMS.registerSimpleItem("nightmare_scale", new Item.Properties().rarity(Rarity.RARE).fireResistant()); - public static final DeferredHolder SQUIDZOOKA_FIRE = registerSoundEvent("squidzooka_fire"); - public static final DeferredHolder SHRINK_RAY_SOUND = registerSoundEvent("shrink_ray"); - public static final DeferredHolder GROWTH_RAY_SOUND = registerSoundEvent("growth_ray"); - public static final DeferredHolder SIZE_RAY_CHARGE = registerSoundEvent("size_ray_charge"); - public static final DeferredHolder ANT_AMBIENT = registerSoundEvent("ant_ambient"); - public static final DeferredHolder ANT_IDLE = registerSoundEvent("ant_idle"); - public static final DeferredHolder ANT_HURT = registerSoundEvent("ant_hurt"); - public static final DeferredHolder ANT_BITE = registerSoundEvent("ant_bite"); - public static final DeferredHolder ANT_GATHER = registerSoundEvent("ant_gather"); - public static final DeferredHolder ANT_NEST = registerSoundEvent("ant_nest"); - public static final DeferredHolder CLOUD_SHARK_BITE = registerSoundEvent("cloud_shark_bite"); - public static final DeferredHolder CLOUD_SHARK_IDLE = registerSoundEvent("cloud_shark_idle"); - public static final DeferredHolder CLOUD_SHARK_HURT = registerSoundEvent("cloud_shark_hurt"); - public static final DeferredHolder CLOUD_SHARK_DEATH = registerSoundEvent("cloud_shark_death"); - public static final DeferredHolder CLOUD_SHARK_FLY = registerSoundEvent("cloud_shark_fly"); - public static final DeferredHolder CATERPILLAR_IDLE = registerSoundEvent("caterpillar_idle"); - public static final DeferredHolder CATERPILLAR_HURT = registerSoundEvent("caterpillar_hurt"); - public static final DeferredHolder CATERPILLAR_CRAWL = registerSoundEvent("caterpillar_crawl"); - public static final DeferredHolder BUTTERFLY_HURT = registerSoundEvent("butterfly_hurt"); - public static final DeferredHolder BRUTALFLY_IDLE = registerSoundEvent("brutalfly_idle"); - public static final DeferredHolder BRUTALFLY_DEATH = registerSoundEvent("brutalfly_death"); - public static final DeferredHolder ELYTHIA_FIREFLY_AMBIENT = registerSoundEvent("ambient.elythia.firefly"); - public static final DeferredHolder MISSILE_SQUID_AMBIENT = registerSoundEvent("missile_squid_ambient"); - public static final DeferredHolder MISSILE_SQUID_HURT = registerSoundEvent("missile_squid_hurt"); - public static final DeferredHolder MISSILE_SQUID_DEATH = registerSoundEvent("missile_squid_death"); - public static final DeferredHolder MISSILE_SQUID_ATTACK = registerSoundEvent("missile_squid_attack"); - public static final DeferredHolder KRAKEN_FLYING_LOOP = registerSoundEvent("kraken_flying_loop"); - public static final DeferredHolder KRAKEN_FLYING_SIDEWAYS_LOOP = registerSoundEvent("kraken_flying_sideways_loop"); - public static final DeferredHolder KRAKEN_ATTACK = registerSoundEvent("kraken_attack"); - public static final DeferredHolder KRAKEN_SPIN = registerSoundEvent("kraken_spin"); - public static final DeferredHolder KRAKEN_ROAR = registerSoundEvent("kraken_roar"); - public static final DeferredHolder KRAKEN_SUMMON = registerSoundEvent("kraken_summon"); - public static final DeferredHolder KRAKEN_HURT = registerSoundEvent("kraken_hurt"); - public static final DeferredHolder KRAKEN_DEATH = registerSoundEvent("kraken_death"); - public static final DeferredHolder BASILISK_IDLE_LOOP = registerSoundEvent("basilisk_idle_loop"); - public static final DeferredHolder BASILISK_SLITHER_LOOP = registerSoundEvent("basilisk_slither_loop"); - public static final DeferredHolder BASILISK_BITE = registerSoundEvent("basilisk_bite"); - public static final DeferredHolder BASILISK_HISS = registerSoundEvent("basilisk_hiss"); - public static final DeferredHolder BASILISK_HURT = registerSoundEvent("basilisk_hurt"); - public static final DeferredHolder BASILISK_DEATH = registerSoundEvent("basilisk_death"); - public static final DeferredHolder THORAXIS_NIGHTMARE_WASTES_AMBIENT = registerSoundEvent("thoraxis_nightmare_wastes_ambient"); - public static final DeferredHolder THORAXIS_NIGHTMARE_WASTES_ADDITIONS = registerSoundEvent("thoraxis_nightmare_wastes_additions"); - public static final DeferredHolder THORAXIS_NIGHTMARE_WASTES_MOOD = registerSoundEvent("thoraxis_nightmare_wastes_mood"); - public static final DeferredHolder THORAXIS_DREAM_DUNES_AMBIENT = registerSoundEvent("thoraxis_dream_dunes_ambient"); - public static final DeferredHolder THORAXIS_DREAM_DUNES_ADDITIONS = registerSoundEvent("thoraxis_dream_dunes_additions"); - public static final DeferredHolder THORAXIS_DREAM_DUNES_MOOD = registerSoundEvent("thoraxis_dream_dunes_mood"); - public static final DeferredHolder THORAXIS_LUCID_POOLS_AMBIENT = registerSoundEvent("thoraxis_lucid_pools_ambient"); - public static final DeferredHolder THORAXIS_LUCID_POOLS_ADDITIONS = registerSoundEvent("thoraxis_lucid_pools_additions"); - public static final DeferredHolder THORAXIS_LUCID_POOLS_MOOD = registerSoundEvent("thoraxis_lucid_pools_mood"); - public static final DeferredHolder LUCID_AMBIENT = registerSoundEvent("lucid_ambient"); - public static final DeferredHolder LUCID_FLYING = registerSoundEvent("lucid_flying"); - public static final DeferredHolder LUCID_ATTACK = registerSoundEvent("lucid_attack"); - public static final DeferredHolder LUCID_BOLT_SOUND = registerSoundEvent("lucid_bolt"); - public static final DeferredHolder LUCID_HURT = registerSoundEvent("lucid_hurt"); - public static final DeferredHolder LUCID_DEATH = registerSoundEvent("lucid_death"); - public static final DeferredHolder REVERIE_IDLE = registerSoundEvent("reverie_idle"); - public static final DeferredHolder REVERIE_HURT = registerSoundEvent("reverie_hurt"); - public static final DeferredHolder REVERIE_WORRY = registerSoundEvent("reverie_worry"); - public static final DeferredHolder REVERIE_SAVE = registerSoundEvent("reverie_save"); - public static final DeferredHolder REVERIE_JOIN_PLAYER = registerSoundEvent("reverie_join_player"); - public static final DeferredHolder REVERIE_ALERT = registerSoundEvent("reverie_alert"); - public static final DeferredHolder FLYING_SQUIRREL_IDLE = registerSoundEvent("flying_squirrel_idle"); - public static final DeferredHolder FLYING_SQUIRREL_BEG = registerSoundEvent("flying_squirrel_beg"); - public static final DeferredHolder FLYING_SQUIRREL_NUT = registerSoundEvent("flying_squirrel_nut"); - public static final DeferredHolder FLYING_SQUIRREL_GLIDE_LOOP = registerSoundEvent("flying_squirrel_glide_loop"); - public static final DeferredHolder FLYING_SQUIRREL_HURT = registerSoundEvent("flying_squirrel_hurt"); - public static final DeferredHolder FLYING_SQUIRREL_DEATH = registerSoundEvent("flying_squirrel_death"); - public static final DeferredHolder NIGHTMARE_IDLE = registerSoundEvent("nightmare_idle"); - public static final DeferredHolder NIGHTMARE_HURT = registerSoundEvent("nightmare_hurt"); - public static final DeferredHolder NIGHTMARE_ROAR = registerSoundEvent("nightmare_roar"); - public static final DeferredHolder NIGHTMARE_DEATH = registerSoundEvent("nightmare_death"); - public static final DeferredHolder NIGHTMARE_BITE = registerSoundEvent("nightmare_bite"); - public static final DeferredHolder NIGHTMARE_FLAP = registerSoundEvent("nightmare_flap"); - public static final DeferredHolder TRIFFID_ATTACK = registerSoundEvent("triffid_attack"); - public static final DeferredHolder TRIFFID_GRAB = registerSoundEvent("triffid_grab"); - public static final DeferredHolder TRIFFID_HURT = registerSoundEvent("triffid_hurt"); - public static final DeferredHolder TRIFFID_DEATH = registerSoundEvent("triffid_death"); - public static final DeferredHolder TRIFFID_HISS = registerSoundEvent("triffid_hiss"); - public static final DeferredHolder TRIFFID_GROWL = registerSoundEvent("triffid_growl"); - public static final DeferredHolder MANTIS_AMBIENT = registerSoundEvent("mantis_ambient"); - public static final DeferredHolder MANTIS_HURT = registerSoundEvent("mantis_hurt"); - public static final DeferredHolder MANTIS_ATTACK = registerSoundEvent("mantis_attack"); - public static final DeferredHolder MANTIS_FLY_LOOP = registerSoundEvent("mantis_fly_loop"); - public static final DeferredHolder GRAVITY_GUN_PICKUP = registerSoundEvent("gravity_gun_pickup"); - public static final DeferredHolder GRAVITY_GUN_DROP = registerSoundEvent("gravity_gun_drop"); - public static final DeferredHolder GRAVITY_GUN_HOLD_LOOP = registerSoundEvent("gravity_gun_hold_loop"); - public static final DeferredHolder GRAVITY_GUN_LAUNCH = registerSoundEvent("gravity_gun_launch"); - public static final DeferredHolder GRAVITY_GUN_DRYFIRE = registerSoundEvent("gravity_gun_dryfire"); - public static final DeferredHolder BED_BUG_AMBIENT = registerSoundEvent("bed_bug_ambient"); - public static final DeferredHolder BED_BUG_HURT = registerSoundEvent("bed_bug_hurt"); - public static final DeferredHolder BED_BUG_ATTACK = registerSoundEvent("bed_bug_attack"); - public static final DeferredHolder WASP_IDLE = registerSoundEvent("wasp_idle"); - public static final DeferredHolder WASP_HURT = registerSoundEvent("wasp_hurt"); - public static final DeferredHolder WASP_ATTACK = registerSoundEvent("wasp_attack"); - public static final DeferredHolder WASP_DEATH = registerSoundEvent("wasp_death"); - public static final DeferredHolder SCORPION_AMBIENT = registerSoundEvent("scorpion_ambient"); - public static final DeferredHolder SCORPION_HURT = registerSoundEvent("scorpion_hurt"); - public static final DeferredHolder SCORPION_ATTACK = registerSoundEvent("scorpion_attack"); - public static final DeferredHolder EMPEROR_SCORPION_AMBIENT = registerSoundEvent("emperor_scorpion_ambient"); - public static final DeferredHolder EMPEROR_SCORPION_HURT = registerSoundEvent("emperor_scorpion_hurt"); - public static final DeferredHolder EMPEROR_SCORPION_ATTACK = registerSoundEvent("emperor_scorpion_attack"); - public static final DeferredHolder EMPEROR_SCORPION_ROAR = registerSoundEvent("emperor_scorpion_roar"); - public static final DeferredHolder MOLEWORM_AMBIENT = registerSoundEvent("moleworm_ambient"); - public static final DeferredHolder MOLEWORM_HURT = registerSoundEvent("moleworm_hurt"); - public static final DeferredHolder MOLEWORM_ATTACK = registerSoundEvent("moleworm_attack"); - public static final DeferredHolder MOLEWORM_DIG = registerSoundEvent("moleworm_dig"); - public static final DeferredHolder MOLEVORE_AMBIENT = registerSoundEvent("molevore_ambient"); - public static final DeferredHolder MOLEVORE_HURT = registerSoundEvent("molevore_hurt"); - public static final DeferredHolder MOLEVORE_ATTACK = registerSoundEvent("molevore_attack"); - public static final DeferredHolder MOLEVORE_DIG = registerSoundEvent("molevore_dig"); - public static final DeferredHolder BOMBER_WALK = registerSoundEvent("bomber_walk"); - public static final DeferredHolder BOMBER_KNOCK = registerSoundEvent("bomber_knock"); - public static final DeferredHolder BOMBER_EXPLODE = registerSoundEvent("bomber_explode"); - public static final DeferredHolder TORETERROR_IDLE = registerSoundEvent("toreterror_idle"); - public static final DeferredHolder TORETERROR_HURT = registerSoundEvent("toreterror_hurt"); - public static final DeferredHolder TORETERROR_DEATH = registerSoundEvent("toreterror_death"); - public static final DeferredHolder TORETERROR_BOMBER_FIRE = registerSoundEvent("toreterror_bomber_fire"); - public static final DeferredHolder TORETERROR_SPIN = registerSoundEvent("toreterror_spin"); - public static final DeferredHolder TORETERROR_RICOCHET = registerSoundEvent("toreterror_ricochet"); - public static final DeferredHolder WATER_CANNON_FIRE = registerSoundEvent("water_cannon_fire"); - public static final DeferredHolder TORETERROR_JUMP_UP = registerSoundEvent("toreterror_jump_up"); - public static final DeferredHolder TORETERROR_JUMP_LAND = registerSoundEvent("toreterror_jump_land"); - public static final DeferredHolder STINKY_FLY_SOUND = registerSoundEvent("stinky_fly"); - public static final DeferredHolder CREEPING_HORROR_GROWL = registerSoundEvent("creeping_horror_growl"); - public static final DeferredHolder CREEPING_HORROR_HURT = registerSoundEvent("creeping_horror_hurt"); - public static final DeferredHolder CREEPING_HORROR_BITE = registerSoundEvent("creeping_horror_bite"); - public static final DeferredHolder LURKING_TERROR_SNARL = registerSoundEvent("lurking_terror_snarl"); - public static final DeferredHolder LURKING_TERROR_HURT = registerSoundEvent("lurking_terror_hurt"); - public static final DeferredHolder LURKING_TERROR_BITE = registerSoundEvent("lurking_terror_bite"); - public static final DeferredHolder LURKING_TERROR_FLY_LOOP = registerSoundEvent("lurking_terror_fly_loop"); - public static final DeferredHolder DUCT_TAPE_USE = registerSoundEvent("duct_tape_use"); - public static final DeferredHolder POTENT_NYXITE_HYPNOTIC_GAS = registerSoundEvent("potent_nyxite_hypnotic_gas"); - public static final DeferredHolder POTENT_NYXITE_GEYSER_ERUPTION_START = registerSoundEvent("potent_nyxite_geyser_eruption_start"); - public static final DeferredHolder POTENT_NYXITE_GEYSER_ERUPTION_ACTIVE = registerSoundEvent("potent_nyxite_geyser_eruption_active"); - public static final DeferredHolder POTENT_NYXITE_GEYSER_CONTINUOUS_START = registerSoundEvent("potent_nyxite_geyser_continuous_start"); - public static final DeferredHolder POTENT_NYXITE_GEYSER_CONTINUOUS_ACTIVE = registerSoundEvent("potent_nyxite_geyser_continuous_active"); - private static final DeferredHolder ULTIMATE_ARMOR_MATERIAL = ARMOR_MATERIALS.register("ultimate", - () -> new ArmorMaterial( - createUltimateArmorDefense(), - 10, - SoundEvents.ARMOR_EQUIP_DIAMOND, - AntarchyFabricContent::ultimateRepairIngredient, - List.of(new ArmorMaterial.Layer(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "ultimate_armor"))), - 2.0F, - (float) AntarchySettings.ultimateArmorKnockbackResistance() - )); - private static final DeferredHolder NIGHTMARE_ARMOR_MATERIAL = ARMOR_MATERIALS.register("nightmare", - () -> new ArmorMaterial( - createNightmareArmorDefense(), - 10, - SoundEvents.ARMOR_EQUIP_NETHERITE, - () -> Ingredient.of(NIGHTMARE_SCALE.get()), - List.of(new ArmorMaterial.Layer(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "nightmare_armor"))), - 3.0F, - (float) AntarchySettings.nightmareArmorKnockbackResistance() - )); - public static final DeferredItem PRIMORDIAL_SCUTE = ITEMS.registerSimpleItem("primordial_scute", - new Item.Properties().rarity(Rarity.UNCOMMON)); - private static final DeferredHolder PRIMORDIAL_ARMOR_MATERIAL = ARMOR_MATERIALS.register("primordial", - () -> new ArmorMaterial( - createPrimordialArmorDefense(), - 15, - SoundEvents.ARMOR_EQUIP_NETHERITE, - () -> Ingredient.of(PRIMORDIAL_SCUTE.get()), - List.of(new ArmorMaterial.Layer(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "primordial"))), - 3.0F, - 0.1F - )); - private static final DeferredHolder BLOOD_CRYSTAL_ARMOR_MATERIAL = ARMOR_MATERIALS.register("blood_crystal", - () -> new ArmorMaterial( - createBloodCrystalArmorDefense(), - 30, - SoundEvents.ARMOR_EQUIP_DIAMOND, - AntarchyFabricContent::bloodCrystalRepairIngredient, - List.of(new ArmorMaterial.Layer(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "blood_crystal"))), - 0.0F, - 0.0F - )); - private static final DeferredHolder MOGGLES_ARMOR_MATERIAL = ARMOR_MATERIALS.register("moggles", - () -> new ArmorMaterial( - createMogglesArmorDefense(), - 12, - SoundEvents.ARMOR_EQUIP_GOLD, - () -> Ingredient.of(Items.GOLD_INGOT), - List.of(new ArmorMaterial.Layer(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "moggles"))), - 0.0F, - 0.0F - )); - private static final DeferredHolder FALLEN_KING_CROWN_ARMOR_MATERIAL = ARMOR_MATERIALS.register("fallen_king_crown", - () -> new ArmorMaterial( - createFallenKingCrownDefense(), - 25, - SoundEvents.ARMOR_EQUIP_GOLD, - () -> Ingredient.of(Items.GOLD_INGOT), - List.of(new ArmorMaterial.Layer(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "fallen_king_crown"))), - 0.0F, - 0.0F - )); - public static final DeferredBlock DUPLICATOR_LOG = BLOCKS.register("duplicator_log", - () -> new DuplicatorLogBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.OAK_LOG).randomTicks())); - public static final DeferredBlock OURANWOOD_LOG = BLOCKS.register("ouranwood_log", - () -> new OuranwoodLogBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_LOG))); - public static final DeferredBlock OURANWOOD_WOOD = BLOCKS.register("ouranwood_wood", - () -> new OuranwoodLogBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_WOOD))); - public static final DeferredBlock MOSSY_OURANWOOD_LOG = BLOCKS.register("mossy_ouranwood_log", - () -> new OuranwoodLogBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_LOG))); - public static final DeferredBlock MOSSY_OURANWOOD_WOOD = BLOCKS.register("mossy_ouranwood_wood", - () -> new OuranwoodLogBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_WOOD))); - public static final DeferredBlock STRIPPED_OURANWOOD_LOG = BLOCKS.register("stripped_ouranwood_log", - () -> new OuranwoodLogBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.STRIPPED_JUNGLE_LOG))); - public static final DeferredBlock STRIPPED_OURANWOOD_WOOD = BLOCKS.register("stripped_ouranwood_wood", - () -> new OuranwoodLogBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.STRIPPED_JUNGLE_WOOD))); - public static final DeferredBlock OURANWOOD_PLANKS = BLOCKS.register("ouranwood_planks", - () -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_PLANKS))); - public static final DeferredBlock OURANWOOD_STAIRS = BLOCKS.register("ouranwood_stairs", - () -> new net.minecraft.world.level.block.StairBlock(OURANWOOD_PLANKS.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_STAIRS))); - public static final DeferredBlock OURANWOOD_SLAB = BLOCKS.register("ouranwood_slab", - () -> new net.minecraft.world.level.block.SlabBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_SLAB))); - public static final DeferredBlock OURANWOOD_FENCE = BLOCKS.register("ouranwood_fence", - () -> new net.minecraft.world.level.block.FenceBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_FENCE))); - public static final DeferredBlock OURANWOOD_FENCE_GATE = BLOCKS.register("ouranwood_fence_gate", - () -> new net.minecraft.world.level.block.FenceGateBlock(net.minecraft.world.level.block.state.properties.WoodType.JUNGLE, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_FENCE_GATE))); - public static final DeferredBlock OURANWOOD_DOOR = BLOCKS.register("ouranwood_door", - () -> new net.minecraft.world.level.block.DoorBlock(net.minecraft.world.level.block.state.properties.BlockSetType.JUNGLE, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_DOOR))); - public static final DeferredBlock OURANWOOD_TRAPDOOR = BLOCKS.register("ouranwood_trapdoor", - () -> new net.minecraft.world.level.block.TrapDoorBlock(net.minecraft.world.level.block.state.properties.BlockSetType.JUNGLE, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_TRAPDOOR))); - public static final DeferredBlock OURANWOOD_PRESSURE_PLATE = BLOCKS.register("ouranwood_pressure_plate", - () -> new net.minecraft.world.level.block.PressurePlateBlock(net.minecraft.world.level.block.state.properties.BlockSetType.JUNGLE, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_PRESSURE_PLATE))); - public static final DeferredBlock OURANWOOD_BUTTON = BLOCKS.register("ouranwood_button", - () -> new net.minecraft.world.level.block.ButtonBlock(net.minecraft.world.level.block.state.properties.BlockSetType.JUNGLE, 30, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_BUTTON))); - public static final DeferredBlock OURANWOOD_LEAVES = BLOCKS.register("ouranwood_leaves", - () -> new OuranwoodLeavesBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_LEAVES).randomTicks())); - public static final DeferredBlock OURANWOOD_ACORN_BLOCK = BLOCKS.register("ouranwood_acorn", - () -> new OuranwoodAcornBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.OAK_SAPLING).randomTicks().noCollission())); - // public static final DeferredBlock OURANWOOD_VINE = BLOCKS.register("ouranwood_vine", - // () -> OURANWOOD_VINE_INSTANCE); - // public static final DeferredBlock OURANWOOD_VINE_PLANT = BLOCKS.register("ouranwood_vine_plant", - // () -> OURANWOOD_VINE_PLANT_INSTANCE); - public static final DeferredBlock ORANGE_MILKWEED = BLOCKS.register("orange_milkweed", - () -> new MilkweedBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.PEONY))); - public static final DeferredBlock PINK_MILKWEED = BLOCKS.register("pink_milkweed", - () -> new MilkweedBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.PEONY))); - public static final DeferredBlock OURANWOOD_SIGN = BLOCKS.register("ouranwood_sign", - () -> new net.minecraft.world.level.block.StandingSignBlock(OuranwoodWoodTypes.OURANWOOD, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_SIGN))); - public static final DeferredBlock OURANWOOD_WALL_SIGN = BLOCKS.register("ouranwood_wall_sign", - () -> new net.minecraft.world.level.block.WallSignBlock(OuranwoodWoodTypes.OURANWOOD, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_WALL_SIGN))); - public static final DeferredBlock OURANWOOD_HANGING_SIGN = BLOCKS.register("ouranwood_hanging_sign", - () -> new net.minecraft.world.level.block.CeilingHangingSignBlock(OuranwoodWoodTypes.OURANWOOD, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_HANGING_SIGN))); - public static final DeferredBlock OURANWOOD_WALL_HANGING_SIGN = BLOCKS.register("ouranwood_wall_hanging_sign", - () -> new net.minecraft.world.level.block.WallHangingSignBlock(OuranwoodWoodTypes.OURANWOOD, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_WALL_HANGING_SIGN))); - public static final DeferredBlock DUPLICATOR_SAPLING = BLOCKS.register("duplicator_sapling", - () -> new DuplicatorSaplingBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.OAK_SAPLING).randomTicks().noCollission())); - public static final DeferredBlock DUCT_TAPE = BLOCKS.register("duct_tape", - () -> new DuctTapeBlock(BlockBehaviour.Properties.of() - .strength(0.2F) - .sound(SoundType.WOOL) - .noOcclusion() - .replaceable())); - public static final DeferredBlock INFESTED_ROOTED_DIRT = BLOCKS.register("infested_rooted_dirt", - () -> new InfestedRootedDirtBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.ROOTED_DIRT).randomTicks())); - public static final DeferredBlock INFESTED_COARSE_DIRT = BLOCKS.register("infested_coarse_dirt", - () -> new InfestedCoarseDirtBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.COARSE_DIRT).randomTicks())); - public static final DeferredBlock NYXITE = BLOCKS.register("nyxite", - () -> new Block(nyxiteProperties())); - public static final DeferredBlock POLISHED_NYXITE = BLOCKS.register("polished_nyxite", - () -> new Block(nyxiteProperties())); - public static final DeferredBlock CHISELED_NYXITE = BLOCKS.register("chiseled_nyxite", - () -> new Block(nyxiteProperties())); - public static final DeferredBlock NYXITE_BRICKS = BLOCKS.register("nyxite_bricks", - () -> new Block(nyxiteProperties())); - public static final DeferredBlock NYXITE_STAIRS = BLOCKS.register("nyxite_stairs", - () -> new net.minecraft.world.level.block.StairBlock(NYXITE.get().defaultBlockState(), nyxiteProperties())); - public static final DeferredBlock NYXITE_SLAB = BLOCKS.register("nyxite_slab", - () -> new net.minecraft.world.level.block.SlabBlock(nyxiteProperties())); - public static final DeferredBlock NYXITE_WALL = BLOCKS.register("nyxite_wall", - () -> new net.minecraft.world.level.block.WallBlock(nyxiteProperties())); - public static final DeferredBlock POLISHED_NYXITE_STAIRS = BLOCKS.register("polished_nyxite_stairs", - () -> new net.minecraft.world.level.block.StairBlock(POLISHED_NYXITE.get().defaultBlockState(), nyxiteProperties())); - public static final DeferredBlock POLISHED_NYXITE_SLAB = BLOCKS.register("polished_nyxite_slab", - () -> new net.minecraft.world.level.block.SlabBlock(nyxiteProperties())); - public static final DeferredBlock POLISHED_NYXITE_WALL = BLOCKS.register("polished_nyxite_wall", - () -> new net.minecraft.world.level.block.WallBlock(nyxiteProperties())); - public static final DeferredBlock NYXITE_BRICK_STAIRS = BLOCKS.register("nyxite_brick_stairs", - () -> new net.minecraft.world.level.block.StairBlock(NYXITE_BRICKS.get().defaultBlockState(), nyxiteProperties())); - public static final DeferredBlock NYXITE_BRICK_SLAB = BLOCKS.register("nyxite_brick_slab", - () -> new net.minecraft.world.level.block.SlabBlock(nyxiteProperties())); - public static final DeferredBlock NYXITE_BRICK_WALL = BLOCKS.register("nyxite_brick_wall", - () -> new net.minecraft.world.level.block.WallBlock(nyxiteProperties())); - public static final DeferredBlock SHELLSTONE = BLOCKS.register("shellstone", - () -> new Block(AntarchyObjects.shellstoneProperties())); - public static final DeferredBlock POLISHED_SHELLSTONE = BLOCKS.register("polished_shellstone", - () -> new Block(AntarchyObjects.shellstoneProperties())); - public static final DeferredBlock SHELLSTONE_BRICKS = BLOCKS.register("shellstone_bricks", - () -> new Block(AntarchyObjects.shellstoneProperties())); - public static final DeferredBlock CHISELED_SHELLSTONE = BLOCKS.register("chiseled_shellstone", - () -> new Block(AntarchyObjects.shellstoneProperties())); - public static final DeferredBlock MOSSY_SHELLSTONE_BRICKS = BLOCKS.register("mossy_shellstone_bricks", - () -> new Block(AntarchyObjects.shellstoneProperties())); - public static final DeferredBlock CRACKED_SHELLSTONE_BRICKS = BLOCKS.register("cracked_shellstone_bricks", - () -> new Block(AntarchyObjects.shellstoneProperties())); - public static final DeferredBlock MOSSY_SHELLSTONE_BRICK_STAIRS = BLOCKS.register("mossy_shellstone_brick_stairs", - () -> new net.minecraft.world.level.block.StairBlock(MOSSY_SHELLSTONE_BRICKS.get().defaultBlockState(), AntarchyObjects.shellstoneProperties())); - public static final DeferredBlock MOSSY_SHELLSTONE_BRICK_SLAB = BLOCKS.register("mossy_shellstone_brick_slab", - () -> new net.minecraft.world.level.block.SlabBlock(AntarchyObjects.shellstoneProperties())); - public static final DeferredBlock MOSSY_SHELLSTONE_BRICK_WALL = BLOCKS.register("mossy_shellstone_brick_wall", - () -> new net.minecraft.world.level.block.WallBlock(AntarchyObjects.shellstoneProperties())); - public static final DeferredBlock SHELLSTONE_STAIRS = BLOCKS.register("shellstone_stairs", - () -> new net.minecraft.world.level.block.StairBlock(SHELLSTONE.get().defaultBlockState(), AntarchyObjects.shellstoneProperties())); - public static final DeferredBlock SHELLSTONE_SLAB = BLOCKS.register("shellstone_slab", - () -> new net.minecraft.world.level.block.SlabBlock(AntarchyObjects.shellstoneProperties())); - public static final DeferredBlock SHELLSTONE_WALL = BLOCKS.register("shellstone_wall", - () -> new net.minecraft.world.level.block.WallBlock(AntarchyObjects.shellstoneProperties())); - public static final DeferredBlock POLISHED_SHELLSTONE_STAIRS = BLOCKS.register("polished_shellstone_stairs", - () -> new net.minecraft.world.level.block.StairBlock(POLISHED_SHELLSTONE.get().defaultBlockState(), AntarchyObjects.shellstoneProperties())); - public static final DeferredBlock POLISHED_SHELLSTONE_SLAB = BLOCKS.register("polished_shellstone_slab", - () -> new net.minecraft.world.level.block.SlabBlock(AntarchyObjects.shellstoneProperties())); - public static final DeferredBlock POLISHED_SHELLSTONE_WALL = BLOCKS.register("polished_shellstone_wall", - () -> new net.minecraft.world.level.block.WallBlock(AntarchyObjects.shellstoneProperties())); - public static final DeferredBlock SHELLSTONE_BRICK_STAIRS = BLOCKS.register("shellstone_brick_stairs", - () -> new net.minecraft.world.level.block.StairBlock(SHELLSTONE_BRICKS.get().defaultBlockState(), AntarchyObjects.shellstoneProperties())); - public static final DeferredBlock SHELLSTONE_BRICK_SLAB = BLOCKS.register("shellstone_brick_slab", - () -> new net.minecraft.world.level.block.SlabBlock(AntarchyObjects.shellstoneProperties())); - public static final DeferredBlock SHELLSTONE_BRICK_WALL = BLOCKS.register("shellstone_brick_wall", - () -> new net.minecraft.world.level.block.WallBlock(AntarchyObjects.shellstoneProperties())); - public static final DeferredBlock TRIFFID_GOO_BLOCK = BLOCKS.register("triffid_goo_block", - () -> new com.craisinlord.antarchy.content.block.TriffidGooBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SLIME_BLOCK).noOcclusion().isViewBlocking((s, l, p) -> false).isSuffocating((s, l, p) -> false))); - public static final DeferredBlock CLOUD_BLOCK = BLOCKS.register("cloud_block", - () -> new com.craisinlord.antarchy.content.block.CloudBlock( - AntarchyFabricContent::cloudBucketItem, - BlockBehaviour.Properties.ofFullCopy(Blocks.POWDER_SNOW).noLootTable().noOcclusion() - )); - public static final DeferredBlock ELYTHIA_PORTAL = BLOCKS.register("elythia_portal", - () -> new AntDimensionPortalBlock(PermanentPortalType.ELYTHIA, portalProperties())); - public static final DeferredBlock THORAXIS_PORTAL = BLOCKS.register("thoraxis_portal", - () -> new AntDimensionPortalBlock(PermanentPortalType.THORAXIS, portalProperties())); - public static final DeferredBlock PALE_NYXITE = BLOCKS.register("pale_nyxite", - () -> new Block(nyxiteProperties())); - public static final DeferredBlock NYXITE_SPIKE = BLOCKS.register("nyxite_spike", - () -> new NyxiteSpikeBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.POINTED_DRIPSTONE))); - public static final DeferredBlock POTENT_NYXITE = BLOCKS.register("potent_nyxite", - () -> new PotentNyxiteBlock( - AntarchyFabricContent::potentNyxiteBlockEntityType, - BlockBehaviour.Properties.ofFullCopy(Blocks.NETHERRACK).lightLevel(state -> 3) - )); - public static final DeferredBlock UMBRAL_MOSS_BLOCK = BLOCKS.register("umbral_moss_block", - () -> new UmbralMossBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.MOSS_BLOCK))); - public static final DeferredBlock UMBRAL_MOSS_CARPET = BLOCKS.register("umbral_moss_carpet", - () -> new UmbralMossCarpetBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.MOSS_CARPET).noOcclusion())); - public static final DeferredHolder, SimpleParticleType> DREAM_FIRE_FLAME = PARTICLE_TYPES.register("dream_fire_flame", - () -> simpleParticleType()); - public static final DeferredHolder, SimpleParticleType> STINKY_GAS = PARTICLE_TYPES.register("stinky_gas", - () -> simpleParticleType()); - public static final DeferredHolder, SimpleParticleType> STINKY_FLY = PARTICLE_TYPES.register("stinky_fly", - () -> simpleParticleType()); - public static final DeferredHolder, SimpleParticleType> HYPNOTIC_GAS = PARTICLE_TYPES.register("hypnotic_gas", - () -> simpleParticleType()); - public static final DeferredHolder, SimpleParticleType> HYPNOTIC_GAS_CLOUD = PARTICLE_TYPES.register("hypnotic_gas_cloud", - () -> simpleParticleType()); - public static final DeferredHolder, SimpleParticleType> HYPNOTIC_GAS_DOWN = PARTICLE_TYPES.register("hypnotic_gas_down", - () -> simpleParticleType()); - public static final DeferredHolder, SimpleParticleType> HYPNOTIC_GAS_CLOUD_DOWN = PARTICLE_TYPES.register("hypnotic_gas_cloud_down", - () -> simpleParticleType()); - public static final DeferredHolder, SimpleParticleType> FIREFLY = PARTICLE_TYPES.register("firefly", - () -> simpleParticleType()); - public static final DeferredHolder, SimpleParticleType> ORANGE_ASH = PARTICLE_TYPES.register("orange_ash", - () -> simpleParticleType()); - public static final DeferredHolder, ParticleType> INVERTED_GEYSER_BASE = PARTICLE_TYPES.register("inverted_geyser_base", - () -> particleType(InvertedGeyserBaseParticleOptions::codec, InvertedGeyserBaseParticleOptions::streamCodec)); - public static final DeferredHolder, ParticleType> INVERTED_GEYSER_PLUME = PARTICLE_TYPES.register("inverted_geyser_plume", - () -> particleType(InvertedGeyserParticleOptions::codec, InvertedGeyserParticleOptions::streamCodec)); - public static final DeferredHolder, ParticleType> INVERTED_GEYSER_POOF = PARTICLE_TYPES.register("inverted_geyser_poof", - () -> particleType(InvertedGeyserBaseParticleOptions::codec, InvertedGeyserBaseParticleOptions::streamCodec)); - public static final DeferredHolder, ParticleType> INVERTED_GEYSER_ERUPTION = PARTICLE_TYPES.register("inverted_geyser_eruption", - () -> particleType(InvertedGeyserParticleOptions::codec, InvertedGeyserParticleOptions::streamCodec)); - public static final DeferredBlock DREAM_TORCH = BLOCKS.register("dream_torch", - () -> new DreamTorchBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SOUL_TORCH))); - public static final DeferredBlock DREAM_WALL_TORCH = BLOCKS.register("dream_wall_torch", - () -> new DreamWallTorchBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SOUL_WALL_TORCH))); - public static final DeferredBlock DREAM_LANTERN = BLOCKS.register("dream_lantern", - () -> new net.minecraft.world.level.block.LanternBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SOUL_LANTERN))); - public static final DeferredBlock DREAM_CAMPFIRE = BLOCKS.register("dream_campfire", - () -> new DreamCampfireBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SOUL_CAMPFIRE))); - public static final DeferredBlock DREAM_FIRE = BLOCKS.register("dream_fire", - () -> new DreamFireBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SOUL_FIRE))); - public static final DeferredBlock DREAM_CEILING_FIRE = BLOCKS.register("dream_fire_ceiling", - () -> new DreamCeilingFireBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SOUL_FIRE))); - public static final DeferredBlock BED_BUG_EGG = BLOCKS.register("bed_bug_egg", - () -> new BedBugEggBlock(BlockBehaviour.Properties.of() - .strength(0.15F) - .sound(SoundType.METAL) - .randomTicks() - .noOcclusion() - .noCollission() - .replaceable())); - public static final DeferredBlock WASP_NEST = BLOCKS.register("wasp_nest", - () -> new WaspNestBlock(AntarchyFabricContent::waspNestBlockEntityType, BlockBehaviour.Properties.ofFullCopy(Blocks.BEE_NEST))); - public static final DeferredBlock OURANWOOD_SQUIRREL_NEST = BLOCKS.register("ouranwood_squirrel_nest", - () -> new com.craisinlord.antarchy.content.block.OuranwoodSquirrelNestBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.COARSE_DIRT).noLootTable())); - public static final DeferredBlock BRUTALFLY_COCOON_SPAWNER = BLOCKS.register("brutalfly_cocoon_spawner", - () -> new com.craisinlord.antarchy.content.block.BrutalflyCocoonSpawnerBlock(BlockBehaviour.Properties.of().noCollission().instabreak().noLootTable())); - public static final DeferredBlock HUSHWEED = BLOCKS.register("hushweed", - () -> new HushweedBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.AZALEA).noCollission().noOcclusion())); - public static final DeferredHolder DREAD = MOB_EFFECTS.register("dread", DreadMobEffect::new); - public static final DeferredHolder PARALYZED = MOB_EFFECTS.register("paralyzed", ParalyzedMobEffect::new); - public static final DeferredHolder INVERTED = MOB_EFFECTS.register("inverted", InvertedMobEffect::new); - public static final DeferredHolder STINKY = MOB_EFFECTS.register("stinky", StinkyMobEffect::new); - public static final DeferredHolder BLOODGLASS_WARD = MOB_EFFECTS.register("bloodglass_ward", com.craisinlord.antarchy.content.effect.BloodglassWardEffect::new); - private static final DeferredHolder BLOODGLASS_MAX_HEARTS = ATTRIBUTES.register( - "bloodglass_max_hearts", - () -> new net.minecraft.world.entity.ai.attributes.RangedAttribute("attribute.antarchy.bloodglass_max_hearts", 0.0, 0.0, 8.0).setSyncable(true) - ); - public static final DeferredHolder DREAD_POTION = POTIONS.register("dread", - () -> new Potion(new MobEffectInstance(mobEffectHolder(DREAD), 600))); - public static final DeferredHolder LONG_DREAD = POTIONS.register("long_dread", - () -> new Potion("dread", new MobEffectInstance(mobEffectHolder(DREAD), 2400))); - public static final DeferredHolder INVERSION = POTIONS.register("inversion", - () -> new Potion(new MobEffectInstance(mobEffectHolder(INVERTED), 600))); - public static final DeferredHolder LONG_INVERSION = POTIONS.register("long_inversion", - () -> new Potion("inversion", new MobEffectInstance(mobEffectHolder(INVERTED), 2400))); - public static final DeferredHolder STINKY_POTION = POTIONS.register("stinky", - () -> new Potion(new MobEffectInstance(mobEffectHolder(STINKY), 1200))); - public static final DeferredHolder LONG_STINKY = POTIONS.register("long_stinky", - () -> new Potion("stinky", new MobEffectInstance(mobEffectHolder(STINKY), 2400))); - public static final DeferredHolder SHRINKING_EFFECT = MOB_EFFECTS.register("shrinking", ShrinkMobEffect::new); - public static final DeferredHolder GROWTH_EFFECT = MOB_EFFECTS.register("growth", GrowthMobEffect::new); - // public static final DeferredHolder GLIMMERS_GRACE = MOB_EFFECTS.register("glimmers_grace", com.craisinlord.antarchy.content.effect.GlimmersGraceMobEffect::new); - public static final DeferredHolder PARALYSIS = POTIONS.register("paralysis", - () -> new Potion(new MobEffectInstance(mobEffectHolder(PARALYZED), 200))); - public static final DeferredHolder LONG_PARALYSIS = POTIONS.register("long_paralysis", - () -> new Potion("paralysis", new MobEffectInstance(mobEffectHolder(PARALYZED), 400))); - public static final DeferredHolder HASTE = POTIONS.register("haste", - () -> new Potion(new MobEffectInstance(MobEffects.DIG_SPEED, 1200, 0))); - public static final DeferredHolder STRONG_HASTE = POTIONS.register("strong_haste", - () -> new Potion("haste", new MobEffectInstance(MobEffects.DIG_SPEED, 600, 1))); - public static final DeferredHolder SHRINKING = POTIONS.register("shrinking", - () -> new Potion(new MobEffectInstance(mobEffectHolder(SHRINKING_EFFECT), 1200, 0))); - public static final DeferredHolder STRONG_SHRINKING = POTIONS.register("strong_shrinking", - () -> new Potion("shrinking", new MobEffectInstance(mobEffectHolder(SHRINKING_EFFECT), 900, 1))); - public static final DeferredHolder EXTREME_SHRINKING = POTIONS.register("extreme_shrinking", - () -> new Potion("shrinking", new MobEffectInstance(mobEffectHolder(SHRINKING_EFFECT), 600, 2))); - public static final DeferredHolder GROWING = POTIONS.register("growing", - () -> new Potion(new MobEffectInstance(mobEffectHolder(GROWTH_EFFECT), 1200, 0))); - public static final DeferredHolder STRONG_GROWING = POTIONS.register("strong_growing", - () -> new Potion("growing", new MobEffectInstance(mobEffectHolder(GROWTH_EFFECT), 900, 1))); - public static final DeferredHolder EXTREME_GROWING = POTIONS.register("extreme_growing", - () -> new Potion("growing", new MobEffectInstance(mobEffectHolder(GROWTH_EFFECT), 600, 2))); - public static final DeferredHolder BILE = FLUIDS.register("bile", - () -> new com.craisinlord.antarchy.fabric.content.fluid.SimpleFluid.Source( - () -> lookupFlowingFluid("bile"), - () -> lookupFlowingFluid("flowing_bile"), - () -> lookupItem("bile_bucket"), - "bile", - 4, - 1, - 5 - )); - public static final DeferredHolder FLOWING_BILE = FLUIDS.register("flowing_bile", - () -> new com.craisinlord.antarchy.fabric.content.fluid.SimpleFluid.Flowing( - () -> lookupFlowingFluid("bile"), - () -> lookupFlowingFluid("flowing_bile"), - () -> lookupItem("bile_bucket"), - "bile", - 4, - 1, - 5 - )); - public static final DeferredBlock BILE_BLOCK = BLOCKS.register("bile", - () -> new BileLiquidBlock((net.minecraft.world.level.material.FlowingFluid) BILE.get(), BlockBehaviour.Properties.ofFullCopy(Blocks.WATER).lightLevel(state -> 5).noLootTable())); - public static final DeferredHolder ICHOR = FLUIDS.register("ichor", - () -> new com.craisinlord.antarchy.fabric.content.fluid.SimpleFluid.Source( - () -> lookupFlowingFluid("ichor"), - () -> lookupFlowingFluid("flowing_ichor"), - () -> lookupItem("ichor_bucket"), - "ichor", - 4, - 1, - 5 - )); - public static final DeferredHolder FLOWING_ICHOR = FLUIDS.register("flowing_ichor", - () -> new com.craisinlord.antarchy.fabric.content.fluid.SimpleFluid.Flowing( - () -> lookupFlowingFluid("ichor"), - () -> lookupFlowingFluid("flowing_ichor"), - () -> lookupItem("ichor_bucket"), - "ichor", - 4, - 1, - 5 - )); - public static final DeferredBlock ICHOR_BLOCK = BLOCKS.register("ichor", - () -> new LiquidBlock((net.minecraft.world.level.material.FlowingFluid) ICHOR.get(), BlockBehaviour.Properties.ofFullCopy(Blocks.WATER).noLootTable())); - public static final DeferredHolder ANTIWATER = FLUIDS.register("antiwater", - AntiwaterFluid.Source::new); - public static final DeferredHolder FLOWING_ANTIWATER = FLUIDS.register("flowing_antiwater", - AntiwaterFluid.Flowing::new); - public static final DeferredBlock ANTIWATER_BLOCK = BLOCKS.register("antiwater", - () -> new AntiwaterLiquidBlock((net.minecraft.world.level.material.FlowingFluid) ANTIWATER.get(), - BlockBehaviour.Properties.ofFullCopy(Blocks.WATER).noLootTable())); - public static final DeferredHolder, EntityType> RED_ANT = ENTITY_TYPES.register("red_ant", - () -> buildAntType(RedAntEntity::new, MobCategory.CREATURE, "red_ant")); - public static final DeferredHolder, EntityType> BROWN_ANT = ENTITY_TYPES.register("brown_ant", - () -> buildAntType(BrownAntEntity::new, MobCategory.CREATURE, "brown_ant")); - public static final DeferredHolder, EntityType> RAINBOW_ANT = ENTITY_TYPES.register("rainbow_ant", - () -> buildAntType(RainbowAntEntity::new, MobCategory.CREATURE, "rainbow_ant")); - public static final DeferredHolder, EntityType> MOLEWORM = ENTITY_TYPES.register("moleworm", - () -> EntityType.Builder.of(MolewormEntity::new, MobCategory.MONSTER) - .sized(0.4F, 0.3F) - .clientTrackingRange(8) - .build("moleworm")); - public static final DeferredHolder, EntityType> MANTIS = ENTITY_TYPES.register("mantis", - () -> EntityType.Builder.of(MantisEntity::new, MobCategory.MONSTER) - .sized(3.125F, 2.5F) - .clientTrackingRange(8) - .build("mantis")); - public static final DeferredHolder, EntityType> ALPHA_MANTIS = ENTITY_TYPES.register("alpha_mantis", - () -> EntityType.Builder.of(AlphaMantisEntity::new, MobCategory.MONSTER) - .sized(4.25F, 3.35F) - .clientTrackingRange(10) - .build("alpha_mantis")); - public static final DeferredHolder, EntityType> OURANWOOD_BOAT_ENTITY = ENTITY_TYPES.register("ouranwood_boat", - () -> EntityType.Builder.of(OuranwoodBoatEntity::new, MobCategory.MISC) - .sized(1.375F, 0.5625F) - .clientTrackingRange(10) - .updateInterval(10) - .build("ouranwood_boat")); - public static final DeferredHolder, EntityType> OURANWOOD_CHEST_BOAT_ENTITY = ENTITY_TYPES.register("ouranwood_chest_boat", - () -> EntityType.Builder.of(OuranwoodChestBoatEntity::new, MobCategory.MISC) - .sized(1.375F, 0.5625F) - .clientTrackingRange(10) - .updateInterval(10) - .build("ouranwood_chest_boat")); - public static final DeferredHolder, EntityType> MOLEVORE = ENTITY_TYPES.register("molevore", - () -> EntityType.Builder.of(MolevoreEntity::new, MobCategory.MONSTER) - .sized(1.95F, 1.1F) - .clientTrackingRange(10) - .build("molevore")); - public static final DeferredHolder, EntityType> TRIFFID = ENTITY_TYPES.register("triffid", - () -> EntityType.Builder.of(TriffidEntity::new, MobCategory.MONSTER) - .sized(2.0F, 5.0F) - .clientTrackingRange(10) - .build("triffid")); - public static final DeferredHolder, EntityType> BED_BUG = ENTITY_TYPES.register("bed_bug", - () -> EntityType.Builder.of(BedBugEntity::new, MobCategory.CREATURE) - .sized(1.15F, 0.8F) - .clientTrackingRange(8) - .build("bed_bug")); - public static final DeferredHolder, EntityType> WASP = ENTITY_TYPES.register("wasp", - () -> EntityType.Builder.of(WaspEntity::new, MobCategory.MONSTER) - .sized(0.8625F, 1.365F) - .clientTrackingRange(8) - .build("wasp")); - public static final DeferredHolder, EntityType> BOMBER = ENTITY_TYPES.register("bomber", - () -> EntityType.Builder.of(BomberEntity::new, MobCategory.MONSTER) - .sized(0.55F, 0.75F) - .clientTrackingRange(8) - .build("bomber")); - public static final DeferredHolder, EntityType> SHRINK_RAY_PROJECTILE = ENTITY_TYPES.register("shrink_ray_projectile", - () -> EntityType.Builder.of(SizeRayProjectileEntity::createShrink, MobCategory.MISC) - .sized(0.5F, 0.5F) - .clientTrackingRange(8) - .updateInterval(1) - .build("shrink_ray_projectile")); - public static final DeferredHolder, EntityType> GROWTH_RAY_PROJECTILE = ENTITY_TYPES.register("growth_ray_projectile", - () -> EntityType.Builder.of(SizeRayProjectileEntity::createGrowth, MobCategory.MISC) - .sized(0.5F, 0.5F) - .clientTrackingRange(8) - .updateInterval(1) - .build("growth_ray_projectile")); - public static final DeferredBlock RED_ANT_NEST = BLOCKS.register("red_ant_nest", - () -> new AntNestBlock( - RED_ANT, - AntarchyFabricContent::antNestBlockEntityType, - true, - BlockBehaviour.Properties.ofFullCopy(Blocks.MAGMA_BLOCK).lightLevel(state -> 3).noLootTable() - )); - public static final DeferredBlock BROWN_ANT_NEST = BLOCKS.register("brown_ant_nest", - () -> new AntNestBlock(BROWN_ANT, AntarchyFabricContent::antNestBlockEntityType, BlockBehaviour.Properties.ofFullCopy(Blocks.DIRT).noLootTable())); - public static final DeferredBlock RAINBOW_ANT_NEST = BLOCKS.register("rainbow_ant_nest", - () -> new AntNestBlock(RAINBOW_ANT, AntarchyFabricContent::antNestBlockEntityType, BlockBehaviour.Properties.ofFullCopy(Blocks.DIRT).noLootTable())); - public static final DeferredBlock URANIUM_ORE = BLOCKS.register("uranium_ore", - () -> createOre(Blocks.EMERALD_ORE, 4, 8)); - public static final DeferredBlock DEEPSLATE_URANIUM_ORE = BLOCKS.register("deepslate_uranium_ore", - () -> createOre(Blocks.DEEPSLATE_EMERALD_ORE, 4, 8)); - public static final DeferredBlock TITANIUM_ORE = BLOCKS.register("titanium_ore", - () -> createOre(Blocks.DIAMOND_ORE, 4, 8)); - public static final DeferredBlock DEEPSLATE_TITANIUM_ORE = BLOCKS.register("deepslate_titanium_ore", - () -> createOre(Blocks.DEEPSLATE_DIAMOND_ORE, 4, 8)); - public static final DeferredBlock URANIUM_BLOCK = BLOCKS.register("uranium_block", - () -> createStorageBlock(Blocks.EMERALD_BLOCK)); - public static final DeferredBlock TITANIUM_BLOCK = BLOCKS.register("titanium_block", - () -> createStorageBlock(Blocks.DIAMOND_BLOCK)); - public static final DeferredBlock RAW_URANIUM_BLOCK = BLOCKS.register("raw_uranium_block", - () -> createRawStorageBlock(Blocks.RAW_GOLD_BLOCK)); - public static final DeferredBlock RAW_TITANIUM_BLOCK = BLOCKS.register("raw_titanium_block", - () -> createRawStorageBlock(Blocks.RAW_IRON_BLOCK)); - public static final DeferredBlock CUT_URANIUM = BLOCKS.register("cut_uranium", - () -> createHorizontalFacingStorageBlock(Blocks.CUT_COPPER)); - public static final DeferredBlock CUT_TITANIUM = BLOCKS.register("cut_titanium", - () -> createHorizontalFacingStorageBlock(Blocks.CUT_COPPER)); - public static final DeferredBlock CUT_URANIUM_SLAB = BLOCKS.register("cut_uranium_slab", - () -> new net.minecraft.world.level.block.SlabBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.CUT_COPPER_SLAB))); - public static final DeferredBlock CUT_TITANIUM_SLAB = BLOCKS.register("cut_titanium_slab", - () -> new net.minecraft.world.level.block.SlabBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.CUT_COPPER_SLAB))); - public static final DeferredBlock CUT_URANIUM_STAIRS = BLOCKS.register("cut_uranium_stairs", - () -> new net.minecraft.world.level.block.StairBlock(CUT_URANIUM.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(Blocks.CUT_COPPER_STAIRS))); - public static final DeferredBlock CUT_TITANIUM_STAIRS = BLOCKS.register("cut_titanium_stairs", - () -> new net.minecraft.world.level.block.StairBlock(CUT_TITANIUM.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(Blocks.CUT_COPPER_STAIRS))); - public static final DeferredBlock CHISELED_URANIUM = BLOCKS.register("chiseled_uranium", - () -> createHorizontalFacingStorageBlock(Blocks.CHISELED_COPPER)); - public static final DeferredBlock CHISELED_TITANIUM = BLOCKS.register("chiseled_titanium", - () -> createHorizontalFacingStorageBlock(Blocks.CHISELED_COPPER)); - public static final DeferredBlock URANIUM_BULB = BLOCKS.register("uranium_bulb", - () -> new SignalSavingBulbBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.COPPER_BULB))); - public static final DeferredBlock TITANIUM_BULB = BLOCKS.register("titanium_bulb", - () -> new SignalSavingBulbBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.COPPER_BULB))); - public static final DeferredBlock URANIUM_DOOR = BLOCKS.register("uranium_door", - () -> new net.minecraft.world.level.block.DoorBlock(net.minecraft.world.level.block.state.properties.BlockSetType.IRON, BlockBehaviour.Properties.ofFullCopy(Blocks.IRON_DOOR))); - public static final DeferredBlock TITANIUM_DOOR = BLOCKS.register("titanium_door", - () -> new net.minecraft.world.level.block.DoorBlock(net.minecraft.world.level.block.state.properties.BlockSetType.IRON, BlockBehaviour.Properties.ofFullCopy(Blocks.IRON_DOOR))); - public static final DeferredBlock URANIUM_TRAPDOOR = BLOCKS.register("uranium_trapdoor", - () -> new net.minecraft.world.level.block.TrapDoorBlock(net.minecraft.world.level.block.state.properties.BlockSetType.IRON, BlockBehaviour.Properties.ofFullCopy(Blocks.IRON_TRAPDOOR))); - public static final DeferredBlock TITANIUM_TRAPDOOR = BLOCKS.register("titanium_trapdoor", - () -> new net.minecraft.world.level.block.TrapDoorBlock(net.minecraft.world.level.block.state.properties.BlockSetType.IRON, BlockBehaviour.Properties.ofFullCopy(Blocks.IRON_TRAPDOOR))); - public static final DeferredBlock URANIUM_BARS = BLOCKS.register("uranium_bars", - () -> new net.minecraft.world.level.block.IronBarsBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.IRON_BARS))); - public static final DeferredBlock TITANIUM_BARS = BLOCKS.register("titanium_bars", - () -> new net.minecraft.world.level.block.IronBarsBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.IRON_BARS))); - public static final DeferredBlock ANTIMETAL = BLOCKS.register("antimetal", - () -> new net.minecraft.world.level.block.RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.BASALT))); - public static final DeferredBlock POLISHED_ANTIMETAL = BLOCKS.register("polished_antimetal", - () -> new net.minecraft.world.level.block.RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.POLISHED_BASALT))); - public static final DeferredBlock ANTIMETAL_SCAFFOLDING = BLOCKS.register("antimetal_scaffolding", - () -> new com.craisinlord.antarchy.content.block.AntimetalScaffoldingBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SCAFFOLDING))); - public static final DeferredBlock CORNEA_STALK = BLOCKS.register("cornea_stalk", - () -> new CorneaStalkBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SWEET_BERRY_BUSH).randomTicks())); - public static final DeferredBlock FALLEN_KING_CROWN_BLOCK = BLOCKS.register("fallen_king_crown", - () -> new Block(BlockBehaviour.Properties.of() - .strength(0.2F) - .sound(SoundType.METAL) - .noOcclusion() - .isSuffocating((state, level, pos) -> false) - .isViewBlocking((state, level, pos) -> false))); - public static final DeferredBlock SMALL_BLOOD_CRYSTAL_BUD = BLOCKS.register("small_blood_crystal_bud", - () -> new AmethystClusterBlock(3.0F, 4.0F, BlockBehaviour.Properties.ofFullCopy(Blocks.SMALL_AMETHYST_BUD))); - public static final DeferredBlock MEDIUM_BLOOD_CRYSTAL_BUD = BLOCKS.register("medium_blood_crystal_bud", - () -> new AmethystClusterBlock(4.0F, 3.0F, BlockBehaviour.Properties.ofFullCopy(Blocks.MEDIUM_AMETHYST_BUD))); - public static final DeferredBlock LARGE_BLOOD_CRYSTAL_BUD = BLOCKS.register("large_blood_crystal_bud", - () -> new AmethystClusterBlock(5.0F, 3.0F, BlockBehaviour.Properties.ofFullCopy(Blocks.LARGE_AMETHYST_BUD))); - public static final DeferredBlock BUDDING_BLOOD_CRYSTAL = BLOCKS.register("budding_blood_crystal", - () -> new BuddingBloodCrystalBlock( - BlockBehaviour.Properties.ofFullCopy(Blocks.BUDDING_AMETHYST), - AntarchyFabricContent::smallBloodCrystalBudBlock, - AntarchyFabricContent::mediumBloodCrystalBudBlock, - AntarchyFabricContent::largeBloodCrystalBudBlock, - AntarchyFabricContent::bloodCrystalCrystalBlock - )); - public static final DeferredBlock BLOOD_CRYSTAL = BLOCKS.register("blood_crystal_block", - () -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.AMETHYST_BLOCK))); - public static final DeferredBlock BLOOD_CRYSTAL_CRYSTAL = BLOCKS.register("blood_crystal_cluster", - () -> new AmethystClusterBlock(7.0F, 3.0F, BlockBehaviour.Properties.ofFullCopy(Blocks.AMETHYST_CLUSTER))); - public static final DeferredBlock DREAM_SAND = BLOCKS.register("dream_sand", - () -> new DreamSandBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SAND))); - public static final DeferredBlock DREAM_SANDSTONE = BLOCKS.register("dream_sandstone", - () -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.SANDSTONE))); - public static final DeferredBlock CHISELED_DREAM_SANDSTONE = BLOCKS.register("chiseled_dream_sandstone", - () -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.CHISELED_SANDSTONE))); - public static final DeferredBlock CUT_DREAM_SANDSTONE = BLOCKS.register("cut_dream_sandstone", - () -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.CUT_SANDSTONE))); - public static final DeferredBlock SMOOTH_DREAM_SANDSTONE = BLOCKS.register("smooth_dream_sandstone", - () -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.SMOOTH_SANDSTONE))); - public static final DeferredBlock DREAM_SANDSTONE_STAIRS = BLOCKS.register("dream_sandstone_stairs", - () -> new net.minecraft.world.level.block.StairBlock(DREAM_SANDSTONE.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(Blocks.SANDSTONE_STAIRS))); - public static final DeferredBlock DREAM_SANDSTONE_SLAB = BLOCKS.register("dream_sandstone_slab", - () -> new net.minecraft.world.level.block.SlabBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SANDSTONE_SLAB))); - public static final DeferredBlock DREAM_SANDSTONE_WALL = BLOCKS.register("dream_sandstone_wall", - () -> new net.minecraft.world.level.block.WallBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SANDSTONE_WALL))); - public static final DeferredBlock SMOOTH_DREAM_SANDSTONE_STAIRS = BLOCKS.register("smooth_dream_sandstone_stairs", - () -> new net.minecraft.world.level.block.StairBlock(SMOOTH_DREAM_SANDSTONE.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(Blocks.SMOOTH_SANDSTONE_STAIRS))); - public static final DeferredBlock SMOOTH_DREAM_SANDSTONE_SLAB = BLOCKS.register("smooth_dream_sandstone_slab", - () -> new net.minecraft.world.level.block.SlabBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SMOOTH_SANDSTONE_SLAB))); - public static final DeferredBlock CUT_DREAM_SANDSTONE_SLAB = BLOCKS.register("cut_dream_sandstone_slab", - () -> new net.minecraft.world.level.block.SlabBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.CUT_SANDSTONE_SLAB))); - public static final DeferredHolder, BlockEntityType> ANT_NEST_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register("ant_nest", - () -> BlockEntityType.Builder.of( - AntNestBlockEntity::new, - RED_ANT_NEST.get(), - BROWN_ANT_NEST.get(), - RAINBOW_ANT_NEST.get() - ).build(null)); - public static final DeferredHolder, BlockEntityType> DREAM_CAMPFIRE_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register("dream_campfire", - () -> BlockEntityType.Builder.of( - DreamCampfireBlockEntity::new, - DREAM_CAMPFIRE.get() - ).build(null)); - public static final DeferredHolder, BlockEntityType> WASP_NEST_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register("wasp_nest", - () -> BlockEntityType.Builder.of( - WaspNestBlockEntity::new, - WASP_NEST.get() - ).build(null)); - public static final DeferredHolder, BlockEntityType> HUSHWEED_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register("hushweed", - () -> BlockEntityType.Builder.of( - HushweedBlockEntity::new, - HUSHWEED.get() - ).build(null)); - public static final DeferredHolder, BlockEntityType> POTENT_NYXITE_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register("potent_nyxite", - () -> BlockEntityType.Builder.of( - (pos, state) -> new PotentNyxiteBlockEntity(pos, state, AntarchyFabricContent::potentNyxiteBlockEntityType), - POTENT_NYXITE.get() - ).build(null)); - public static final DeferredHolder, RedAntNestFeature> RED_ANT_NEST_FEATURE = FEATURES.register("red_ant_nest", - () -> new RedAntNestFeature(SimpleBlockConfiguration.CODEC)); - public static final DeferredHolder, BrownAntNestFeature> BROWN_ANT_NEST_FEATURE = FEATURES.register("brown_ant_nest", - () -> new BrownAntNestFeature(SimpleBlockConfiguration.CODEC)); - public static final DeferredHolder, RainbowAntNestFeature> RAINBOW_ANT_NEST_FEATURE = FEATURES.register("rainbow_ant_nest", - () -> new RainbowAntNestFeature(SimpleBlockConfiguration.CODEC)); - public static final DeferredHolder, OuranwoodTreeFeature> OURANWOOD_LARGE_TREE = FEATURES.register("ouranwood_large_tree", - () -> new OuranwoodTreeFeature(OuranwoodTreeConfiguration.CODEC)); - public static final DeferredHolder, OuranwoodTreeFeature> OURANWOOD_YOUNG_TREE = FEATURES.register("ouranwood_young_tree", - () -> new OuranwoodTreeFeature(OuranwoodTreeConfiguration.CODEC)); - public static final DeferredHolder, OuranwoodTreeFeature> OURANWOOD_MEDIUM_TREE = FEATURES.register("ouranwood_medium_tree", - () -> new OuranwoodTreeFeature(OuranwoodTreeConfiguration.CODEC)); - public static final DeferredHolder, OuranwoodCocoonTreeFeature> OURANWOOD_COCOON_TREE = FEATURES.register("ouranwood_cocoon_tree", - () -> new OuranwoodCocoonTreeFeature(OuranwoodTreeConfiguration.CODEC)); - public static final DeferredHolder, ElythiaFloraFeature> ELYTHIA_FOREST_FLORA = FEATURES.register("elythia_forest_flora", - () -> new ElythiaFloraFeature(NoneFeatureConfiguration.CODEC, ElythiaFloraFeature.Variant.FOREST)); - public static final DeferredHolder, ElythiaFloraFeature> ELYTHIA_MEADOW_FLORA = FEATURES.register("elythia_meadow_flora", - () -> new ElythiaFloraFeature(NoneFeatureConfiguration.CODEC, ElythiaFloraFeature.Variant.MEADOW)); - public static final DeferredHolder, ElythiaFloraFeature> FLOWER_FOREST_MILKWEED = FEATURES.register("flower_forest_milkweed", - () -> new ElythiaFloraFeature(NoneFeatureConfiguration.CODEC, ElythiaFloraFeature.Variant.FLOWER_FOREST_MILKWEED)); - public static final DeferredHolder, ElythiaFloraFeature> ELYTHIA_BUTTERFLY_FIELDS_FLORA = FEATURES.register("butterfly_fields_flora", - () -> new ElythiaFloraFeature(NoneFeatureConfiguration.CODEC, ElythiaFloraFeature.Variant.BUTTERFLY_FIELDS)); - public static final DeferredHolder, ElythiaFloraFeature> ELYTHIA_TORCHFLOWER_FIELDS_FLORA = FEATURES.register("elythia_torchflower_fields_flora", - () -> new ElythiaFloraFeature(NoneFeatureConfiguration.CODEC, ElythiaFloraFeature.Variant.TORCHFLOWER_FIELDS)); - public static final DeferredHolder, ElythiaSurfaceCoverFeature> ELYTHIA_SURFACE_COVER = FEATURES.register("elythia_surface_cover", - () -> new ElythiaSurfaceCoverFeature(NoneFeatureConfiguration.CODEC)); - public static final DeferredHolder, ElythiaUndergroundFeature> ELYTHIA_UNDERGROUND = FEATURES.register("elythia_underground", - () -> new ElythiaUndergroundFeature(NoneFeatureConfiguration.CODEC)); - public static final DeferredHolder, BrutalflyCocoonFeature> BRUTALFLY_COCOON = FEATURES.register("brutalfly_cocoon", - () -> new BrutalflyCocoonFeature(NoneFeatureConfiguration.CODEC)); - public static final DeferredHolder, MolewormTunnelsFeature> ELYTHIA_MOLEWORM_TUNNELS = FEATURES.register("elythia_moleworm_tunnels", - () -> new MolewormTunnelsFeature(NoneFeatureConfiguration.CODEC)); - public static final DeferredHolder, MolewormCaveEntranceFeature> ELYTHIA_MOLEWORM_CAVE_ENTRANCES = FEATURES.register("elythia_moleworm_cave_entrances", - () -> new MolewormCaveEntranceFeature(NoneFeatureConfiguration.CODEC)); - public static final DeferredHolder, MolewormWarrensFeature> ELYTHIA_MOLEWORM_WARRENS = FEATURES.register("elythia_moleworm_warrens", - () -> new MolewormWarrensFeature(NoneFeatureConfiguration.CODEC)); - public static final DeferredHolder, MolewormSurfaceMoundsFeature> ELYTHIA_MOLEWORM_SURFACE_MOUNDS = FEATURES.register("elythia_moleworm_surface_mounds", - () -> new MolewormSurfaceMoundsFeature(NoneFeatureConfiguration.CODEC)); - public static final DeferredHolder, TriffidPatchFeature> TRIFFID_PATCH = FEATURES.register("triffid_patch", - () -> new TriffidPatchFeature(NoneFeatureConfiguration.CODEC)); - public static final DeferredHolder, MapCodec> ELYTHIA_BIOME_SOURCE = BIOME_SOURCES.register("elythia_biome_source", - () -> ElythiaBiomeSource.CODEC); - public static final DeferredHolder, MapCodec> ELYTHIA_RIVER_CARVE = DENSITY_FUNCTION_TYPES.register("elythia_river_carve", - () -> ElythiaRiverCarveFunction.CODEC); - public static final DeferredHolder, ElythiaPondFeature> ELYTHIA_POND = FEATURES.register("elythia_pond", - () -> new ElythiaPondFeature(NoneFeatureConfiguration.CODEC)); - public static final DeferredHolder, ElythiaTuffBoulderFeature> ELYTHIA_TUFF_BOULDER = FEATURES.register("elythia_tuff_boulder", - () -> new ElythiaTuffBoulderFeature(NoneFeatureConfiguration.CODEC)); - public static final DeferredHolder, ElythiaLargeTuffBoulderFeature> ELYTHIA_LARGE_TUFF_BOULDER = FEATURES.register("elythia_large_tuff_boulder", - () -> new ElythiaLargeTuffBoulderFeature(NoneFeatureConfiguration.CODEC)); - public static final DeferredHolder, ThoraxisFissureFeature> THORAXIS_FISSURE = FEATURES.register("thoraxis_fissure", - () -> new ThoraxisFissureFeature(ThoraxisFissureConfiguration.CODEC)); - public static final DeferredHolder, ThoraxisRibColumnsFeature> THORAXIS_RIB_COLUMNS = FEATURES.register("thoraxis_rib_columns", - () -> new ThoraxisRibColumnsFeature(ThoraxisRibColumnsConfiguration.CODEC)); - public static final DeferredHolder, ThoraxisSpikeFeature> THORAXIS_SPIKE = FEATURES.register("thoraxis_spike", - () -> new ThoraxisSpikeFeature(ThoraxisSpikeConfiguration.CODEC)); - public static final DeferredHolder, NyxiteSpikeFeature> NYXITE_SPIKES = FEATURES.register("nyxite_spikes", - () -> new NyxiteSpikeFeature(NyxiteSpikeConfiguration.CODEC)); - public static final DeferredHolder, AntiwaterSpringsFeature> ANTIWATER_SPRINGS = FEATURES.register("antiwater_springs", - () -> new AntiwaterSpringsFeature(AntiwaterSpringsConfiguration.CODEC)); - public static final DeferredHolder, PotentNyxiteFeature> POTENT_NYXITE_FEATURE = FEATURES.register("potent_nyxite", - () -> new PotentNyxiteFeature(NoneFeatureConfiguration.CODEC)); - public static final DeferredHolder, ThoraxisBloodCrystalFeature> THORAXIS_BLOOD_CRYSTAL_SPIRES = FEATURES.register("thoraxis_blood_crystal_spires", - () -> new ThoraxisBloodCrystalFeature(ThoraxisBloodCrystalConfiguration.CODEC)); - public static final DeferredHolder, CloudSeaCalciteFeature> CLOUD_SEA_CALCITE_BANKS = FEATURES.register("cloud_sea_calcite_banks", - () -> new CloudSeaCalciteFeature(NoneFeatureConfiguration.CODEC)); - public static final DeferredHolder, BedBugNestFeature> BED_BUG_NEST = FEATURES.register("bed_bug_nest", - () -> new BedBugNestFeature(NoneFeatureConfiguration.CODEC)); - public static final DeferredHolder, BedBugSurfaceClusterFeature> BED_BUG_SURFACE_CLUSTER = FEATURES.register("bed_bug_surface_cluster", - () -> new BedBugSurfaceClusterFeature(NoneFeatureConfiguration.CODEC)); - public static final DeferredHolder, ThoraxisAntiwaterPoolFeature> THORAXIS_ANTIWATER_POOL = FEATURES.register("thoraxis_antiwater_pool", - () -> new ThoraxisAntiwaterPoolFeature(ThoraxisAntiwaterPoolConfiguration.CODEC)); - public static final DeferredHolder, LucidAntiwaterPoolFeature> LUCID_ANTIWATER_POOL = FEATURES.register("lucid_antiwater_pool", - () -> new LucidAntiwaterPoolFeature(ThoraxisAntiwaterPoolConfiguration.CODEC)); - public static final DeferredHolder, ThoraxisDuneFeature> THORAXIS_DUNE = FEATURES.register("thoraxis_dune", - () -> new ThoraxisDuneFeature(ThoraxisDuneConfiguration.CODEC)); - public static final DeferredHolder, CoralSpikeFeature> ELYTHIA_CORAL_SPIKE = FEATURES.register("elythia_coral_spike", - () -> new CoralSpikeFeature(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)); - public static final DeferredHolder, com.craisinlord.antarchy.content.worldgen.elythia.FungalMushroomFeature> FUNGAL_MUSHROOM = FEATURES.register("fungal_mushroom", - () -> new com.craisinlord.antarchy.content.worldgen.elythia.FungalMushroomFeature(NoneFeatureConfiguration.CODEC)); - public static final DeferredHolder, MapCodec> THORAXIS_BIOME_SOURCE = BIOME_SOURCES.register("thoraxis_biome_source", - () -> ThoraxisBiomeSource.CODEC); - - public static final DeferredItem DUPLICATOR_LOG_ITEM = ITEMS.registerSimpleBlockItem(DUPLICATOR_LOG); - public static final DeferredItem OURANWOOD_LOG_ITEM = ITEMS.registerSimpleBlockItem(OURANWOOD_LOG); - public static final DeferredItem OURANWOOD_WOOD_ITEM = ITEMS.registerSimpleBlockItem(OURANWOOD_WOOD); - public static final DeferredItem MOSSY_OURANWOOD_LOG_ITEM = ITEMS.registerSimpleBlockItem(MOSSY_OURANWOOD_LOG); - public static final DeferredItem MOSSY_OURANWOOD_WOOD_ITEM = ITEMS.registerSimpleBlockItem(MOSSY_OURANWOOD_WOOD); - public static final DeferredItem STRIPPED_OURANWOOD_LOG_ITEM = ITEMS.registerSimpleBlockItem(STRIPPED_OURANWOOD_LOG); - public static final DeferredItem STRIPPED_OURANWOOD_WOOD_ITEM = ITEMS.registerSimpleBlockItem(STRIPPED_OURANWOOD_WOOD); - public static final DeferredItem OURANWOOD_PLANKS_ITEM = ITEMS.registerSimpleBlockItem(OURANWOOD_PLANKS); - public static final DeferredItem OURANWOOD_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(OURANWOOD_STAIRS); - public static final DeferredItem OURANWOOD_SLAB_ITEM = ITEMS.registerSimpleBlockItem(OURANWOOD_SLAB); - public static final DeferredItem OURANWOOD_FENCE_ITEM = ITEMS.registerSimpleBlockItem(OURANWOOD_FENCE); - public static final DeferredItem OURANWOOD_FENCE_GATE_ITEM = ITEMS.registerSimpleBlockItem(OURANWOOD_FENCE_GATE); - public static final DeferredItem OURANWOOD_DOOR_ITEM = ITEMS.registerSimpleBlockItem(OURANWOOD_DOOR); - public static final DeferredItem OURANWOOD_TRAPDOOR_ITEM = ITEMS.registerSimpleBlockItem(OURANWOOD_TRAPDOOR); - public static final DeferredItem OURANWOOD_PRESSURE_PLATE_ITEM = ITEMS.registerSimpleBlockItem(OURANWOOD_PRESSURE_PLATE); - public static final DeferredItem OURANWOOD_BUTTON_ITEM = ITEMS.registerSimpleBlockItem(OURANWOOD_BUTTON); - public static final DeferredItem OURANWOOD_LEAVES_ITEM = ITEMS.registerSimpleBlockItem(OURANWOOD_LEAVES); - public static final DeferredItem OURANWOOD_ACORN = ITEMS.registerSimpleBlockItem(OURANWOOD_ACORN_BLOCK); - // public static final DeferredItem OURANWOOD_VINE_ITEM = ITEMS.registerSimpleBlockItem(OURANWOOD_VINE); - public static final DeferredItem ORANGE_MILKWEED_ITEM = ITEMS.registerSimpleBlockItem(ORANGE_MILKWEED); - public static final DeferredItem PINK_MILKWEED_ITEM = ITEMS.registerSimpleBlockItem(PINK_MILKWEED); - public static final DeferredItem OURANWOOD_SIGN_ITEM = ITEMS.register("ouranwood_sign", - () -> new net.minecraft.world.item.SignItem(new Item.Properties().stacksTo(16), OURANWOOD_SIGN.get(), OURANWOOD_WALL_SIGN.get())); - public static final DeferredItem OURANWOOD_HANGING_SIGN_ITEM = ITEMS.register("ouranwood_hanging_sign", - () -> new net.minecraft.world.item.HangingSignItem(OURANWOOD_HANGING_SIGN.get(), OURANWOOD_WALL_HANGING_SIGN.get(), new Item.Properties().stacksTo(16))); - public static final DeferredItem OURANWOOD_BOAT = ITEMS.register("ouranwood_boat", - () -> new OuranwoodBoatOnlyItem(OURANWOOD_BOAT_ENTITY.get(), new Item.Properties().stacksTo(1))); - public static final DeferredItem OURANWOOD_CHEST_BOAT = ITEMS.register("ouranwood_chest_boat", - () -> new OuranwoodChestBoatItem(OURANWOOD_CHEST_BOAT_ENTITY.get(), new Item.Properties().stacksTo(1))); - public static final DeferredItem DUPLICATOR_SAPLING_ITEM = ITEMS.registerSimpleBlockItem(DUPLICATOR_SAPLING); - public static final DeferredItem RED_ANT_NEST_ITEM = ITEMS.registerSimpleBlockItem(RED_ANT_NEST); - public static final DeferredItem BROWN_ANT_NEST_ITEM = ITEMS.registerSimpleBlockItem(BROWN_ANT_NEST); - public static final DeferredItem RAINBOW_ANT_NEST_ITEM = ITEMS.registerSimpleBlockItem(RAINBOW_ANT_NEST); - public static final DeferredItem URANIUM_ORE_ITEM = ITEMS.registerSimpleBlockItem(URANIUM_ORE); - public static final DeferredItem DEEPSLATE_URANIUM_ORE_ITEM = ITEMS.registerSimpleBlockItem(DEEPSLATE_URANIUM_ORE); - public static final DeferredItem TITANIUM_ORE_ITEM = ITEMS.registerSimpleBlockItem(TITANIUM_ORE); - public static final DeferredItem DEEPSLATE_TITANIUM_ORE_ITEM = ITEMS.registerSimpleBlockItem(DEEPSLATE_TITANIUM_ORE); - public static final DeferredItem URANIUM_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(URANIUM_BLOCK); - public static final DeferredItem TITANIUM_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(TITANIUM_BLOCK); - public static final DeferredItem RAW_URANIUM_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(RAW_URANIUM_BLOCK); - public static final DeferredItem RAW_TITANIUM_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(RAW_TITANIUM_BLOCK); - public static final DeferredItem CUT_URANIUM_ITEM = ITEMS.registerSimpleBlockItem(CUT_URANIUM); - public static final DeferredItem CUT_TITANIUM_ITEM = ITEMS.registerSimpleBlockItem(CUT_TITANIUM); - public static final DeferredItem CUT_URANIUM_SLAB_ITEM = ITEMS.registerSimpleBlockItem(CUT_URANIUM_SLAB); - public static final DeferredItem CUT_TITANIUM_SLAB_ITEM = ITEMS.registerSimpleBlockItem(CUT_TITANIUM_SLAB); - public static final DeferredItem CUT_URANIUM_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(CUT_URANIUM_STAIRS); - public static final DeferredItem CUT_TITANIUM_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(CUT_TITANIUM_STAIRS); - public static final DeferredItem CHISELED_URANIUM_ITEM = ITEMS.registerSimpleBlockItem(CHISELED_URANIUM); - public static final DeferredItem CHISELED_TITANIUM_ITEM = ITEMS.registerSimpleBlockItem(CHISELED_TITANIUM); - public static final DeferredItem URANIUM_BULB_ITEM = ITEMS.register("uranium_bulb", - () -> new com.craisinlord.antarchy.content.item.SignalSavingBulbItem(URANIUM_BULB.get(), new Item.Properties())); - public static final DeferredItem TITANIUM_BULB_ITEM = ITEMS.register("titanium_bulb", - () -> new com.craisinlord.antarchy.content.item.SignalSavingBulbItem(TITANIUM_BULB.get(), new Item.Properties())); - public static final DeferredItem URANIUM_DOOR_ITEM = ITEMS.registerSimpleBlockItem(URANIUM_DOOR); - public static final DeferredItem TITANIUM_DOOR_ITEM = ITEMS.registerSimpleBlockItem(TITANIUM_DOOR); - public static final DeferredItem URANIUM_TRAPDOOR_ITEM = ITEMS.registerSimpleBlockItem(URANIUM_TRAPDOOR); - public static final DeferredItem TITANIUM_TRAPDOOR_ITEM = ITEMS.registerSimpleBlockItem(TITANIUM_TRAPDOOR); - public static final DeferredItem URANIUM_BARS_ITEM = ITEMS.registerSimpleBlockItem(URANIUM_BARS); - public static final DeferredItem TITANIUM_BARS_ITEM = ITEMS.registerSimpleBlockItem(TITANIUM_BARS); - public static final DeferredItem ANTIMETAL_ITEM = ITEMS.register("antimetal", - () -> new AntimetalBlockItem(ANTIMETAL.get(), new Item.Properties())); - public static final DeferredItem POLISHED_ANTIMETAL_ITEM = ITEMS.register("polished_antimetal", - () -> new AntimetalBlockItem(POLISHED_ANTIMETAL.get(), new Item.Properties())); - public static final DeferredItem ANTIMETAL_SCAFFOLDING_ITEM = ITEMS.register("antimetal_scaffolding", - () -> new AntimetalScaffoldingItem(ANTIMETAL_SCAFFOLDING.get(), new Item.Properties())); - public static final DeferredItem SMALL_BLOOD_CRYSTAL_BUD_ITEM = ITEMS.registerSimpleBlockItem(SMALL_BLOOD_CRYSTAL_BUD); - public static final DeferredItem MEDIUM_BLOOD_CRYSTAL_BUD_ITEM = ITEMS.registerSimpleBlockItem(MEDIUM_BLOOD_CRYSTAL_BUD); - public static final DeferredItem LARGE_BLOOD_CRYSTAL_BUD_ITEM = ITEMS.registerSimpleBlockItem(LARGE_BLOOD_CRYSTAL_BUD); - public static final DeferredItem BUDDING_BLOOD_CRYSTAL_ITEM = ITEMS.registerSimpleBlockItem(BUDDING_BLOOD_CRYSTAL); - public static final DeferredItem BLOOD_CRYSTAL_ITEM = ITEMS.register("blood_crystal_block", - () -> new net.minecraft.world.item.BlockItem(BLOOD_CRYSTAL.get(), new Item.Properties())); - public static final DeferredItem BLOOD_CRYSTAL_CRYSTAL_ITEM = ITEMS.registerSimpleBlockItem(BLOOD_CRYSTAL_CRYSTAL); - public static final DeferredItem DREAM_SAND_ITEM = ITEMS.registerSimpleBlockItem(DREAM_SAND); - public static final DeferredItem DREAM_SANDSTONE_ITEM = ITEMS.registerSimpleBlockItem(DREAM_SANDSTONE); - public static final DeferredItem CHISELED_DREAM_SANDSTONE_ITEM = ITEMS.registerSimpleBlockItem(CHISELED_DREAM_SANDSTONE); - public static final DeferredItem CUT_DREAM_SANDSTONE_ITEM = ITEMS.registerSimpleBlockItem(CUT_DREAM_SANDSTONE); - public static final DeferredItem SMOOTH_DREAM_SANDSTONE_ITEM = ITEMS.registerSimpleBlockItem(SMOOTH_DREAM_SANDSTONE); - public static final DeferredItem DREAM_SANDSTONE_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(DREAM_SANDSTONE_STAIRS); - public static final DeferredItem DREAM_SANDSTONE_SLAB_ITEM = ITEMS.registerSimpleBlockItem(DREAM_SANDSTONE_SLAB); - public static final DeferredItem DREAM_SANDSTONE_WALL_ITEM = ITEMS.registerSimpleBlockItem(DREAM_SANDSTONE_WALL); - public static final DeferredItem SMOOTH_DREAM_SANDSTONE_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(SMOOTH_DREAM_SANDSTONE_STAIRS); - public static final DeferredItem SMOOTH_DREAM_SANDSTONE_SLAB_ITEM = ITEMS.registerSimpleBlockItem(SMOOTH_DREAM_SANDSTONE_SLAB); - public static final DeferredItem CUT_DREAM_SANDSTONE_SLAB_ITEM = ITEMS.registerSimpleBlockItem(CUT_DREAM_SANDSTONE_SLAB); - public static final DeferredItem DUCT_TAPE_ITEM = ITEMS.register("duct_tape", - () -> new DuctTapeBlockItem(DUCT_TAPE.get(), new Item.Properties().stacksTo(1))); - public static final DeferredItem INFESTED_ROOTED_DIRT_ITEM = ITEMS.registerSimpleBlockItem(INFESTED_ROOTED_DIRT); - public static final DeferredItem INFESTED_COARSE_DIRT_ITEM = ITEMS.registerSimpleBlockItem(INFESTED_COARSE_DIRT); - public static final DeferredItem NYXITE_ITEM = ITEMS.registerSimpleBlockItem(NYXITE); - public static final DeferredItem POLISHED_NYXITE_ITEM = ITEMS.registerSimpleBlockItem(POLISHED_NYXITE); - public static final DeferredItem CHISELED_NYXITE_ITEM = ITEMS.registerSimpleBlockItem(CHISELED_NYXITE); - public static final DeferredItem NYXITE_BRICKS_ITEM = ITEMS.registerSimpleBlockItem(NYXITE_BRICKS); - public static final DeferredItem NYXITE_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(NYXITE_STAIRS); - public static final DeferredItem NYXITE_SLAB_ITEM = ITEMS.registerSimpleBlockItem(NYXITE_SLAB); - public static final DeferredItem NYXITE_WALL_ITEM = ITEMS.registerSimpleBlockItem(NYXITE_WALL); - public static final DeferredItem POLISHED_NYXITE_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(POLISHED_NYXITE_STAIRS); - public static final DeferredItem POLISHED_NYXITE_SLAB_ITEM = ITEMS.registerSimpleBlockItem(POLISHED_NYXITE_SLAB); - public static final DeferredItem POLISHED_NYXITE_WALL_ITEM = ITEMS.registerSimpleBlockItem(POLISHED_NYXITE_WALL); - public static final DeferredItem NYXITE_BRICK_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(NYXITE_BRICK_STAIRS); - public static final DeferredItem NYXITE_BRICK_SLAB_ITEM = ITEMS.registerSimpleBlockItem(NYXITE_BRICK_SLAB); - public static final DeferredItem NYXITE_BRICK_WALL_ITEM = ITEMS.registerSimpleBlockItem(NYXITE_BRICK_WALL); - public static final DeferredItem SHELLSTONE_ITEM = ITEMS.registerSimpleBlockItem(SHELLSTONE); - public static final DeferredItem POLISHED_SHELLSTONE_ITEM = ITEMS.registerSimpleBlockItem(POLISHED_SHELLSTONE); - public static final DeferredItem SHELLSTONE_BRICKS_ITEM = ITEMS.registerSimpleBlockItem(SHELLSTONE_BRICKS); - public static final DeferredItem CHISELED_SHELLSTONE_ITEM = ITEMS.registerSimpleBlockItem(CHISELED_SHELLSTONE); - public static final DeferredItem MOSSY_SHELLSTONE_BRICKS_ITEM = ITEMS.registerSimpleBlockItem(MOSSY_SHELLSTONE_BRICKS); - public static final DeferredItem CRACKED_SHELLSTONE_BRICKS_ITEM = ITEMS.registerSimpleBlockItem(CRACKED_SHELLSTONE_BRICKS); - public static final DeferredItem MOSSY_SHELLSTONE_BRICK_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(MOSSY_SHELLSTONE_BRICK_STAIRS); - public static final DeferredItem MOSSY_SHELLSTONE_BRICK_SLAB_ITEM = ITEMS.registerSimpleBlockItem(MOSSY_SHELLSTONE_BRICK_SLAB); - public static final DeferredItem MOSSY_SHELLSTONE_BRICK_WALL_ITEM = ITEMS.registerSimpleBlockItem(MOSSY_SHELLSTONE_BRICK_WALL); - public static final DeferredItem SHELLSTONE_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(SHELLSTONE_STAIRS); - public static final DeferredItem SHELLSTONE_SLAB_ITEM = ITEMS.registerSimpleBlockItem(SHELLSTONE_SLAB); - public static final DeferredItem SHELLSTONE_WALL_ITEM = ITEMS.registerSimpleBlockItem(SHELLSTONE_WALL); - public static final DeferredItem POLISHED_SHELLSTONE_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(POLISHED_SHELLSTONE_STAIRS); - public static final DeferredItem POLISHED_SHELLSTONE_SLAB_ITEM = ITEMS.registerSimpleBlockItem(POLISHED_SHELLSTONE_SLAB); - public static final DeferredItem POLISHED_SHELLSTONE_WALL_ITEM = ITEMS.registerSimpleBlockItem(POLISHED_SHELLSTONE_WALL); - public static final DeferredItem SHELLSTONE_BRICK_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(SHELLSTONE_BRICK_STAIRS); - public static final DeferredItem SHELLSTONE_BRICK_SLAB_ITEM = ITEMS.registerSimpleBlockItem(SHELLSTONE_BRICK_SLAB); - public static final DeferredItem SHELLSTONE_BRICK_WALL_ITEM = ITEMS.registerSimpleBlockItem(SHELLSTONE_BRICK_WALL); - public static final DeferredItem TRIFFID_GOO_BLOCK_ITEM = ITEMS.register("triffid_goo_block", - () -> new com.craisinlord.antarchy.content.item.TriffidGooBlockItem(TRIFFID_GOO_BLOCK.get(), new Item.Properties())); - public static final DeferredItem PALE_NYXITE_ITEM = ITEMS.registerSimpleBlockItem(PALE_NYXITE); - public static final DeferredItem NYXITE_SPIKE_ITEM = ITEMS.registerSimpleBlockItem(NYXITE_SPIKE); - public static final DeferredItem POTENT_NYXITE_ITEM = ITEMS.registerSimpleBlockItem(POTENT_NYXITE); - public static final DeferredItem UMBRAL_MOSS_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(UMBRAL_MOSS_BLOCK); - public static final DeferredItem UMBRAL_MOSS_CARPET_ITEM = ITEMS.registerSimpleBlockItem(UMBRAL_MOSS_CARPET); - public static final DeferredItem DREAM_TORCH_ITEM = ITEMS.register("dream_torch", - () -> new StandingAndWallBlockItem(DREAM_TORCH.get(), DREAM_WALL_TORCH.get(), new Item.Properties(), Direction.UP)); - public static final DeferredItem DREAM_LANTERN_ITEM = ITEMS.registerSimpleBlockItem(DREAM_LANTERN); - public static final DeferredItem DREAM_CAMPFIRE_ITEM = ITEMS.registerSimpleBlockItem(DREAM_CAMPFIRE); - public static final DeferredItem CREEPING_HORROR_EGG_ITEM = ITEMS.register("creeping_horror_egg", - () -> new MobComingSoonTooltipItem(new Item.Properties().rarity(Rarity.RARE))); - public static final DeferredItem LURKING_TERROR_EGG_ITEM = ITEMS.register("lurking_terror_egg", - () -> new MobComingSoonTooltipItem(new Item.Properties().rarity(Rarity.RARE))); - public static final DeferredItem BED_BUG_EGG_ITEM = ITEMS.registerSimpleBlockItem(BED_BUG_EGG); - public static final DeferredItem WASP_NEST_ITEM = ITEMS.registerSimpleBlockItem(WASP_NEST); - public static final DeferredItem HUSHWEED_ITEM = ITEMS.registerSimpleBlockItem(HUSHWEED); - public static final DeferredItem BILE_BUCKET = ITEMS.register("bile_bucket", - () -> new BucketItem(BILE.get(), new Item.Properties().craftRemainder(Items.BUCKET).stacksTo(1))); - public static final DeferredItem ICHOR_BUCKET = ITEMS.register("ichor_bucket", - () -> new BucketItem(ICHOR.get(), new Item.Properties().craftRemainder(Items.BUCKET).stacksTo(1))); - public static final DeferredItem ANTIWATER_BUCKET = ITEMS.register("antiwater_bucket", - () -> new BucketItem(ANTIWATER.get(), new Item.Properties().craftRemainder(Items.BUCKET).stacksTo(1))); - public static final DeferredItem CLOUD_BUCKET = ITEMS.register("cloud_bucket", - () -> new com.craisinlord.antarchy.content.item.CloudBucketItem(CLOUD_BLOCK.get(), new Item.Properties().craftRemainder(Items.BUCKET))); - public static final DeferredItem BLOOD_CRYSTAL_SHARD = ITEMS.register("blood_crystal_shard", - () -> new com.craisinlord.antarchy.content.item.BloodCrystalShardItem(new Item.Properties())); - public static final DeferredItem BLOOD_CRYSTAL_APPLE = ITEMS.register("blood_crystal_apple", - () -> new BloodCrystalAppleItem(new Item.Properties() - .rarity(Rarity.RARE) - .food(new net.minecraft.world.food.FoodProperties.Builder() - .nutrition(4) - .saturationModifier(1.2f) - .effect(new MobEffectInstance(net.minecraft.world.effect.MobEffects.REGENERATION, 100, 1), 1.0f) - .alwaysEdible() - .build()))); - public static final DeferredItem BLOOD_CRYSTAL_HELMET = ITEMS.register("blood_crystal_helmet", - () -> new BloodCrystalArmorItem(net.minecraft.core.Holder.direct(BLOOD_CRYSTAL_ARMOR_MATERIAL.get()), ArmorItem.Type.HELMET, new Item.Properties().rarity(Rarity.RARE))); - public static final DeferredItem BLOOD_CRYSTAL_CHESTPLATE = ITEMS.register("blood_crystal_chestplate", - () -> new BloodCrystalArmorItem(net.minecraft.core.Holder.direct(BLOOD_CRYSTAL_ARMOR_MATERIAL.get()), ArmorItem.Type.CHESTPLATE, new Item.Properties().rarity(Rarity.RARE))); - public static final DeferredItem BLOOD_CRYSTAL_LEGGINGS = ITEMS.register("blood_crystal_leggings", - () -> new BloodCrystalArmorItem(net.minecraft.core.Holder.direct(BLOOD_CRYSTAL_ARMOR_MATERIAL.get()), ArmorItem.Type.LEGGINGS, new Item.Properties().rarity(Rarity.RARE))); - public static final DeferredItem BLOOD_CRYSTAL_BOOTS = ITEMS.register("blood_crystal_boots", - () -> new BloodCrystalArmorItem(net.minecraft.core.Holder.direct(BLOOD_CRYSTAL_ARMOR_MATERIAL.get()), ArmorItem.Type.BOOTS, new Item.Properties().rarity(Rarity.RARE))); - public static final DeferredItem BLOOD_CRYSTAL_KATANA = ITEMS.register("blood_crystal_katana", - () -> new BloodCrystalKatanaItem( - BLOOD_CRYSTAL_KATANA_TIER, - new Item.Properties().stacksTo(1).durability(1200).rarity(Rarity.RARE), - AntarchySettings.bloodCrystalKatanaAttackDamage(), - -2.2F - )); - public static final DeferredItem MANTIS_CLAW = ITEMS.registerSimpleItem("mantis_claw", new Item.Properties().rarity(Rarity.UNCOMMON)); - public static final DeferredItem KING_SCALE = ITEMS.register("king_scale", - () -> new MobComingSoonTooltipItem(new Item.Properties().rarity(Rarity.RARE))); - public static final DeferredItem QUEEN_SCALE = ITEMS.register("queen_scale", - () -> new MobComingSoonTooltipItem(new Item.Properties().rarity(Rarity.RARE))); - public static final DeferredItem STINK_BUG_ITEM = ITEMS.register("stink_bug", - () -> new MobComingSoonTooltipItem(new Item.Properties().rarity(Rarity.UNCOMMON))); - public static final DeferredItem JUMPY_BUG_LEG = ITEMS.register("jumpy_bug_leg", - () -> new MobComingSoonTooltipItem(new Item.Properties().rarity(Rarity.UNCOMMON))); - private static final DeferredHolder JUMPY_BOOTS_ARMOR_MATERIAL = ARMOR_MATERIALS.register("jumpy_boots", - () -> new ArmorMaterial( - createJumpyBootsDefense(), - 15, - net.minecraft.sounds.SoundEvents.ARMOR_EQUIP_NETHERITE, - () -> Ingredient.of(net.minecraft.world.item.Items.NETHERITE_BOOTS), - java.util.List.of(new ArmorMaterial.Layer(net.minecraft.resources.ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "jumpy_boots"))), - 3.0F, - 0.1F - )); - public static final DeferredItem JUMPY_BOOTS = ITEMS.register("jumpy_boots", - () -> new com.craisinlord.antarchy.content.item.JumpyBootsItem( - net.minecraft.core.Holder.direct(JUMPY_BOOTS_ARMOR_MATERIAL.get()), - new Item.Properties().stacksTo(1).rarity(Rarity.UNCOMMON).fireResistant().durability(ArmorItem.Type.BOOTS.getDurability(37)) - )); - public static final DeferredItem BRUTALFLY_WING = ITEMS.registerSimpleItem("brutalfly_wing", new Item.Properties().rarity(Rarity.UNCOMMON)); - public static final DeferredItem BRUTALFLY_ELYTRA = ITEMS.register("brutalfly_elytra", - () -> new BrutalflyElytraItem(new Item.Properties().rarity(Rarity.UNCOMMON).durability(480))); - public static final DeferredItem CORNEA_EAR = ITEMS.register("cornea_ear", - () -> new CorneaEarItem(new Item.Properties() - .rarity(Rarity.UNCOMMON) - .food(new FoodProperties.Builder() - .nutrition(2) - .saturationModifier(0.4F) - .build()))); - public static final DeferredItem TRIFFID_GOO = ITEMS.registerSimpleItem("triffid_goo", - new Item.Properties().rarity(Rarity.UNCOMMON)); - public static final DeferredItem VORTEX_EYE = ITEMS.register("vortex_eye", - () -> new MobComingSoonTooltipItem(new Item.Properties().rarity(Rarity.RARE))); - public static final DeferredItem RAW_URANIUM_SCRAP = ITEMS.registerSimpleItem("raw_uranium_scrap", new Item.Properties().rarity(Rarity.UNCOMMON)); - public static final DeferredItem RAW_TITANIUM_SCRAP = ITEMS.registerSimpleItem("raw_titanium_scrap", new Item.Properties().rarity(Rarity.UNCOMMON)); - public static final DeferredItem RAW_URANIUM = ITEMS.registerSimpleItem("raw_uranium", new Item.Properties().rarity(Rarity.UNCOMMON)); - public static final DeferredItem RAW_TITANIUM = ITEMS.registerSimpleItem("raw_titanium", new Item.Properties().rarity(Rarity.UNCOMMON)); - public static final DeferredItem MUD_PIE = ITEMS.register("mud_pie", - () -> new Item(new Item.Properties() - .food(new FoodProperties.Builder() - .nutrition(10) - .saturationModifier(0.9F) - .effect(new MobEffectInstance(MobEffects.CONFUSION, 200), 1.0F) - .build()))); - public static final DeferredItem RAINBOW_SUGAR = ITEMS.register("rainbow_sugar", - () -> new RainbowSugarItem(new Item.Properties() - .rarity(Rarity.UNCOMMON) - .food(new FoodProperties.Builder().nutrition(1).saturationModifier(0.0F).alwaysEdible().build()))); - public static final DeferredItem URANIUM_NUGGET = ITEMS.registerSimpleItem("uranium_nugget", new Item.Properties().rarity(Rarity.UNCOMMON)); - public static final DeferredItem TITANIUM_NUGGET = ITEMS.registerSimpleItem("titanium_nugget", new Item.Properties().rarity(Rarity.UNCOMMON)); - public static final DeferredItem URANIUM_INGOT = ITEMS.registerSimpleItem("uranium_ingot", new Item.Properties().rarity(Rarity.UNCOMMON).fireResistant()); - public static final DeferredItem TITANIUM_INGOT = ITEMS.registerSimpleItem("titanium_ingot", new Item.Properties().rarity(Rarity.UNCOMMON).fireResistant()); - public static final DeferredItem MOLEVORE_NOSE = ITEMS.registerSimpleItem("molevore_nose", new Item.Properties().rarity(Rarity.RARE)); - public static final DeferredItem MOLEWORM_ITEM = ITEMS.register("moleworm", - () -> new Item(new Item.Properties() - .food(new FoodProperties.Builder() - .nutrition(1) - .saturationModifier(0.0F) - .effect(new MobEffectInstance(MobEffects.HUNGER, 600), 0.8F) - .build()))); - public static final DeferredItem CLOUD_SHARK_FIN = ITEMS.registerSimpleItem("cloud_shark_fin", new Item.Properties().rarity(Rarity.UNCOMMON)); - public static final DeferredItem CLOUD_SHARK_FIN_SOUP = ITEMS.register("cloud_shark_fin_soup", - () -> new CloudSharkFinSoupItem(new Item.Properties() - .stacksTo(1) - .craftRemainder(Items.BOWL) - .food(new FoodProperties.Builder() - .nutrition(10) - .saturationModifier(0.8F) - .effect(new MobEffectInstance(MobEffects.DAMAGE_BOOST, 600, 0), 1.0F) - .effect(new MobEffectInstance(MobEffects.SLOW_FALLING, 600, 0), 1.0F) - .build()))); - public static final DeferredItem KRAKEN_TOOTH = ITEMS.register("kraken_tooth", - () -> new Item(new Item.Properties().rarity(net.minecraft.world.item.Rarity.RARE))); - public static final DeferredItem BASILISK_FANG = ITEMS.registerSimpleItem("basilisk_fang", new Item.Properties().rarity(Rarity.RARE)); - public static final DeferredItem BASILISK_DAGGER = ITEMS.register("basilisk_dagger", - () -> new BasiliskDaggerItem(Tiers.IRON, new Item.Properties().rarity(Rarity.RARE), 4, -1.8F)); - public static final DeferredItem EMPEROR_SCORPION_STINGER = ITEMS.registerSimpleItem("emperor_scorpion_stinger", new Item.Properties().rarity(Rarity.RARE)); - public static final DeferredItem SCORPION_WHIP = ITEMS.register("scorpion_whip", - () -> new ScorpionWhipItem(Tiers.IRON, new Item.Properties().rarity(Rarity.RARE).durability(384))); - public static final DeferredItem MOGGLES = ITEMS.register("moggles", - () -> new MogglesItem(net.minecraft.core.Holder.direct(MOGGLES_ARMOR_MATERIAL.get()), new Item.Properties().rarity(Rarity.RARE).stacksTo(1))); - public static final DeferredItem FALLEN_KING_CROWN = ITEMS.register("fallen_king_crown", - () -> new com.craisinlord.antarchy.content.item.FallenKingCrownItem( - net.minecraft.core.Holder.direct(FALLEN_KING_CROWN_ARMOR_MATERIAL.get()), - new Item.Properties().rarity(Rarity.RARE) - )); - public static final DeferredItem ULTIMATE_HELMET = ITEMS.register("ultimate_helmet", - () -> new UltimateArmorItem( - net.minecraft.core.Holder.direct(ULTIMATE_ARMOR_MATERIAL.get()), - ArmorItem.Type.HELMET, - new Item.Properties() - .rarity(Rarity.EPIC) - .fireResistant() - .durability(ArmorItem.Type.HELMET.getDurability(41)) - )); - public static final DeferredItem ULTIMATE_CHESTPLATE = ITEMS.register("ultimate_chestplate", - () -> new UltimateArmorItem( - net.minecraft.core.Holder.direct(ULTIMATE_ARMOR_MATERIAL.get()), - ArmorItem.Type.CHESTPLATE, - new Item.Properties() - .rarity(Rarity.EPIC) - .fireResistant() - .durability(ArmorItem.Type.CHESTPLATE.getDurability(41)) - )); - public static final DeferredItem ULTIMATE_LEGGINGS = ITEMS.register("ultimate_leggings", - () -> new UltimateArmorItem( - net.minecraft.core.Holder.direct(ULTIMATE_ARMOR_MATERIAL.get()), - ArmorItem.Type.LEGGINGS, - new Item.Properties() - .rarity(Rarity.EPIC) - .fireResistant() - .durability(ArmorItem.Type.LEGGINGS.getDurability(41)) - )); - public static final DeferredItem ULTIMATE_BOOTS = ITEMS.register("ultimate_boots", - () -> new UltimateArmorItem( - net.minecraft.core.Holder.direct(ULTIMATE_ARMOR_MATERIAL.get()), - ArmorItem.Type.BOOTS, - new Item.Properties() - .rarity(Rarity.EPIC) - .fireResistant() - .durability(ArmorItem.Type.BOOTS.getDurability(41)) - )); - public static final DeferredItem ULTIMATE_SWORD = ITEMS.register("ultimate_sword", - () -> new UltimateSwordItem( - ULTIMATE_TIER, - new Item.Properties().stacksTo(1).rarity(Rarity.EPIC).fireResistant(), - AntarchySettings::ultimateSwordAttackDamage, - -2.4F - )); - public static final DeferredItem ULTIMATE_PICKAXE = ITEMS.register("ultimate_pickaxe", - () -> new UltimatePickaxeItem( - ULTIMATE_TIER, - new Item.Properties().stacksTo(1).rarity(Rarity.EPIC).fireResistant(), - AntarchySettings::ultimatePickaxeAttackDamage, - -2.8F - )); - public static final DeferredItem ULTIMATE_AXE = ITEMS.register("ultimate_axe", - () -> new UltimateAxeItem( - ULTIMATE_TIER, - new Item.Properties().stacksTo(1).rarity(Rarity.EPIC).fireResistant(), - AntarchySettings::ultimateAxeAttackDamage, - -3.0F - )); - public static final DeferredItem ULTIMATE_SHOVEL = ITEMS.register("ultimate_shovel", - () -> new UtlimateShovelItem( - ULTIMATE_TIER, - new Item.Properties().stacksTo(1).rarity(Rarity.EPIC).fireResistant(), - AntarchySettings::ultimateShovelAttackDamage, - -3.0F - )); - public static final DeferredItem ULTIMATE_HOE = ITEMS.register("ultimate_hoe", - () -> new UltimateHoeItem( - ULTIMATE_TIER, - new Item.Properties().stacksTo(1).rarity(Rarity.EPIC).fireResistant(), - AntarchySettings::ultimateHoeAttackDamage, - 0.0F - )); - public static final DeferredItem ULTIMATE_BOW = ITEMS.register("ultimate_bow", - () -> new UltimateBowItem(new Item.Properties().stacksTo(1).durability(768).rarity(Rarity.EPIC).fireResistant())); - public static final DeferredItem ULTIMATE_CROSSBOW = ITEMS.register("ultimate_crossbow", - () -> new UltimateCrossbowItem(new Item.Properties().stacksTo(1).durability(1024).rarity(Rarity.EPIC).fireResistant())); -// public static final DeferredItem ULTIMATE_MACE = ITEMS.register("ultimate_mace", -// () -> new UltimateMaceItem(new Item.Properties().stacksTo(1).durability(1024).rarity(Rarity.EPIC).fireResistant())); - public static final DeferredItem NIGHTMARE_HELMET = ITEMS.register("nightmare_helmet", - () -> new NightmareArmorItem( - net.minecraft.core.Holder.direct(NIGHTMARE_ARMOR_MATERIAL.get()), - ArmorItem.Type.HELMET, - new Item.Properties() - .rarity(Rarity.EPIC) - .fireResistant() - .durability(ArmorItem.Type.HELMET.getDurability(41)) - )); - public static final DeferredItem NIGHTMARE_CHESTPLATE = ITEMS.register("nightmare_chestplate", - () -> new NightmareArmorItem( - net.minecraft.core.Holder.direct(NIGHTMARE_ARMOR_MATERIAL.get()), - ArmorItem.Type.CHESTPLATE, - new Item.Properties() - .rarity(Rarity.EPIC) - .fireResistant() - .durability(ArmorItem.Type.CHESTPLATE.getDurability(41)) - )); - public static final DeferredItem NIGHTMARE_LEGGINGS = ITEMS.register("nightmare_leggings", - () -> new NightmareArmorItem( - net.minecraft.core.Holder.direct(NIGHTMARE_ARMOR_MATERIAL.get()), - ArmorItem.Type.LEGGINGS, - new Item.Properties() - .rarity(Rarity.EPIC) - .fireResistant() - .durability(ArmorItem.Type.LEGGINGS.getDurability(41)) - )); - public static final DeferredItem NIGHTMARE_BOOTS = ITEMS.register("nightmare_boots", - () -> new NightmareArmorItem( - net.minecraft.core.Holder.direct(NIGHTMARE_ARMOR_MATERIAL.get()), - ArmorItem.Type.BOOTS, - new Item.Properties() - .rarity(Rarity.EPIC) - .fireResistant() - .durability(ArmorItem.Type.BOOTS.getDurability(41)) - )); - public static final DeferredItem NIGHTMARE_SWORD = ITEMS.register("nightmare_sword", - () -> new NightmareSwordItem( - ULTIMATE_TIER, - new Item.Properties().stacksTo(1).rarity(Rarity.EPIC).fireResistant(), - -2.4F - )); - public static final DeferredItem SHRINK_RAY = ITEMS.register("shrink_ray", - () -> new SizeRayItem( - new Item.Properties().stacksTo(1).durability(512).rarity(Rarity.RARE).fireResistant(), - 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"), - "shrink_ray_active" - )); - public static final DeferredItem GROWTH_RAY = ITEMS.register("growth_ray", - () -> new SizeRayItem( - new Item.Properties().stacksTo(1).durability(512).rarity(Rarity.RARE).fireResistant(), - 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"), - "growth_ray_active" - )); - public static final DeferredItem GRAVITY_GUN = ITEMS.register("gravity_gun", - () -> new GravityGunItem(new Item.Properties().stacksTo(1).durability(512).rarity(Rarity.RARE).fireResistant())); - public static final DeferredItem SQUIDZOOKA = ITEMS.register("squidzooka", - () -> new SquidzookaItem(new Item.Properties().stacksTo(1).durability(384).rarity(Rarity.RARE))); - public static final DeferredItem BATTLE_AXE = ITEMS.register("battle_axe", - () -> new BattleAxeItem( - Tiers.NETHERITE, - new Item.Properties().stacksTo(1).rarity(Rarity.RARE).fireResistant(), - AntarchySettings::battleAxeAttackDamage, - -3.1F - )); - public static final DeferredHolder, EntityType> DIAMOND_MINECART = ENTITY_TYPES.register("diamond_minecart", - () -> EntityType.Builder.of((entityType, level) -> new DiamondMinecartEntity(entityType, level, diamondMinecartItem()), MobCategory.MISC) - .sized(0.98F, 0.7F) - .clientTrackingRange(8) - .build("diamond_minecart")); - public static final DeferredItem DIAMOND_MINECART_ITEM = ITEMS.register("diamond_minecart", - () -> new DiamondMinecartItem(DIAMOND_MINECART, new Item.Properties().stacksTo(1).rarity(Rarity.RARE))); - public static final DeferredItem REVERIE_BOTTLE = ITEMS.register("reverie_bottle", - () -> new ReverieBottleItem(new Item.Properties().stacksTo(1).rarity(Rarity.RARE))); - public static final DeferredItem BIG_BERTHA_BLADE = ITEMS.registerSimpleItem( - "big_bertha_blade", - new Item.Properties().rarity(Rarity.EPIC).fireResistant() - ); - public static final DeferredItem BIG_BERTHA_HANDLE = ITEMS.registerSimpleItem( - "big_bertha_handle", - new Item.Properties().rarity(Rarity.EPIC).fireResistant() - ); - public static final DeferredItem BIG_BERTHA_HILT = ITEMS.registerSimpleItem( - "big_bertha_hilt", - new Item.Properties().rarity(Rarity.EPIC).fireResistant() - ); - public static final DeferredItem BIG_BERTHA = ITEMS.register("big_bertha", - () -> new BigBerthaItem( - Tiers.NETHERITE, - new Item.Properties() - .stacksTo(1) - .rarity(Rarity.EPIC) - .fireResistant() - )); - - public static final DeferredHolder, EntityType> EASTER_BUNNY = ENTITY_TYPES.register("easter_bunny", - () -> EntityType.Builder.of(EasterBunnyEntity::new, MobCategory.CREATURE) - .sized(0.5F, 1.0F) - .clientTrackingRange(8) - .build("easter_bunny")); - public static final DeferredHolder, EntityType> FLYING_SQUIRREL = ENTITY_TYPES.register("flying_squirrel", - () -> EntityType.Builder.of(FlyingSquirrelEntity::new, MobCategory.CREATURE) - .sized(0.6F, 0.7F) - .clientTrackingRange(8) - .build("flying_squirrel")); - public static final DeferredHolder, EntityType> CATERPILLAR = ENTITY_TYPES.register("caterpillar", - () -> EntityType.Builder.of(CaterpillarEntity::new, MobCategory.CREATURE) - .sized(0.8775F, 0.585F) - .clientTrackingRange(8) - .build("caterpillar")); - public static final DeferredHolder, EntityType> BUTTERFLY = ENTITY_TYPES.register("butterfly", - () -> EntityType.Builder.of(ButterflyEntity::new, MobCategory.AMBIENT) - .sized(1.125F, 1.375F) - .clientTrackingRange(8) - .build("butterfly")); - public static final DeferredHolder, EntityType> REVERIE = ENTITY_TYPES.register("reverie", - () -> EntityType.Builder.of(ReverieEntity::new, MobCategory.AMBIENT) - .sized(0.7F, 0.7F) - .clientTrackingRange(8) - .build("reverie")); - public static final DeferredHolder, EntityType> BRUTALFLY = ENTITY_TYPES.register("brutalfly", - () -> EntityType.Builder.of(BrutalflyEntity::new, MobCategory.MONSTER) - .sized(2.4F, 2.1F) - .clientTrackingRange(12) - .build("brutalfly")); - public static final DeferredHolder, EntityType> APPLE_COW = ENTITY_TYPES.register("apple_cow", - () -> buildCowType(AppleCow::new, "apple_cow")); - public static final DeferredHolder, EntityType> GOLDEN_APPLE_COW = ENTITY_TYPES.register("golden_apple_cow", - () -> buildCowType(GoldenAppleCow::new, "golden_apple_cow")); - public static final DeferredHolder, EntityType> ENCHANTED_GOLDEN_APPLE_COW = ENTITY_TYPES.register("enchanted_golden_apple_cow", - () -> buildCowType(EnchantedGoldenAppleCow::new, "enchanted_golden_apple_cow")); - public static final DeferredHolder, EntityType> DR_TRAYAURUS = ENTITY_TYPES.register("dr_trayaurus", - () -> EntityType.Builder.of(DrTrayaurusEntity::new, MobCategory.MISC) - .sized(0.6F, 1.95F) - .clientTrackingRange(10) - .build("dr_trayaurus")); - public static final DeferredHolder, EntityType> CLOUD_SHARK = ENTITY_TYPES.register("cloud_shark", - () -> EntityType.Builder.of(CloudSharkEntity::new, MobCategory.MONSTER) - .sized(2.4F, 0.9F) - .clientTrackingRange(10) - .build("cloud_shark")); - public static final DeferredHolder, EntityType> KRAKEN = ENTITY_TYPES.register("kraken", - () -> EntityType.Builder.of(KrakenEntity::new, MobCategory.MONSTER) - .sized(11.4F, 39.0F) - .clientTrackingRange(12) - .build("kraken")); - public static final DeferredHolder, EntityType> KRAKEN_PART = ENTITY_TYPES.register("kraken_part", - () -> EntityType.Builder.of( - com.craisinlord.antarchy.fabric.entity.multipart.MultipartPartEntity::new, - MobCategory.MISC - ) - .sized(1.0F, 1.0F) - .clientTrackingRange(12) - .updateInterval(1) - .build("kraken_part")); - public static final DeferredHolder, EntityType> MISSILE_SQUID = ENTITY_TYPES.register("missile_squid", - () -> EntityType.Builder.of(MissileSquidEntity::new, MobCategory.MONSTER) - .sized(1.62F, 3.18F) - .clientTrackingRange(10) - .build("missile_squid")); - public static final DeferredHolder, EntityType> OCTOPUS_BOMB = ENTITY_TYPES.register("octopus_bomb", - () -> EntityType.Builder.of(OctopusBombEntity::new, MobCategory.MONSTER) - .sized(2.4F, 2.9F) - .clientTrackingRange(10) - .build("octopus_bomb")); - public static final DeferredHolder, EntityType> NIGHTMARE = ENTITY_TYPES.register("nightmare", - () -> EntityType.Builder.of(NightmareEntity::new, MobCategory.MONSTER) - .sized(3.2F, 3.8F) - .clientTrackingRange(12) - .build("nightmare")); - public static final DeferredHolder, EntityType> LUCID = ENTITY_TYPES.register("lucid", - () -> EntityType.Builder.of(LucidEntity::new, MobCategory.MONSTER) - .sized(2.0F, 2.0F) - .clientTrackingRange(10) - .build("lucid")); - public static final DeferredHolder, EntityType> LUCID_BOLT = ENTITY_TYPES.register("lucid_bolt", - () -> EntityType.Builder.of(LucidBoltEntity::new, MobCategory.MISC) - .sized(0.3F, 0.3F) - .clientTrackingRange(8) - .updateInterval(1) - .build("lucid_bolt")); - public static final DeferredHolder, EntityType> SCORPION = ENTITY_TYPES.register("scorpion", - () -> EntityType.Builder.of(ScorpionEntity::new, MobCategory.MONSTER) - .sized(1.5F, 1.0F) - .clientTrackingRange(8) - .build("scorpion")); - public static final DeferredHolder, EntityType> BASILISK = ENTITY_TYPES.register("basilisk", - () -> EntityType.Builder.of(BasiliskEntity::new, MobCategory.MONSTER) - .sized(3.0F, 3.5F) - .clientTrackingRange(14) - .build("basilisk")); - public static final DeferredHolder, EntityType> EMPEROR_SCORPION = ENTITY_TYPES.register("emperor_scorpion", - () -> EntityType.Builder.of(EmperorScorpionEntity::new, MobCategory.MONSTER) - .sized(6.0F, 3.0F) - .clientTrackingRange(12) - .build("emperor_scorpion")); - public static final DeferredHolder, EntityType> LUCID_PEARL_PROJECTILE = ENTITY_TYPES.register("lucid_pearl_projectile", - () -> EntityType.Builder.of(LucidEyeProjectileEntity::new, MobCategory.MISC) - .sized(0.25F, 0.25F) - .clientTrackingRange(8) - .updateInterval(1) - .build("lucid_pearl_projectile")); - public static final DeferredHolder, EntityType> HUSH_PROJECTILE = ENTITY_TYPES.register("hush_projectile", - () -> EntityType.Builder.of(HushProjectileEntity::new, MobCategory.MISC) - .sized(0.35F, 0.35F) - .clientTrackingRange(8) - .updateInterval(1) - .build("hush_projectile")); - public static final DeferredHolder, EntityType> BRUTALFLY_ORB = ENTITY_TYPES.register("brutalfly_orb", - () -> EntityType.Builder.of(BrutalflyOrbEntity::new, MobCategory.MISC) - .sized(0.75F, 0.75F) - .clientTrackingRange(10) - .updateInterval(1) - .build("brutalfly_orb")); - public static final DeferredHolder, EntityType> UPWARD_FALLING_BLOCK = ENTITY_TYPES.register("upward_falling_block", - () -> EntityType.Builder.of( - com.craisinlord.antarchy.content.entity.UpwardFallingBlockEntity::new, MobCategory.MISC) - .sized(0.98F, 0.98F) - .clientTrackingRange(10) - .updateInterval(1) - .build("upward_falling_block")); - - public static final DeferredItem EASTER_BUNNY_SPAWN_EGG = ITEMS.register("easter_bunny_spawn_egg", - () -> new DeferredSpawnEggItem(EASTER_BUNNY, 0xFFF2B2, 0xFF85B5, new Item.Properties())); - public static final DeferredItem FLYING_SQUIRREL_SPAWN_EGG = ITEMS.register("flying_squirrel_spawn_egg", - () -> new DeferredSpawnEggItem(FLYING_SQUIRREL, 0x7D6649, 0xDCC59C, new Item.Properties())); - public static final DeferredItem CATERPILLAR_SPAWN_EGG = ITEMS.register("caterpillar_spawn_egg", - () -> new DeferredSpawnEggItem(CATERPILLAR, 0xA8D96A, 0xF4E04D, new Item.Properties())); - public static final DeferredItem BUTTERFLY_SPAWN_EGG = ITEMS.register("butterfly_spawn_egg", - () -> new DeferredSpawnEggItem(BUTTERFLY, 0x7A4A1E, 0xFF7A00, new Item.Properties())); - public static final DeferredItem REVERIE_SPAWN_EGG = ITEMS.register("reverie_spawn_egg", - () -> new DeferredSpawnEggItem(REVERIE, 0xF2F2F2, 0xBFC3C7, new Item.Properties())); - public static final DeferredItem BRUTALFLY_SPAWN_EGG = ITEMS.register("brutalfly_spawn_egg", - () -> new DeferredSpawnEggItem(BRUTALFLY, 0x4A2214, 0xFF8A1D, new Item.Properties().rarity(Rarity.EPIC))); - public static final DeferredItem RED_ANT_SPAWN_EGG = ITEMS.register("red_ant_spawn_egg", - () -> new DeferredSpawnEggItem(RED_ANT, 0xA31818, 0x2B0909, new Item.Properties())); - public static final DeferredItem BROWN_ANT_SPAWN_EGG = ITEMS.register("brown_ant_spawn_egg", - () -> new DeferredSpawnEggItem(BROWN_ANT, 0x6A4320, 0x26160A, new Item.Properties())); - public static final DeferredItem RAINBOW_ANT_SPAWN_EGG = ITEMS.register("rainbow_ant_spawn_egg", - () -> new DeferredSpawnEggItem(RAINBOW_ANT, 0x56D4F0, 0xF66DBB, new Item.Properties())); - public static final DeferredItem MOLEWORM_SPAWN_EGG = ITEMS.register("moleworm_spawn_egg", - () -> new DeferredSpawnEggItem(MOLEWORM, 0xB8B8B8, 0x8A623A, new Item.Properties())); - public static final DeferredItem MANTIS_SPAWN_EGG = ITEMS.register("mantis_spawn_egg", - () -> new DeferredSpawnEggItem(MANTIS, 0xF8F8F2, 0x63B44A, new Item.Properties())); - public static final DeferredItem ALPHA_MANTIS_SPAWN_EGG = ITEMS.register("alpha_mantis_spawn_egg", - () -> new DeferredSpawnEggItem(ALPHA_MANTIS, 0x8FDD6C, 0x2F5D22, new Item.Properties())); - public static final DeferredItem MOLEVORE_SPAWN_EGG = ITEMS.register("molevore_spawn_egg", - () -> new DeferredSpawnEggItem(MOLEVORE, 0x4A4A4A, 0x6B4A2B, new Item.Properties().rarity(Rarity.UNCOMMON))); - public static final DeferredItem TRIFFID_SPAWN_EGG = ITEMS.register("triffid_spawn_egg", - () -> new DeferredSpawnEggItem(TRIFFID, 0x4C8F3A, 0xFF2FB3, new Item.Properties().rarity(Rarity.UNCOMMON))); - public static final DeferredItem APPLE_COW_SPAWN_EGG = ITEMS.register("apple_cow_spawn_egg", - () -> new DeferredSpawnEggItem(APPLE_COW, 0xFF1A1A, 0x32FF32, new Item.Properties())); - public static final DeferredItem GOLDEN_APPLE_COW_SPAWN_EGG = ITEMS.register("golden_apple_cow_spawn_egg", - () -> new DeferredSpawnEggItem(GOLDEN_APPLE_COW, 0xFFE14A, 0x32FF32, new Item.Properties())); - public static final DeferredItem ENCHANTED_GOLDEN_APPLE_COW_SPAWN_EGG = ITEMS.register("enchanted_golden_apple_cow_spawn_egg", - () -> new DeferredSpawnEggItem(ENCHANTED_GOLDEN_APPLE_COW, 0x7040B6, 0xFFE14A, new Item.Properties())); - public static final DeferredItem DR_TRAYAURUS_SPAWN_EGG = ITEMS.register("dr_trayaurus_spawn_egg", - () -> new DeferredSpawnEggItem(DR_TRAYAURUS, 0xB7A27B, 0x4A3D29, new Item.Properties())); - public static final DeferredItem WASP_SPAWN_EGG = ITEMS.register("wasp_spawn_egg", - () -> new DeferredSpawnEggItem(WASP, 0x111111, 0xF1D800, new Item.Properties())); - public static final DeferredItem BOMBER_SPAWN_EGG = ITEMS.register("bomber_spawn_egg", - () -> new DeferredSpawnEggItem(BOMBER, 0x7A7A7A, 0xB32020, new Item.Properties())); - public static final DeferredItem CLOUD_SHARK_SPAWN_EGG = ITEMS.register("cloud_shark_spawn_egg", - () -> new DeferredSpawnEggItem(CLOUD_SHARK, 0xDDEAF4, 0x7F96A8, new Item.Properties())); - public static final DeferredItem KRAKEN_SPAWN_EGG = ITEMS.register("kraken_spawn_egg", - () -> new DeferredSpawnEggItem(KRAKEN, 0x163C53, 0x4F8E99, new Item.Properties().rarity(Rarity.EPIC))); - public static final DeferredItem MISSILE_SQUID_SPAWN_EGG = ITEMS.register("missile_squid_spawn_egg", - () -> new DeferredSpawnEggItem(MISSILE_SQUID, 0xD88FA7, 0x8D5269, new Item.Properties().rarity(Rarity.UNCOMMON))); - public static final DeferredItem OCTOPUS_BOMB_SPAWN_EGG = ITEMS.register("octopus_bomb_spawn_egg", - () -> new DeferredSpawnEggItem(OCTOPUS_BOMB, 0xC882C8, 0x5C1A7A, new Item.Properties().rarity(Rarity.UNCOMMON))); - public static final DeferredItem NIGHTMARE_SPAWN_EGG = ITEMS.register("nightmare_spawn_egg", - () -> new DeferredSpawnEggItem(NIGHTMARE, 0x22121C, 0xB51B2D, new Item.Properties().rarity(Rarity.RARE))); - public static final DeferredItem BED_BUG_SPAWN_EGG = ITEMS.register("bed_bug_spawn_egg", - () -> new DeferredSpawnEggItem(BED_BUG, 0x3B2218, 0x611111, new Item.Properties())); - public static final DeferredItem LUCID_SPAWN_EGG = ITEMS.register("lucid_spawn_egg", - () -> new DeferredSpawnEggItem(LUCID, 0xE53935, 0xF4D03F, new Item.Properties().rarity(Rarity.RARE))); - public static final DeferredItem SCORPION_SPAWN_EGG = ITEMS.register("scorpion_spawn_egg", - () -> new DeferredSpawnEggItem(SCORPION, 0xA8D8FF, 0xE04B5A, new Item.Properties())); - public static final DeferredItem BASILISK_SPAWN_EGG = ITEMS.register("basilisk_spawn_egg", - () -> new DeferredSpawnEggItem(BASILISK, 0x4A7C40, 0xD4A040, new Item.Properties())); - public static final DeferredItem EMPEROR_SCORPION_SPAWN_EGG = ITEMS.register("emperor_scorpion_spawn_egg", - () -> new DeferredSpawnEggItem(EMPEROR_SCORPION, 0x3A3242, 0xD8CDB4, new Item.Properties())); - public static final DeferredItem LUCID_EYE = ITEMS.register("lucid_eye", - () -> new LucidEyeItem(new Item.Properties().stacksTo(16).rarity(Rarity.UNCOMMON))); - public static final DeferredItem LUCID_PEARL = ITEMS.register("lucid_pearl", - () -> new LucidPearlItem( - new Item.Properties().stacksTo(16).rarity(Rarity.UNCOMMON), - LUCID_PEARL_PROJECTILE - )); - public static final DeferredItem WATER_CANNON = ITEMS.register("water_cannon", - () -> new WaterCannonItem(new Item.Properties().stacksTo(1).durability(192).rarity(Rarity.RARE))); - public static final DeferredItem PRIMORDIAL_HELMET = ITEMS.register("primordial_helmet", - () -> new PrimordialArmorItem(net.minecraft.core.Holder.direct(PRIMORDIAL_ARMOR_MATERIAL.get()), ArmorItem.Type.HELMET, - new Item.Properties().stacksTo(1).rarity(Rarity.RARE).fireResistant().durability(ArmorItem.Type.HELMET.getDurability(37)))); - public static final DeferredItem PRIMORDIAL_CHESTPLATE = ITEMS.register("primordial_chestplate", - () -> new PrimordialArmorItem(net.minecraft.core.Holder.direct(PRIMORDIAL_ARMOR_MATERIAL.get()), ArmorItem.Type.CHESTPLATE, - new Item.Properties().stacksTo(1).rarity(Rarity.RARE).fireResistant().durability(ArmorItem.Type.CHESTPLATE.getDurability(37)))); - public static final DeferredItem PRIMORDIAL_LEGGINGS = ITEMS.register("primordial_leggings", - () -> new PrimordialArmorItem(net.minecraft.core.Holder.direct(PRIMORDIAL_ARMOR_MATERIAL.get()), ArmorItem.Type.LEGGINGS, - new Item.Properties().stacksTo(1).rarity(Rarity.RARE).fireResistant().durability(ArmorItem.Type.LEGGINGS.getDurability(37)))); - public static final DeferredItem PRIMORDIAL_BOOTS = ITEMS.register("primordial_boots", - () -> new PrimordialArmorItem(net.minecraft.core.Holder.direct(PRIMORDIAL_ARMOR_MATERIAL.get()), ArmorItem.Type.BOOTS, - new Item.Properties().stacksTo(1).rarity(Rarity.RARE).fireResistant().durability(ArmorItem.Type.BOOTS.getDurability(37)))); - public static final DeferredHolder, EntityType> TORETERROR = ENTITY_TYPES.register("toreterror", - () -> EntityType.Builder.of(ToreterrorEntity::new, MobCategory.MONSTER) - .sized(2.0F, 3.0F) - .clientTrackingRange(14) - .build("toreterror")); - public static final DeferredHolder, EntityType> WATER_BOMB = ENTITY_TYPES.register("water_bomb", - () -> EntityType.Builder.of(WaterBombEntity::new, MobCategory.MISC) - .sized(0.4F, 0.4F) - .clientTrackingRange(8) - .updateInterval(1) - .build("water_bomb")); - public static final DeferredItem TORETERROR_SPAWN_EGG = ITEMS.register("toreterror_spawn_egg", - () -> new DeferredSpawnEggItem(TORETERROR, 0x90EE90, 0x5C4033, new Item.Properties().rarity(Rarity.EPIC))); - - public static final DeferredHolder, EntityType> CHEEP = ENTITY_TYPES.register("cheep", - () -> EntityType.Builder.of(com.craisinlord.antarchy.content.entity.CheepEntity::new, MobCategory.WATER_AMBIENT) - .sized(1.0F, 1.2F) - .clientTrackingRange(8) - .build("cheep")); - public static final DeferredItem CHEEP_SPAWN_EGG = ITEMS.register("cheep_spawn_egg", - () -> new DeferredSpawnEggItem(CHEEP, 0xFF00AA, 0x00FF44, new Item.Properties())); - - // public static final DeferredHolder, EntityType> GLIMMER = ENTITY_TYPES.register("glimmer", - // () -> EntityType.Builder.of(com.craisinlord.antarchy.content.entity.GlimmerEntity::new, MobCategory.CREATURE) - // .sized(0.9F, 1.4F) - // .clientTrackingRange(8) - // .build("glimmer")); - // public static final DeferredItem GLIMMER_SPAWN_EGG = ITEMS.register("glimmer_spawn_egg", - // () -> new DeferredSpawnEggItem(GLIMMER, 0xBEEFFF, 0x6FD8FF, new Item.Properties())); - - public static final DeferredHolder ANTARCHY_TAB = CREATIVE_MODE_TABS.register("antarchy", - () -> CreativeModeTab.builder(CreativeModeTab.Row.TOP, 0) - .title(net.minecraft.network.chat.Component.translatable("itemGroup.antarchy.antarchy")) - .icon(() -> new ItemStack(GRAVITY_GUN.get())) - .displayItems((parameters, output) -> populateCreativeTab(output)) - .build()); - - private static EntityType buildCowType(EntityType.EntityFactory factory, String name) { - return EntityType.Builder.of(factory, MobCategory.CREATURE) - .sized(0.9F, 1.4F) - .clientTrackingRange(10) - .build(name); - } - - private static EntityType buildAntType(EntityType.EntityFactory factory, MobCategory category, String name) { - return EntityType.Builder.of(factory, category) - .sized(0.6375F, 0.2125F) - .clientTrackingRange(8) - .build(name); - } - - private static AttributeSupplier.Builder buildAntAttributes(double health, double speed, double attackDamage) { - return net.minecraft.world.entity.Mob.createMobAttributes() - .add(Attributes.MAX_HEALTH, health) - .add(Attributes.MOVEMENT_SPEED, speed) - .add(Attributes.ATTACK_DAMAGE, attackDamage); - } - - private static Holder mobEffectHolder(DeferredHolder effect) { - return BuiltInRegistries.MOB_EFFECT.wrapAsHolder(effect.get()); - } - - private static Holder attributeHolder(DeferredHolder attribute) { - return BuiltInRegistries.ATTRIBUTE.wrapAsHolder(attribute.get()); - } - - private static Holder potionHolder(DeferredHolder potion) { + public static Holder potionHolder(DeferredHolder potion) { return BuiltInRegistries.POTION.wrapAsHolder(potion.get()); } - private static Holder armorMaterialHolder(DeferredHolder material) { - return BuiltInRegistries.ARMOR_MATERIAL.wrapAsHolder(material.get()); - } - private static void registerEntityAttributes() { - FabricDefaultAttributeRegistry.register( - net.minecraft.world.entity.EntityType.PLAYER, - net.minecraft.world.entity.player.Player.createAttributes() - .add(attributeHolder(DOUBLE_DAMAGE_CHANCE)) - .add(attributeHolder(BLOODGLASS_MAX_HEARTS)) - .build() - ); - - AttributeSupplier rabbitAttributes = Rabbit.createAttributes().build(); - FabricDefaultAttributeRegistry.register(EASTER_BUNNY.get(), rabbitAttributes); - FabricDefaultAttributeRegistry.register(FLYING_SQUIRREL.get(), FlyingSquirrelEntity.createAttributes().build()); - FabricDefaultAttributeRegistry.register(CATERPILLAR.get(), CaterpillarEntity.createAttributes().build()); - FabricDefaultAttributeRegistry.register(BUTTERFLY.get(), ButterflyEntity.createAttributes().build()); - FabricDefaultAttributeRegistry.register(REVERIE.get(), ReverieEntity.createAttributes().build()); - FabricDefaultAttributeRegistry.register(BRUTALFLY.get(), BrutalflyEntity.createAttributes().build()); - - AttributeSupplier cowAttributes = Cow.createAttributes().build(); - FabricDefaultAttributeRegistry.register(APPLE_COW.get(), cowAttributes); - FabricDefaultAttributeRegistry.register(GOLDEN_APPLE_COW.get(), cowAttributes); - FabricDefaultAttributeRegistry.register(ENCHANTED_GOLDEN_APPLE_COW.get(), cowAttributes); - FabricDefaultAttributeRegistry.register(DR_TRAYAURUS.get(), Villager.createAttributes().build()); - FabricDefaultAttributeRegistry.register(CLOUD_SHARK.get(), CloudSharkEntity.createAttributes().build()); - FabricDefaultAttributeRegistry.register(KRAKEN.get(), KrakenEntity.createAttributes().build()); - FabricDefaultAttributeRegistry.register(MISSILE_SQUID.get(), MissileSquidEntity.createAttributes().build()); - FabricDefaultAttributeRegistry.register(OCTOPUS_BOMB.get(), OctopusBombEntity.createAttributes().build()); - FabricDefaultAttributeRegistry.register(NIGHTMARE.get(), NightmareEntity.createAttributes().build()); - FabricDefaultAttributeRegistry.register(BED_BUG.get(), BedBugEntity.createAttributes().build()); - FabricDefaultAttributeRegistry.register(WASP.get(), WaspEntity.createAttributes().build()); - FabricDefaultAttributeRegistry.register(BOMBER.get(), BomberEntity.createAttributes().build()); - FabricDefaultAttributeRegistry.register(MANTIS.get(), MantisEntity.createAttributes().build()); - FabricDefaultAttributeRegistry.register(ALPHA_MANTIS.get(), AlphaMantisEntity.createAttributes().build()); - FabricDefaultAttributeRegistry.register(TRIFFID.get(), TriffidEntity.createAttributes().build()); - FabricDefaultAttributeRegistry.register(LUCID.get(), LucidEntity.createAttributes().build()); - FabricDefaultAttributeRegistry.register(SCORPION.get(), ScorpionEntity.createAttributes().build()); - FabricDefaultAttributeRegistry.register(BASILISK.get(), BasiliskEntity.createAttributes().build()); - FabricDefaultAttributeRegistry.register(EMPEROR_SCORPION.get(), EmperorScorpionEntity.createAttributes().build()); - FabricDefaultAttributeRegistry.register(TORETERROR.get(), ToreterrorEntity.createAttributes().build()); - FabricDefaultAttributeRegistry.register(CHEEP.get(), com.craisinlord.antarchy.content.entity.CheepEntity.createAttributes().build()); - // FabricDefaultAttributeRegistry.register(GLIMMER.get(), com.craisinlord.antarchy.content.entity.GlimmerEntity.createAttributes().build()); - - FabricDefaultAttributeRegistry.register(RED_ANT.get(), buildAntAttributes( - AntarchySettings.redAntHealth(), - AntarchySettings.redAntMovementSpeed(), - AntarchySettings.redAntAttackDamage() - ).build()); - FabricDefaultAttributeRegistry.register(BROWN_ANT.get(), buildAntAttributes( - AntarchySettings.brownAntHealth(), - AntarchySettings.brownAntMovementSpeed(), - AntarchySettings.brownAntAttackDamage() - ).build()); - FabricDefaultAttributeRegistry.register(RAINBOW_ANT.get(), buildAntAttributes( - AntarchySettings.rainbowAntHealth(), - AntarchySettings.rainbowAntMovementSpeed(), - AntarchySettings.rainbowAntAttackDamage() - ).build()); - FabricDefaultAttributeRegistry.register(MOLEWORM.get(), MolewormEntity.createAttributes().build()); - FabricDefaultAttributeRegistry.register(MOLEVORE.get(), MolevoreEntity.createAttributes().build()); - } - - private static void registerSpawnPlacements() { - SpawnPlacements.register(FLYING_SQUIRREL.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING, FlyingSquirrelEntity::canSpawn); - SpawnPlacements.register(CATERPILLAR.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, CaterpillarEntity::canSpawn); - SpawnPlacements.register(BUTTERFLY.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, ButterflyEntity::canSpawn); - SpawnPlacements.register(REVERIE.get(), SpawnPlacementTypes.NO_RESTRICTIONS, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, ReverieEntity::canSpawn); - SpawnPlacements.register(BRUTALFLY.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, Monster::checkMonsterSpawnRules); - SpawnPlacements.register(APPLE_COW.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, Cow::checkAnimalSpawnRules); - SpawnPlacements.register(GOLDEN_APPLE_COW.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, Cow::checkAnimalSpawnRules); - SpawnPlacements.register(ENCHANTED_GOLDEN_APPLE_COW.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, Cow::checkAnimalSpawnRules); - SpawnPlacements.register(CLOUD_SHARK.get(), SpawnPlacementTypes.NO_RESTRICTIONS, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, CloudSharkEntity::canSpawn); - SpawnPlacements.register(WASP.get(), SpawnPlacementTypes.NO_RESTRICTIONS, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, WaspEntity::canSpawn); - SpawnPlacements.register(BOMBER.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, BomberEntity::canSpawn); - SpawnPlacements.register(KRAKEN.get(), SpawnPlacementTypes.IN_WATER, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, KrakenEntity::canSpawn); - SpawnPlacements.register(MISSILE_SQUID.get(), SpawnPlacementTypes.IN_WATER, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, MissileSquidEntity::canSpawn); - SpawnPlacements.register(OCTOPUS_BOMB.get(), SpawnPlacementTypes.IN_WATER, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, OctopusBombEntity::canSpawn); - SpawnPlacements.register(CHEEP.get(), SpawnPlacementTypes.IN_WATER, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, net.minecraft.world.entity.animal.AbstractFish::checkSurfaceWaterAnimalSpawnRules); - // SpawnPlacements.register(GLIMMER.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, net.minecraft.world.entity.animal.Animal::checkAnimalSpawnRules); - SpawnPlacements.register(NIGHTMARE.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, NightmareEntity::canSpawn); - SpawnPlacements.register(MOLEWORM.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, MolewormEntity::canSpawn); - SpawnPlacements.register(MANTIS.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, MantisEntity::canSpawn); - SpawnPlacements.register(ALPHA_MANTIS.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, AlphaMantisEntity::checkAlphaMantisSpawnRules); - SpawnPlacements.register(MOLEVORE.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, MolevoreEntity::canSpawn); - SpawnPlacements.register(BED_BUG.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, BedBugEntity::canSpawn); - SpawnPlacements.register(LUCID.get(), SpawnPlacementTypes.NO_RESTRICTIONS, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, LucidEntity::canSpawn); - SpawnPlacements.register(SCORPION.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, ScorpionEntity::canSpawn); - SpawnPlacements.register(BASILISK.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, BasiliskEntity::canSpawn); - SpawnPlacements.register(EMPEROR_SCORPION.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, EmperorScorpionEntity::canSpawn); - SpawnPlacements.register(TORETERROR.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, ToreterrorEntity::canSpawn); - } - - private static void populateCreativeTab(CreativeModeTab.Output output) { - ArrayList sortedItems = new ArrayList<>(); - for (var holder : ITEMS.getEntries()) { - Item item = holder.get(); - if (item != Items.AIR) { - sortedItems.add(item); - } - } - sortedItems.sort(Comparator.comparingInt(AntarchyFabricContent::creativeTabGroup)); - sortedItems.forEach(output::accept); - addPotionVariants(output); - } - - private static void addPotionVariants(CreativeModeTab.Output output) { - acceptPotionFamily(output, DREAD_POTION); - acceptPotionFamily(output, LONG_DREAD); - acceptPotionFamily(output, INVERSION); - acceptPotionFamily(output, LONG_INVERSION); - acceptPotionFamily(output, STINKY_POTION); - acceptPotionFamily(output, LONG_STINKY); - acceptPotionFamily(output, PARALYSIS); - acceptPotionFamily(output, LONG_PARALYSIS); - acceptPotionFamily(output, HASTE); - acceptPotionFamily(output, STRONG_HASTE); - acceptPotionFamily(output, SHRINKING); - acceptPotionFamily(output, STRONG_SHRINKING); - acceptPotionFamily(output, EXTREME_SHRINKING); - acceptPotionFamily(output, GROWING); - acceptPotionFamily(output, STRONG_GROWING); - acceptPotionFamily(output, EXTREME_GROWING); - } - - private static void acceptPotionFamily(CreativeModeTab.Output output, DeferredHolder potion) { - Holder holder = potionHolder(potion); - output.accept(PotionContents.createItemStack(Items.POTION, holder)); - output.accept(PotionContents.createItemStack(Items.SPLASH_POTION, holder)); - output.accept(PotionContents.createItemStack(Items.LINGERING_POTION, holder)); - output.accept(PotionContents.createItemStack(Items.TIPPED_ARROW, holder)); - } - - private static int creativeTabGroup(Item item) { - String path = BuiltInRegistries.ITEM.getKey(item).getPath(); - return switch (path) { - case "ouranwood_log", "ouranwood_wood", "mossy_ouranwood_log", "mossy_ouranwood_wood", - "stripped_ouranwood_log", "stripped_ouranwood_wood", "duplicator_log", - "ouranwood_planks", "ouranwood_stairs", "ouranwood_slab", - "ouranwood_fence", "ouranwood_fence_gate", - "ouranwood_door", "ouranwood_trapdoor", - "ouranwood_pressure_plate", "ouranwood_button", - "ouranwood_sign", "ouranwood_hanging_sign", - "ouranwood_boat", "ouranwood_chest_boat" -> 0; - case "nyxite", "polished_nyxite", "chiseled_nyxite", "nyxite_bricks", - "nyxite_stairs", "nyxite_slab", "nyxite_wall", - "polished_nyxite_stairs", "polished_nyxite_slab", "polished_nyxite_wall", - "nyxite_brick_stairs", "nyxite_brick_slab", "nyxite_brick_wall", - "pale_nyxite", "nyxite_spike", "potent_nyxite" -> 1; - case "shellstone", "polished_shellstone", "shellstone_bricks", "chiseled_shellstone", - "mossy_shellstone_bricks", "cracked_shellstone_bricks", - "shellstone_stairs", "shellstone_slab", "shellstone_wall", - "polished_shellstone_stairs", "polished_shellstone_slab", "polished_shellstone_wall", - "shellstone_brick_stairs", "shellstone_brick_slab", "shellstone_brick_wall", - "mossy_shellstone_brick_stairs", "mossy_shellstone_brick_slab", "mossy_shellstone_brick_wall" -> 2; - case "antimetal", "polished_antimetal" -> 3; - case "dream_sand", "dream_sandstone", "chiseled_dream_sandstone", - "cut_dream_sandstone", "smooth_dream_sandstone", - "dream_sandstone_stairs", "dream_sandstone_slab", "dream_sandstone_wall", - "smooth_dream_sandstone_stairs", "smooth_dream_sandstone_slab", - "cut_dream_sandstone_slab" -> 4; - case "umbral_moss_block", "umbral_moss_carpet" -> 4; - case "hushweed", "orange_milkweed", "pink_milkweed", "amber_lichen", "creepvine" -> 6; - case "blood_crystal_block", "budding_blood_crystal", - "small_blood_crystal_bud", "medium_blood_crystal_bud", - "large_blood_crystal_bud", "blood_crystal_cluster" -> 7; - case "myrmite", "broodstone", "chiten_block", "chiten_spike", "amber_moss_block", "amber_moss_carpet" -> 8; - case "uranium_ore", "deepslate_uranium_ore", "titanium_ore", "deepslate_titanium_ore", - "uranium_block", "titanium_block", "raw_uranium_block", "raw_titanium_block", - "cut_uranium", "cut_titanium", "cut_uranium_slab", "cut_titanium_slab", - "cut_uranium_stairs", "cut_titanium_stairs", "chiseled_uranium", - "chiseled_titanium", "uranium_bulb", "titanium_bulb", - "uranium_door", "titanium_door", "uranium_trapdoor", "titanium_trapdoor", - "uranium_bars", "titanium_bars" -> 8; - case "infested_rooted_dirt", "infested_coarse_dirt", "triffid_goo_block", - "cloud_block", "creeping_horror_egg", "lurking_terror_egg" -> 9; - case "dream_torch", "dream_lantern", "dream_campfire", "dream_fire", "dream_fire_ceiling" -> 10; - case "easter_bunny_spawn_egg", "flying_squirrel_spawn_egg", "caterpillar_spawn_egg", - "butterfly_spawn_egg", "reverie_spawn_egg", "brutalfly_spawn_egg", - "red_ant_spawn_egg", "brown_ant_spawn_egg", "rainbow_ant_spawn_egg", "termite_spawn_egg", - "moleworm_spawn_egg", "mantis_spawn_egg", "alpha_mantis_spawn_egg", "rolly_polly_spawn_egg", "molevore_spawn_egg", "triffid_spawn_egg", - "apple_cow_spawn_egg", "golden_apple_cow_spawn_egg", "enchanted_golden_apple_cow_spawn_egg", - "dr_trayaurus_spawn_egg", "wasp_spawn_egg", - "bomber_spawn_egg", "jumpy_bug_spawn_egg", "stink_bug_spawn_egg", "cloud_shark_spawn_egg", "kraken_spawn_egg", "missile_squid_spawn_egg", "octopus_bomb_spawn_egg", - "nightmare_spawn_egg", "bed_bug_spawn_egg", "lucid_spawn_egg", "scorpion_spawn_egg", - "basilisk_spawn_egg", "emperor_scorpion_spawn_egg", "toreterror_spawn_egg", - "hercules_beetle_spawn_egg", - "creeping_horror_spawn_egg", "lurking_terror_spawn_egg" -> 90; - case "stink_bug", "chiten" -> 22; - case "water_cannon" -> 52; - case "primordial_helmet", "primordial_chestplate", "primordial_leggings", "primordial_boots" -> 53; - case "jumpy_boots" -> 54; - case "king_scale", "queen_scale" -> 22; - default -> 50; - }; - } - - private static BlockEntityType antNestBlockEntityType() { - return ANT_NEST_BLOCK_ENTITY.get(); - } - - private static BlockEntityType waspNestBlockEntityType() { - return WASP_NEST_BLOCK_ENTITY.get(); - } - - private static BlockEntityType potentNyxiteBlockEntityType() { - return POTENT_NYXITE_BLOCK_ENTITY.get(); - } - - private static Block smallBloodCrystalBudBlock() { - return SMALL_BLOOD_CRYSTAL_BUD.get(); - } - - private static Item cloudBucketItem() { - return CLOUD_BUCKET.get(); - } - - private static Block mediumBloodCrystalBudBlock() { - return MEDIUM_BLOOD_CRYSTAL_BUD.get(); - } - - private static Block largeBloodCrystalBudBlock() { - return LARGE_BLOOD_CRYSTAL_BUD.get(); - } - - private static Block bloodCrystalCrystalBlock() { - return BLOOD_CRYSTAL_CRYSTAL.get(); - } - - // private static OuranwoodVinePlantBlock createOuranwoodVinePlant() { - // OuranwoodVinePlantBlock.bindHeadBlock(OURANWOOD_VINE_INSTANCE); - // OuranwoodVinePlantBlock block = new OuranwoodVinePlantBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.WEEPING_VINES_PLANT)); - // OuranwoodVineBlock.bindBodyBlock(block); - // return block; - // } - - private static Block createDirtOre(Block copyFrom) { - return new Block(dirtOreProperties()); - } - - private static Block createDirtOre(Block copyFrom, int minExperience, int maxExperience) { - return new DropExperienceBlock(UniformInt.of(minExperience, maxExperience), dirtOreProperties()); - } - - private static BlockBehaviour.Properties dirtOreProperties() { - return BlockBehaviour.Properties.ofFullCopy(Blocks.DIRT) - .sound(SoundType.ROOTED_DIRT) - .strength(0.65F, 0.8F) - .requiresCorrectToolForDrops(); - } - - private static BlockBehaviour.Properties nyxiteProperties() { - return BlockBehaviour.Properties.ofFullCopy(Blocks.NETHERRACK); - } - - private static BlockBehaviour.Properties portalProperties() { - return BlockBehaviour.Properties.of() - .strength(-1.0F) - .noCollission() - .noOcclusion() - .lightLevel(state -> 11) - .noLootTable() - .isSuffocating((state, level, pos) -> false) - .isViewBlocking((state, level, pos) -> false); - } - - private static Block createOre(Block copyFrom) { - return new Block(BlockBehaviour.Properties.ofFullCopy(copyFrom).requiresCorrectToolForDrops()); - } - - private static Block createOre(Block copyFrom, int minExperience, int maxExperience) { - return new DropExperienceBlock(UniformInt.of(minExperience, maxExperience), BlockBehaviour.Properties.ofFullCopy(copyFrom).requiresCorrectToolForDrops()); - } - - private static Block createStorageBlock(Block copyFrom) { - return new Block(BlockBehaviour.Properties.ofFullCopy(copyFrom).requiresCorrectToolForDrops()); - } - - private static Block createHorizontalFacingStorageBlock(Block copyFrom) { - return new SimpleHorizontalFacingBlock(BlockBehaviour.Properties.ofFullCopy(copyFrom).requiresCorrectToolForDrops()); - } - - private static final class SimpleHorizontalFacingBlock extends HorizontalDirectionalBlock { - private static final MapCodec CODEC = simpleCodec(SimpleHorizontalFacingBlock::new); - - private SimpleHorizontalFacingBlock(BlockBehaviour.Properties properties) { - super(properties); - registerDefaultState(stateDefinition.any().setValue(FACING, Direction.NORTH)); - } - - @Override - protected MapCodec codec() { - return CODEC; - } - - @Override - protected void createBlockStateDefinition(StateDefinition.Builder builder) { - builder.add(FACING); - } - - @Override - public BlockState getStateForPlacement(BlockPlaceContext context) { - return defaultBlockState().setValue(FACING, context.getHorizontalDirection().getOpposite()); - } - - @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))); - } - } - - private static Block createRawStorageBlock(Block copyFrom) { - return new Block(BlockBehaviour.Properties.ofFullCopy(copyFrom) - .strength(3.5F, 6.0F) - .requiresCorrectToolForDrops()); - } - - private static Item diamondMinecartItem() { - return DIAMOND_MINECART_ITEM.get(); - } - - - private static DeferredHolder registerSoundEvent(String path) { - return SOUND_EVENTS.register(path, - () -> SoundEvent.createVariableRangeEvent(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, path))); - } private static boolean isModLoaded(String modId) { return FabricLoader.getInstance().isModLoaded(modId); } - private static Ingredient bloodCrystalRepairIngredient() { - return Ingredient.of(BuiltInRegistries.ITEM.getOptional(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "blood_crystal_shard")) - .orElse(Items.AIR)); - } - private static Ingredient ultimateRepairIngredient() { - return Ingredient.of(TITANIUM_INGOT.get()); - } - private static java.util.EnumMap createUltimateArmorDefense() { - java.util.EnumMap defense = new java.util.EnumMap<>(ArmorItem.Type.class); - defense.put(ArmorItem.Type.BOOTS, 6); - defense.put(ArmorItem.Type.LEGGINGS, 12); - defense.put(ArmorItem.Type.CHESTPLATE, 16); - defense.put(ArmorItem.Type.HELMET, 6); - defense.put(ArmorItem.Type.BODY, 16); - return defense; - } - - private static java.util.EnumMap createNightmareArmorDefense() { - java.util.EnumMap defense = new java.util.EnumMap<>(ArmorItem.Type.class); - defense.put(ArmorItem.Type.BOOTS, 4); - defense.put(ArmorItem.Type.LEGGINGS, 9); - defense.put(ArmorItem.Type.CHESTPLATE, 11); - defense.put(ArmorItem.Type.HELMET, 4); - defense.put(ArmorItem.Type.BODY, 11); - return defense; - } - - private static java.util.EnumMap createJumpyBootsDefense() { - java.util.EnumMap defense = new java.util.EnumMap<>(ArmorItem.Type.class); - defense.put(ArmorItem.Type.BOOTS, 3); - defense.put(ArmorItem.Type.LEGGINGS, 0); - defense.put(ArmorItem.Type.CHESTPLATE, 0); - defense.put(ArmorItem.Type.HELMET, 0); - defense.put(ArmorItem.Type.BODY, 0); - return defense; - } - - private static java.util.EnumMap createBloodCrystalArmorDefense() { - java.util.EnumMap defense = new java.util.EnumMap<>(ArmorItem.Type.class); - defense.put(ArmorItem.Type.BOOTS, 2); - defense.put(ArmorItem.Type.LEGGINGS, 5); - defense.put(ArmorItem.Type.CHESTPLATE, 6); - defense.put(ArmorItem.Type.HELMET, 2); - defense.put(ArmorItem.Type.BODY, 6); - return defense; - } - - private static java.util.EnumMap createMogglesArmorDefense() { - java.util.EnumMap defense = new java.util.EnumMap<>(ArmorItem.Type.class); - defense.put(ArmorItem.Type.BOOTS, 0); - defense.put(ArmorItem.Type.LEGGINGS, 0); - defense.put(ArmorItem.Type.CHESTPLATE, 0); - defense.put(ArmorItem.Type.HELMET, 2); - defense.put(ArmorItem.Type.BODY, 2); - return defense; - } - - private static java.util.EnumMap createPrimordialArmorDefense() { - java.util.EnumMap defense = new java.util.EnumMap<>(ArmorItem.Type.class); - defense.put(ArmorItem.Type.BOOTS, 3); - defense.put(ArmorItem.Type.LEGGINGS, 6); - defense.put(ArmorItem.Type.CHESTPLATE, 8); - defense.put(ArmorItem.Type.HELMET, 3); - defense.put(ArmorItem.Type.BODY, 8); - return defense; - } - - private static java.util.EnumMap createFallenKingCrownDefense() { - java.util.EnumMap defense = new java.util.EnumMap<>(ArmorItem.Type.class); - defense.put(ArmorItem.Type.BOOTS, 0); - defense.put(ArmorItem.Type.LEGGINGS, 0); - defense.put(ArmorItem.Type.CHESTPLATE, 0); - defense.put(ArmorItem.Type.HELMET, 2); - defense.put(ArmorItem.Type.BODY, 2); - return defense; - } - - private static SimpleParticleType simpleParticleType() { - return new SimpleParticleType(true) { - }; - } - - private static ParticleType particleType( - java.util.function.Function, com.mojang.serialization.MapCodec> codecFactory, - java.util.function.Function, net.minecraft.network.codec.StreamCodec> streamCodecFactory - ) { - return new ParticleType<>(false) { - @Override - public com.mojang.serialization.MapCodec codec() { - return codecFactory.apply(this); - } - - @Override - public net.minecraft.network.codec.StreamCodec streamCodec() { - return streamCodecFactory.apply(this); - } - }; - } - - private static net.minecraft.world.level.material.FlowingFluid lookupFlowingFluid(String path) { + public static net.minecraft.world.level.material.FlowingFluid lookupFlowingFluid(String path) { return (net.minecraft.world.level.material.FlowingFluid) BuiltInRegistries.FLUID.get(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, path)); } - private static Item lookupItem(String path) { + + + public static Item lookupItem(String path) { return BuiltInRegistries.ITEM.get(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, path)); } - private static LiquidBlock lookupLiquidBlock(String path) { + + + public static LiquidBlock lookupLiquidBlock(String path) { return (LiquidBlock) BuiltInRegistries.BLOCK.get(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, path)); } + + public static void register() { - com.craisinlord.antarchy.content.entity.UpwardFallingBlockEntity.TYPE = UPWARD_FALLING_BLOCK; + com.craisinlord.antarchy.content.entity.UpwardFallingBlockEntity.TYPE = AntarchyFabricEntities.UPWARD_FALLING_BLOCK; FabricBrewingRecipeRegistryBuilder.BUILD.register(builder -> { - builder.registerPotionRecipe(net.minecraft.world.item.alchemy.Potions.AWKWARD, Ingredient.of(LUCID_EYE.get()), potionHolder(INVERSION)); - builder.registerPotionRecipe(potionHolder(INVERSION), Ingredient.of(Items.REDSTONE), potionHolder(LONG_INVERSION)); - builder.registerPotionRecipe(net.minecraft.world.item.alchemy.Potions.AWKWARD, Ingredient.of(STINK_BUG_ITEM.get()), potionHolder(STINKY_POTION)); - builder.registerPotionRecipe(potionHolder(STINKY_POTION), Ingredient.of(Items.REDSTONE), potionHolder(LONG_STINKY)); - builder.registerPotionRecipe(net.minecraft.world.item.alchemy.Potions.AWKWARD, Ingredient.of(BASILISK_FANG.get()), potionHolder(PARALYSIS)); - builder.registerPotionRecipe(potionHolder(PARALYSIS), Ingredient.of(Items.REDSTONE), potionHolder(LONG_PARALYSIS)); - builder.registerPotionRecipe(net.minecraft.world.item.alchemy.Potions.AWKWARD, Ingredient.of(MOLEWORM_ITEM.get()), potionHolder(HASTE)); - builder.registerPotionRecipe(potionHolder(HASTE), Ingredient.of(Items.GLOWSTONE_DUST), potionHolder(STRONG_HASTE)); - builder.registerPotionRecipe(net.minecraft.world.item.alchemy.Potions.AWKWARD, Ingredient.of(URANIUM_NUGGET.get()), potionHolder(SHRINKING)); - builder.registerPotionRecipe(potionHolder(SHRINKING), Ingredient.of(Items.GLOWSTONE_DUST), potionHolder(STRONG_SHRINKING)); - builder.registerPotionRecipe(potionHolder(STRONG_SHRINKING), Ingredient.of(Items.GLOWSTONE_DUST), potionHolder(EXTREME_SHRINKING)); - builder.registerPotionRecipe(net.minecraft.world.item.alchemy.Potions.AWKWARD, Ingredient.of(TITANIUM_NUGGET.get()), potionHolder(GROWING)); - builder.registerPotionRecipe(potionHolder(GROWING), Ingredient.of(Items.GLOWSTONE_DUST), potionHolder(STRONG_GROWING)); - builder.registerPotionRecipe(potionHolder(STRONG_GROWING), Ingredient.of(Items.GLOWSTONE_DUST), potionHolder(EXTREME_GROWING)); - builder.registerPotionRecipe(net.minecraft.world.item.alchemy.Potions.AWKWARD, Ingredient.of(CLOUD_SHARK_FIN.get()), net.minecraft.world.item.alchemy.Potions.SLOW_FALLING); - builder.registerPotionRecipe(net.minecraft.world.item.alchemy.Potions.AWKWARD, Ingredient.of(JUMPY_BUG_LEG.get()), Potions.LEAPING); - builder.registerPotionRecipe(net.minecraft.world.item.alchemy.Potions.AWKWARD, Ingredient.of(CORNEA_EAR.get()), net.minecraft.world.item.alchemy.Potions.NIGHT_VISION); + builder.registerPotionRecipe(net.minecraft.world.item.alchemy.Potions.AWKWARD, Ingredient.of(AntarchyFabricItems.LUCID_EYE.get()), potionHolder(AntarchyFabricMisc.INVERSION)); + builder.registerPotionRecipe(potionHolder(AntarchyFabricMisc.INVERSION), Ingredient.of(Items.REDSTONE), potionHolder(AntarchyFabricMisc.LONG_INVERSION)); + builder.registerPotionRecipe(net.minecraft.world.item.alchemy.Potions.AWKWARD, Ingredient.of(AntarchyFabricItems.STINK_BUG_ITEM.get()), potionHolder(AntarchyFabricMisc.STINKY_POTION)); + builder.registerPotionRecipe(potionHolder(AntarchyFabricMisc.STINKY_POTION), Ingredient.of(Items.REDSTONE), potionHolder(AntarchyFabricMisc.LONG_STINKY)); + builder.registerPotionRecipe(net.minecraft.world.item.alchemy.Potions.AWKWARD, Ingredient.of(AntarchyFabricItems.BASILISK_FANG.get()), potionHolder(AntarchyFabricMisc.PARALYSIS)); + builder.registerPotionRecipe(potionHolder(AntarchyFabricMisc.PARALYSIS), Ingredient.of(Items.REDSTONE), potionHolder(AntarchyFabricMisc.LONG_PARALYSIS)); + builder.registerPotionRecipe(net.minecraft.world.item.alchemy.Potions.AWKWARD, Ingredient.of(AntarchyFabricItems.MOLEWORM_ITEM.get()), potionHolder(AntarchyFabricMisc.HASTE)); + builder.registerPotionRecipe(potionHolder(AntarchyFabricMisc.HASTE), Ingredient.of(Items.GLOWSTONE_DUST), potionHolder(AntarchyFabricMisc.STRONG_HASTE)); + builder.registerPotionRecipe(net.minecraft.world.item.alchemy.Potions.AWKWARD, Ingredient.of(AntarchyFabricItems.URANIUM_NUGGET.get()), potionHolder(AntarchyFabricMisc.SHRINKING)); + builder.registerPotionRecipe(potionHolder(AntarchyFabricMisc.SHRINKING), Ingredient.of(Items.GLOWSTONE_DUST), potionHolder(AntarchyFabricMisc.STRONG_SHRINKING)); + builder.registerPotionRecipe(potionHolder(AntarchyFabricMisc.STRONG_SHRINKING), Ingredient.of(Items.GLOWSTONE_DUST), potionHolder(AntarchyFabricMisc.EXTREME_SHRINKING)); + builder.registerPotionRecipe(net.minecraft.world.item.alchemy.Potions.AWKWARD, Ingredient.of(AntarchyFabricItems.TITANIUM_NUGGET.get()), potionHolder(AntarchyFabricMisc.GROWING)); + builder.registerPotionRecipe(potionHolder(AntarchyFabricMisc.GROWING), Ingredient.of(Items.GLOWSTONE_DUST), potionHolder(AntarchyFabricMisc.STRONG_GROWING)); + builder.registerPotionRecipe(potionHolder(AntarchyFabricMisc.STRONG_GROWING), Ingredient.of(Items.GLOWSTONE_DUST), potionHolder(AntarchyFabricMisc.EXTREME_GROWING)); + builder.registerPotionRecipe(net.minecraft.world.item.alchemy.Potions.AWKWARD, Ingredient.of(AntarchyFabricItems.CLOUD_SHARK_FIN.get()), net.minecraft.world.item.alchemy.Potions.SLOW_FALLING); + builder.registerPotionRecipe(net.minecraft.world.item.alchemy.Potions.AWKWARD, Ingredient.of(AntarchyFabricItems.JUMPY_BUG_LEG.get()), Potions.LEAPING); + builder.registerPotionRecipe(net.minecraft.world.item.alchemy.Potions.AWKWARD, Ingredient.of(AntarchyFabricItems.CORNEA_EAR.get()), net.minecraft.world.item.alchemy.Potions.NIGHT_VISION); }); - SOUND_EVENTS.register(); - ARMOR_MATERIALS.register(); - FLUIDS.register(); - BLOCKS.register(); - ENTITY_TYPES.register(); - ATTRIBUTES.register(); - registerEntityAttributes(); - registerSpawnPlacements(); - BLOCK_ENTITY_TYPES.register(); - PARTICLE_TYPES.register(); - FEATURES.register(); - BIOME_SOURCES.register(); - DENSITY_FUNCTION_TYPES.register(); - ENTITY_SUB_PREDICATES.register(); - MOB_EFFECTS.register(); - POTIONS.register(); - ITEMS.register(); - MENUS.register(); - CREATIVE_MODE_TABS.register(); + AntarchyFabricSounds.SOUND_EVENTS.register(); + AntarchyFabricMisc.ARMOR_MATERIALS.register(); + AntarchyFabricMisc.FLUIDS.register(); + AntarchyFabricBlocks.BLOCKS.register(); + AntarchyFabricEntities.ENTITY_TYPES.register(); + AntarchyFabricMisc.ATTRIBUTES.register(); + AntarchyFabricEntityAttributes.register(); + AntarchyFabricSpawnPlacements.register(); + AntarchyFabricBlocks.BLOCK_ENTITY_TYPES.register(); + AntarchyFabricMisc.PARTICLE_TYPES.register(); + AntarchyFabricMisc.FEATURES.register(); + AntarchyFabricMisc.BIOME_SOURCES.register(); + AntarchyFabricMisc.DENSITY_FUNCTION_TYPES.register(); + AntarchyFabricMisc.ENTITY_SUB_PREDICATES.register(); + AntarchyFabricMisc.MOB_EFFECTS.register(); + AntarchyFabricMisc.POTIONS.register(); + AntarchyFabricItems.ITEMS.register(); + AntarchyFabricMisc.MENUS.register(); + AntarchyFabricMisc.DATA_COMPONENT_TYPES.register(); + AntarchyFabricMisc.RECIPE_SERIALIZERS.register(); + AntarchyFabricCreativeModeTabs.CREATIVE_MODE_TABS.register(); - // Wire common-module accessors after all registrations are complete. PermanentPortalType.bindBlocks( - () -> MOSSY_OURANWOOD_WOOD.get(), - () -> ELYTHIA_PORTAL.get(), - () -> NYXITE.get(), - () -> THORAXIS_PORTAL.get(), - () -> NYXITE.get(), - () -> THORAXIS_PORTAL.get() + () -> AntarchyFabricBlocks.MOSSY_OURANWOOD_WOOD.get(), + () -> AntarchyFabricBlocks.ELYTHIA_PORTAL.get(), + () -> AntarchyFabricBlocks.NYXITE.get(), + () -> AntarchyFabricBlocks.THORAXIS_PORTAL.get(), + () -> AntarchyFabricBlocks.NYXITE.get(), + () -> AntarchyFabricBlocks.THORAXIS_PORTAL.get() ); AntarchySoundEvents.bind( - SQUIDZOOKA_FIRE, - SHRINK_RAY_SOUND, - GROWTH_RAY_SOUND, - SIZE_RAY_CHARGE, - ANT_AMBIENT, - ANT_IDLE, - ANT_HURT, - ANT_BITE, - ANT_GATHER, - ANT_NEST, - CLOUD_SHARK_BITE, - CLOUD_SHARK_IDLE, - CLOUD_SHARK_HURT, - CLOUD_SHARK_DEATH, - CLOUD_SHARK_FLY, - CATERPILLAR_IDLE, - CATERPILLAR_HURT, - CATERPILLAR_CRAWL, - BUTTERFLY_HURT, - BRUTALFLY_IDLE, - BRUTALFLY_DEATH, - ELYTHIA_FIREFLY_AMBIENT, - MISSILE_SQUID_AMBIENT, - MISSILE_SQUID_HURT, - MISSILE_SQUID_DEATH, - MISSILE_SQUID_ATTACK, - KRAKEN_FLYING_LOOP, - KRAKEN_FLYING_SIDEWAYS_LOOP, - KRAKEN_ATTACK, - KRAKEN_SPIN, - KRAKEN_ROAR, - KRAKEN_SUMMON, - KRAKEN_HURT, - KRAKEN_DEATH, - BASILISK_IDLE_LOOP, - BASILISK_SLITHER_LOOP, - BASILISK_BITE, - BASILISK_HISS, - BASILISK_HURT, - BASILISK_DEATH, - THORAXIS_NIGHTMARE_WASTES_AMBIENT, - THORAXIS_NIGHTMARE_WASTES_ADDITIONS, - THORAXIS_NIGHTMARE_WASTES_MOOD, - THORAXIS_DREAM_DUNES_AMBIENT, - THORAXIS_DREAM_DUNES_ADDITIONS, - THORAXIS_DREAM_DUNES_MOOD, - THORAXIS_LUCID_POOLS_AMBIENT, - THORAXIS_LUCID_POOLS_ADDITIONS, - THORAXIS_LUCID_POOLS_MOOD, - LUCID_AMBIENT, - LUCID_FLYING, - LUCID_ATTACK, - LUCID_BOLT_SOUND, - LUCID_HURT, - LUCID_DEATH, - REVERIE_IDLE, - REVERIE_HURT, - REVERIE_WORRY, - REVERIE_SAVE, - REVERIE_JOIN_PLAYER, - REVERIE_ALERT, - FLYING_SQUIRREL_IDLE, - FLYING_SQUIRREL_BEG, - FLYING_SQUIRREL_NUT, - FLYING_SQUIRREL_GLIDE_LOOP, - FLYING_SQUIRREL_HURT, - FLYING_SQUIRREL_DEATH, - NIGHTMARE_IDLE, - NIGHTMARE_HURT, - NIGHTMARE_ROAR, - NIGHTMARE_DEATH, - NIGHTMARE_BITE, - NIGHTMARE_FLAP, - TRIFFID_ATTACK, - TRIFFID_GRAB, - TRIFFID_HURT, - TRIFFID_DEATH, - TRIFFID_HISS, - TRIFFID_GROWL, - MANTIS_AMBIENT, - MANTIS_HURT, - MANTIS_ATTACK, - MANTIS_FLY_LOOP, - GRAVITY_GUN_PICKUP, - GRAVITY_GUN_DROP, - GRAVITY_GUN_HOLD_LOOP, - GRAVITY_GUN_LAUNCH, - GRAVITY_GUN_DRYFIRE, - BED_BUG_AMBIENT, - BED_BUG_HURT, - BED_BUG_ATTACK, - WASP_IDLE, - WASP_HURT, - WASP_ATTACK, - WASP_DEATH, - SCORPION_AMBIENT, - SCORPION_HURT, - SCORPION_ATTACK, - EMPEROR_SCORPION_AMBIENT, - EMPEROR_SCORPION_HURT, - EMPEROR_SCORPION_ATTACK, - EMPEROR_SCORPION_ROAR, - MOLEWORM_AMBIENT, - MOLEWORM_HURT, - MOLEWORM_ATTACK, - MOLEWORM_DIG, - MOLEVORE_AMBIENT, - MOLEVORE_HURT, - MOLEVORE_ATTACK, - MOLEVORE_DIG, - BOMBER_WALK, - BOMBER_KNOCK, - BOMBER_EXPLODE, - TORETERROR_IDLE, - TORETERROR_HURT, - TORETERROR_DEATH, - TORETERROR_BOMBER_FIRE, - TORETERROR_SPIN, - TORETERROR_RICOCHET, - WATER_CANNON_FIRE, - TORETERROR_JUMP_UP, - TORETERROR_JUMP_LAND, - STINKY_FLY_SOUND, - CREEPING_HORROR_GROWL, - CREEPING_HORROR_HURT, - CREEPING_HORROR_BITE, - LURKING_TERROR_SNARL, - LURKING_TERROR_HURT, - LURKING_TERROR_BITE, - LURKING_TERROR_FLY_LOOP, - DUCT_TAPE_USE + AntarchyFabricSounds.SQUIDZOOKA_FIRE, + AntarchyFabricSounds.SHRINK_RAY_SOUND, + AntarchyFabricSounds.GROWTH_RAY_SOUND, + AntarchyFabricSounds.SIZE_RAY_CHARGE, + AntarchyFabricSounds.ANT_AMBIENT, + AntarchyFabricSounds.ANT_IDLE, + AntarchyFabricSounds.ANT_HURT, + AntarchyFabricSounds.ANT_BITE, + AntarchyFabricSounds.ANT_GATHER, + AntarchyFabricSounds.ANT_NEST, + AntarchyFabricSounds.CLOUD_SHARK_BITE, + AntarchyFabricSounds.CLOUD_SHARK_IDLE, + AntarchyFabricSounds.CLOUD_SHARK_HURT, + AntarchyFabricSounds.CLOUD_SHARK_DEATH, + AntarchyFabricSounds.CLOUD_SHARK_FLY, + AntarchyFabricSounds.CATERPILLAR_IDLE, + AntarchyFabricSounds.CATERPILLAR_HURT, + AntarchyFabricSounds.CATERPILLAR_CRAWL, + AntarchyFabricSounds.BUTTERFLY_HURT, + AntarchyFabricSounds.BRUTALFLY_IDLE, + AntarchyFabricSounds.BRUTALFLY_DEATH, + AntarchyFabricSounds.ELYTHIA_FIREFLY_AMBIENT, + AntarchyFabricSounds.MISSILE_SQUID_AMBIENT, + AntarchyFabricSounds.MISSILE_SQUID_HURT, + AntarchyFabricSounds.MISSILE_SQUID_DEATH, + AntarchyFabricSounds.MISSILE_SQUID_ATTACK, + AntarchyFabricSounds.KRAKEN_FLYING_LOOP, + AntarchyFabricSounds.KRAKEN_FLYING_SIDEWAYS_LOOP, + AntarchyFabricSounds.KRAKEN_ATTACK, + AntarchyFabricSounds.KRAKEN_SPIN, + AntarchyFabricSounds.KRAKEN_ROAR, + AntarchyFabricSounds.KRAKEN_SUMMON, + AntarchyFabricSounds.KRAKEN_HURT, + AntarchyFabricSounds.KRAKEN_DEATH, + AntarchyFabricSounds.BASILISK_IDLE_LOOP, + AntarchyFabricSounds.BASILISK_SLITHER_LOOP, + AntarchyFabricSounds.BASILISK_BITE, + AntarchyFabricSounds.BASILISK_HISS, + AntarchyFabricSounds.BASILISK_HURT, + AntarchyFabricSounds.BASILISK_DEATH, + AntarchyFabricSounds.THORAXIS_NIGHTMARE_WASTES_AMBIENT, + AntarchyFabricSounds.THORAXIS_NIGHTMARE_WASTES_ADDITIONS, + AntarchyFabricSounds.THORAXIS_NIGHTMARE_WASTES_MOOD, + AntarchyFabricSounds.THORAXIS_DREAM_DUNES_AMBIENT, + AntarchyFabricSounds.THORAXIS_DREAM_DUNES_ADDITIONS, + AntarchyFabricSounds.THORAXIS_DREAM_DUNES_MOOD, + AntarchyFabricSounds.THORAXIS_LUCID_POOLS_AMBIENT, + AntarchyFabricSounds.THORAXIS_LUCID_POOLS_ADDITIONS, + AntarchyFabricSounds.THORAXIS_LUCID_POOLS_MOOD, + AntarchyFabricSounds.LUCID_AMBIENT, + AntarchyFabricSounds.LUCID_FLYING, + AntarchyFabricSounds.LUCID_ATTACK, + AntarchyFabricSounds.LUCID_BOLT_SOUND, + AntarchyFabricSounds.LUCID_HURT, + AntarchyFabricSounds.LUCID_DEATH, + AntarchyFabricSounds.REVERIE_IDLE, + AntarchyFabricSounds.REVERIE_HURT, + AntarchyFabricSounds.REVERIE_WORRY, + AntarchyFabricSounds.REVERIE_SAVE, + AntarchyFabricSounds.REVERIE_JOIN_PLAYER, + AntarchyFabricSounds.REVERIE_ALERT, + AntarchyFabricSounds.FLYING_SQUIRREL_IDLE, + AntarchyFabricSounds.FLYING_SQUIRREL_BEG, + AntarchyFabricSounds.FLYING_SQUIRREL_NUT, + AntarchyFabricSounds.FLYING_SQUIRREL_GLIDE_LOOP, + AntarchyFabricSounds.FLYING_SQUIRREL_HURT, + AntarchyFabricSounds.FLYING_SQUIRREL_DEATH, + AntarchyFabricSounds.NIGHTMARE_IDLE, + AntarchyFabricSounds.NIGHTMARE_HURT, + AntarchyFabricSounds.NIGHTMARE_ROAR, + AntarchyFabricSounds.NIGHTMARE_DEATH, + AntarchyFabricSounds.NIGHTMARE_BITE, + AntarchyFabricSounds.NIGHTMARE_FLAP, + AntarchyFabricSounds.TRIFFID_ATTACK, + AntarchyFabricSounds.TRIFFID_GRAB, + AntarchyFabricSounds.TRIFFID_HURT, + AntarchyFabricSounds.TRIFFID_DEATH, + AntarchyFabricSounds.TRIFFID_HISS, + AntarchyFabricSounds.TRIFFID_GROWL, + AntarchyFabricSounds.MANTIS_AMBIENT, + AntarchyFabricSounds.MANTIS_HURT, + AntarchyFabricSounds.MANTIS_ATTACK, + AntarchyFabricSounds.MANTIS_FLY_LOOP, + AntarchyFabricSounds.GRAVITY_GUN_PICKUP, + AntarchyFabricSounds.GRAVITY_GUN_DROP, + AntarchyFabricSounds.GRAVITY_GUN_HOLD_LOOP, + AntarchyFabricSounds.GRAVITY_GUN_LAUNCH, + AntarchyFabricSounds.GRAVITY_GUN_DRYFIRE, + AntarchyFabricSounds.BED_BUG_AMBIENT, + AntarchyFabricSounds.BED_BUG_HURT, + AntarchyFabricSounds.BED_BUG_ATTACK, + AntarchyFabricSounds.WASP_IDLE, + AntarchyFabricSounds.WASP_HURT, + AntarchyFabricSounds.WASP_ATTACK, + AntarchyFabricSounds.WASP_DEATH, + AntarchyFabricSounds.SCORPION_AMBIENT, + AntarchyFabricSounds.SCORPION_HURT, + AntarchyFabricSounds.SCORPION_ATTACK, + AntarchyFabricSounds.EMPEROR_SCORPION_AMBIENT, + AntarchyFabricSounds.EMPEROR_SCORPION_HURT, + AntarchyFabricSounds.EMPEROR_SCORPION_ATTACK, + AntarchyFabricSounds.EMPEROR_SCORPION_ROAR, + AntarchyFabricSounds.MOLEWORM_AMBIENT, + AntarchyFabricSounds.MOLEWORM_HURT, + AntarchyFabricSounds.MOLEWORM_ATTACK, + AntarchyFabricSounds.MOLEWORM_DIG, + AntarchyFabricSounds.MOLEVORE_AMBIENT, + AntarchyFabricSounds.MOLEVORE_HURT, + AntarchyFabricSounds.MOLEVORE_ATTACK, + AntarchyFabricSounds.MOLEVORE_DIG, + AntarchyFabricSounds.BOMBER_WALK, + AntarchyFabricSounds.BOMBER_KNOCK, + AntarchyFabricSounds.BOMBER_EXPLODE, + AntarchyFabricSounds.TORETERROR_IDLE, + AntarchyFabricSounds.TORETERROR_HURT, + AntarchyFabricSounds.TORETERROR_DEATH, + AntarchyFabricSounds.TORETERROR_BOMBER_FIRE, + AntarchyFabricSounds.TORETERROR_SPIN, + AntarchyFabricSounds.TORETERROR_RICOCHET, + AntarchyFabricSounds.WATER_CANNON_FIRE, + AntarchyFabricSounds.TORETERROR_JUMP_UP, + AntarchyFabricSounds.TORETERROR_JUMP_LAND, + AntarchyFabricSounds.STINKY_FLY_SOUND, + AntarchyFabricSounds.ANT_IDLE, + AntarchyFabricSounds.ANT_HURT, + AntarchyFabricSounds.ANT_BITE, + AntarchyFabricSounds.ANT_IDLE, + AntarchyFabricSounds.ANT_HURT, + AntarchyFabricSounds.ANT_BITE, + AntarchyFabricSounds.ANT_IDLE, + AntarchyFabricSounds.DUCT_TAPE_USE ); - AntarchyObjects.setOctopusBomb(OCTOPUS_BOMB); - // AntarchyObjects.setGlimmer(GLIMMER); - // AntarchyObjects.setGlimmersGrace(() -> mobEffectHolder(GLIMMERS_GRACE)); + AntarchyObjects.setOctopusBomb(AntarchyFabricEntities.OCTOPUS_BOMB); + AntarchyObjects.setTentacle(AntarchyFabricEntities.TENTACLE); + AntarchyObjects.setKrakensGraspTrident(AntarchyFabricEntities.KRAKENS_GRASP_TRIDENT); + AntarchyObjects.setKrakenTentacle(() -> AntarchyFabricItems.KRAKEN_TENTACLE.get()); + AntarchyObjects.setKrakensGrasp(() -> AntarchyFabricItems.KRAKENS_GRASP.get()); + AntarchyObjects.setOuranwoodDeer(AntarchyFabricEntities.OURANWOOD_DEER); + AntarchyObjects.setGlimmer(AntarchyFabricEntities.GLIMMER); + AntarchyObjects.setSpiritApple(() -> AntarchyFabricItems.SPIRIT_APPLE.get()); + AntarchyObjects.setElka(AntarchyFabricEntities.ELKA); + AntarchyObjects.setPeach(() -> AntarchyFabricItems.PEACH.get()); + AntarchyObjects.setCorn(() -> AntarchyFabricItems.CORN.get()); + AntarchyObjects.setCornSeeds(() -> AntarchyFabricItems.CORN_SEEDS.get()); + AntarchyObjects.setWildCorn(() -> AntarchyFabricBlocks.WILD_CORN.get()); + AntarchyObjects.setStarCoralBlock(() -> AntarchyFabricBlocks.STAR_CORAL_BLOCK.get()); + AntarchyObjects.setStarCoral(() -> AntarchyFabricBlocks.STAR_CORAL.get()); + AntarchyObjects.setStarCoralFan(() -> AntarchyFabricBlocks.STAR_CORAL_FAN.get()); + AntarchyObjects.setCookedCorndog(() -> AntarchyFabricItems.COOKED_CORNDOG.get()); + AntarchyObjects.setGlimmerBottle(() -> AntarchyFabricItems.GLIMMER_BOTTLE.get()); + AntarchyObjects.setGlimmerVariantComponent(() -> AntarchyFabricMisc.GLIMMER_VARIANT.get()); + AntarchyObjects.setAmericanComponent(() -> AntarchyFabricMisc.AMERICAN.get()); + AntarchyObjects.setLumen(() -> AntarchyFabricMisc.LUMEN.get()); + AntarchyObjects.setFlowingLumen(() -> AntarchyFabricMisc.FLOWING_LUMEN.get()); + AntarchyObjects.setLumenBucket(() -> AntarchyFabricItems.LUMEN_BUCKET.get()); + AntarchyObjects.setLumenBlock(() -> AntarchyFabricBlocks.LUMEN_BLOCK.get()); + AntarchyObjects.setLumenFroglight(() -> AntarchyFabricBlocks.LUMEN_FROGLIGHT.get()); + AntarchyObjects.setPeachLeavesParticle(() -> AntarchyFabricMisc.PEACH_LEAVES_PARTICLE.get()); + // AntarchyObjects.setDorrieInventoryMenu(AntarchyFabricMisc.DORRIE_INVENTORY_MENU); AntarchyObjects.bind( - EASTER_BUNNY, - FLYING_SQUIRREL, - KRAKEN, - MISSILE_SQUID, - MOLEWORM, - MANTIS, - BED_BUG, - WASP, - BOMBER, - SCORPION, - CATERPILLAR, - BUTTERFLY, - REVERIE, - TRIFFID, - BRUTALFLY, - BRUTALFLY_ORB, - HUSH_PROJECTILE, - TORETERROR, - WATER_BOMB, - (java.util.function.Supplier) BOMBER, - (java.util.function.Supplier) BOMBER, - (java.util.function.Supplier) BED_BUG, - CHEEP, - (java.util.function.Supplier) CHEEP, - () -> DUPLICATOR_LOG.get(), - () -> DUPLICATOR_SAPLING.get(), - () -> DUCT_TAPE.get(), - () -> INFESTED_ROOTED_DIRT.get(), - () -> INFESTED_COARSE_DIRT.get(), - () -> NYXITE.get(), - () -> SHELLSTONE.get(), - () -> POLISHED_SHELLSTONE.get(), - () -> SHELLSTONE_BRICKS.get(), - () -> CHISELED_SHELLSTONE.get(), - () -> MOSSY_SHELLSTONE_BRICKS.get(), - () -> CRACKED_SHELLSTONE_BRICKS.get(), - () -> MOSSY_SHELLSTONE_BRICK_STAIRS.get(), - () -> MOSSY_SHELLSTONE_BRICK_SLAB.get(), - () -> MOSSY_SHELLSTONE_BRICK_WALL.get(), - () -> SHELLSTONE_STAIRS.get(), - () -> SHELLSTONE_SLAB.get(), - () -> SHELLSTONE_WALL.get(), - () -> POLISHED_SHELLSTONE_STAIRS.get(), - () -> POLISHED_SHELLSTONE_SLAB.get(), - () -> POLISHED_SHELLSTONE_WALL.get(), - () -> SHELLSTONE_BRICK_STAIRS.get(), - () -> SHELLSTONE_BRICK_SLAB.get(), - () -> SHELLSTONE_BRICK_WALL.get(), - () -> CLOUD_BLOCK.get(), - () -> TRIFFID_GOO_BLOCK.get(), - () -> PALE_NYXITE.get(), - () -> NYXITE_SPIKE.get(), - () -> NYXITE.get(), - () -> NYXITE_SPIKE.get(), - () -> POTENT_NYXITE.get(), - () -> ANTIMETAL.get(), - () -> POLISHED_ANTIMETAL.get(), - () -> BUDDING_BLOOD_CRYSTAL.get(), - () -> SMALL_BLOOD_CRYSTAL_BUD.get(), - () -> MEDIUM_BLOOD_CRYSTAL_BUD.get(), - () -> LARGE_BLOOD_CRYSTAL_BUD.get(), - () -> BLOOD_CRYSTAL_CRYSTAL.get(), - () -> OURANWOOD_ACORN.get(), - KRAKEN_TOOTH, - () -> MOGGLES.get(), - () -> REVERIE_BOTTLE.get(), - () -> STINK_BUG_ITEM.get(), - () -> mobEffectHolder(DREAD), - () -> mobEffectHolder(PARALYZED), - () -> mobEffectHolder(INVERTED), - () -> mobEffectHolder(STINKY), - () -> OURANWOOD_ACORN_BLOCK.get(), - () -> MOSSY_OURANWOOD_LOG.get(), - () -> MOSSY_OURANWOOD_WOOD.get(), - () -> ORANGE_MILKWEED.get(), - () -> PINK_MILKWEED.get(), - () -> BED_BUG_EGG.get(), - () -> BED_BUG_EGG.get(), - () -> BED_BUG_EGG.get(), - () -> WASP_NEST.get(), - () -> HUSHWEED.get(), - () -> OURANWOOD_SQUIRREL_NEST.get(), - () -> BRUTALFLY_COCOON_SPAWNER.get(), - () -> ANT_NEST_BLOCK_ENTITY.get(), - () -> DREAM_CAMPFIRE_BLOCK_ENTITY.get(), - () -> WASP_NEST_BLOCK_ENTITY.get(), - () -> HUSHWEED_BLOCK_ENTITY.get(), - () -> STINKY_GAS.get(), - () -> STINKY_FLY.get(), - () -> attributeHolder(DOUBLE_DAMAGE_CHANCE), - () -> attributeHolder(BLOODGLASS_MAX_HEARTS), - () -> mobEffectHolder(BLOODGLASS_WARD) + AntarchyFabricEntities.EASTER_BUNNY, + AntarchyFabricEntities.FLYING_SQUIRREL, + AntarchyFabricEntities.KRAKEN, + AntarchyFabricEntities.MISSILE_SQUID, + AntarchyFabricEntities.MOLEWORM, + AntarchyFabricEntities.MANTIS, + AntarchyFabricEntities.BED_BUG, + AntarchyFabricEntities.WASP, + AntarchyFabricEntities.BOMBER, + AntarchyFabricEntities.SCORPION, + AntarchyFabricEntities.CATERPILLAR, + AntarchyFabricEntities.BUTTERFLY, + AntarchyFabricEntities.REVERIE, + AntarchyFabricEntities.TRIFFID, + AntarchyFabricEntities.BRUTALFLY, + AntarchyFabricEntities.BRUTALFLY_ORB, + AntarchyFabricEntities.HUSH_PROJECTILE, + AntarchyFabricEntities.TORETERROR, + AntarchyFabricEntities.WATER_BOMB, + (java.util.function.Supplier) AntarchyFabricEntities.BOMBER, + (java.util.function.Supplier) AntarchyFabricEntities.BOMBER, + (java.util.function.Supplier) AntarchyFabricEntities.BED_BUG, + AntarchyFabricEntities.CHEEP, + () -> { throw new IllegalStateException("Dorrie is not part of this update yet."); }, + () -> AntarchyFabricBlocks.DUPLICATOR_LOG.get(), + () -> AntarchyFabricBlocks.DUPLICATOR_SAPLING.get(), + () -> AntarchyFabricBlocks.DUCT_TAPE.get(), + () -> AntarchyFabricBlocks.INFESTED_ROOTED_DIRT.get(), + () -> AntarchyFabricBlocks.INFESTED_COARSE_DIRT.get(), + () -> AntarchyFabricBlocks.NYXITE.get(), + () -> AntarchyFabricBlocks.SHELLSTONE.get(), + () -> AntarchyFabricBlocks.POLISHED_SHELLSTONE.get(), + () -> AntarchyFabricBlocks.SHELLSTONE_BRICKS.get(), + () -> AntarchyFabricBlocks.CHISELED_SHELLSTONE.get(), + () -> AntarchyFabricBlocks.MOSSY_SHELLSTONE_BRICKS.get(), + () -> AntarchyFabricBlocks.CRACKED_SHELLSTONE_BRICKS.get(), + () -> AntarchyFabricBlocks.MOSSY_SHELLSTONE_BRICK_STAIRS.get(), + () -> AntarchyFabricBlocks.MOSSY_SHELLSTONE_BRICK_SLAB.get(), + () -> AntarchyFabricBlocks.MOSSY_SHELLSTONE_BRICK_WALL.get(), + () -> AntarchyFabricBlocks.SHELLSTONE_STAIRS.get(), + () -> AntarchyFabricBlocks.SHELLSTONE_SLAB.get(), + () -> AntarchyFabricBlocks.SHELLSTONE_WALL.get(), + () -> AntarchyFabricBlocks.POLISHED_SHELLSTONE_STAIRS.get(), + () -> AntarchyFabricBlocks.POLISHED_SHELLSTONE_SLAB.get(), + () -> AntarchyFabricBlocks.POLISHED_SHELLSTONE_WALL.get(), + () -> AntarchyFabricBlocks.SHELLSTONE_BRICK_STAIRS.get(), + () -> AntarchyFabricBlocks.SHELLSTONE_BRICK_SLAB.get(), + () -> AntarchyFabricBlocks.SHELLSTONE_BRICK_WALL.get(), + () -> AntarchyFabricBlocks.CLOUD_BLOCK.get(), + () -> AntarchyFabricBlocks.TRIFFID_GOO_BLOCK.get(), + () -> AntarchyFabricBlocks.PALE_NYXITE.get(), + () -> AntarchyFabricBlocks.NYXITE_SPIKE.get(), + () -> AntarchyFabricBlocks.NYXITE.get(), + () -> AntarchyFabricBlocks.NYXITE_SPIKE.get(), + () -> AntarchyFabricBlocks.POTENT_NYXITE.get(), + () -> AntarchyFabricBlocks.ANTIMETAL.get(), + () -> AntarchyFabricBlocks.POLISHED_ANTIMETAL.get(), + () -> AntarchyFabricBlocks.BUDDING_BLOOD_CRYSTAL.get(), + () -> AntarchyFabricBlocks.SMALL_BLOOD_CRYSTAL_BUD.get(), + () -> AntarchyFabricBlocks.MEDIUM_BLOOD_CRYSTAL_BUD.get(), + () -> AntarchyFabricBlocks.LARGE_BLOOD_CRYSTAL_BUD.get(), + () -> AntarchyFabricBlocks.BLOOD_CRYSTAL_CRYSTAL.get(), + () -> AntarchyFabricItems.OURANWOOD_ACORN.get(), + AntarchyFabricItems.KRAKEN_TOOTH, + () -> AntarchyFabricItems.MOGGLES.get(), + () -> AntarchyFabricItems.REVERIE_BOTTLE.get(), + () -> AntarchyFabricItems.STINK_BUG_ITEM.get(), + () -> AntarchyFabricMisc.mobEffectHolder(AntarchyFabricMisc.DREAD), + () -> AntarchyFabricMisc.mobEffectHolder(AntarchyFabricMisc.PARALYZED), + () -> AntarchyFabricMisc.mobEffectHolder(AntarchyFabricMisc.INVERTED), + () -> AntarchyFabricMisc.mobEffectHolder(AntarchyFabricMisc.STINKY), + () -> AntarchyFabricBlocks.OURANWOOD_ACORN_BLOCK.get(), + () -> AntarchyFabricBlocks.MOSSY_OURANWOOD_LOG.get(), + () -> AntarchyFabricBlocks.MOSSY_OURANWOOD_WOOD.get(), + () -> AntarchyFabricBlocks.UMBRAL_MOSS_BLOCK.get(), + () -> AntarchyFabricBlocks.UMBRAL_MOSS_CARPET.get(), + () -> AntarchyFabricBlocks.BLUSH_MOSS_BLOCK.get(), + () -> AntarchyFabricBlocks.BLUSH_MOSS_CARPET.get(), + () -> AntarchyFabricBlocks.ORANGE_MILKWEED.get(), + () -> AntarchyFabricBlocks.PINK_MILKWEED.get(), + () -> AntarchyFabricBlocks.BED_BUG_EGG.get(), + () -> AntarchyFabricBlocks.BED_BUG_EGG.get(), + () -> AntarchyFabricBlocks.BED_BUG_EGG.get(), + () -> AntarchyFabricBlocks.WASP_NEST.get(), + () -> AntarchyFabricBlocks.HUSHWEED.get(), + () -> AntarchyFabricBlocks.OURANWOOD_SQUIRREL_NEST.get(), + () -> AntarchyFabricBlocks.BRUTALFLY_COCOON_SPAWNER.get(), + () -> AntarchyFabricBlocks.GIANT_LILY_PAD.get(), + () -> AntarchyFabricBlocks.ANT_NEST_BLOCK_ENTITY.get(), + () -> AntarchyFabricBlocks.DREAM_CAMPFIRE_BLOCK_ENTITY.get(), + () -> AntarchyFabricBlocks.WASP_NEST_BLOCK_ENTITY.get(), + () -> AntarchyFabricBlocks.HUSHWEED_BLOCK_ENTITY.get(), + () -> AntarchyFabricMisc.STINKY_GAS.get(), + () -> AntarchyFabricMisc.STINKY_FLY.get(), + () -> AntarchyFabricMisc.PEACH_LEAVES_PARTICLE.get(), + () -> AntarchyFabricMisc.attributeHolder(AntarchyFabricMisc.DOUBLE_DAMAGE_CHANCE), + () -> AntarchyFabricMisc.attributeHolder(AntarchyFabricMisc.BLOODGLASS_MAX_HEARTS), + () -> AntarchyFabricMisc.mobEffectHolder(AntarchyFabricMisc.BLOODGLASS_WARD) ); - LucidEyeProjectileEntity.defaultItemSupplier = () -> LUCID_PEARL.get(); - LucidEntity.invertedEffectSupplier = () -> mobEffectHolder(INVERTED); - LucidEntity.boltEntityTypeSupplier = () -> LUCID_BOLT.get(); - LucidBoltEntity.invertedEffectSupplier = () -> mobEffectHolder(INVERTED); - LucidEyeProjectileEntity.invertedEffectSupplier = () -> mobEffectHolder(INVERTED); + LucidEyeProjectileEntity.defaultItemSupplier = () -> AntarchyFabricItems.LUCID_PEARL.get(); + LucidEntity.invertedEffectSupplier = () -> AntarchyFabricMisc.mobEffectHolder(AntarchyFabricMisc.INVERTED); + LucidEntity.boltEntityTypeSupplier = () -> AntarchyFabricEntities.LUCID_BOLT.get(); + LucidBoltEntity.invertedEffectSupplier = () -> AntarchyFabricMisc.mobEffectHolder(AntarchyFabricMisc.INVERTED); + LucidEyeProjectileEntity.invertedEffectSupplier = () -> AntarchyFabricMisc.mobEffectHolder(AntarchyFabricMisc.INVERTED); ScorpionWhipTetherSync.setSink(AntarchyFabricNetworking::syncScorpionWhipTether); HerculesBeetleImpactShakeSync.setSink((player, ticks) -> net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking.send(player, new com.craisinlord.antarchy.content.network.HerculesBeetleImpactShakePayload(ticks))); @@ -2541,12 +395,36 @@ public final class AntarchyFabricContent { com.craisinlord.antarchy.content.gravity.AntarchyGravityApi.setSyncDispatcher(AntarchyFabricNetworking::syncGravityEntity); AntarchyFabricEvents.register(); - if (FabricInfinityCompat.isAvailableOnClasspath()) { + if (isSupportedInfinityLoaded()) { InfinityCompat.bind(new FabricInfinityCompat()); } } + + + + private static boolean isSupportedInfinityLoaded() { + if (!FabricInfinityCompat.isAvailableOnClasspath()) { + return false; + } + + try { + String version = FabricLoader.getInstance() + .getModContainer("infinity") + .map(container -> container.getMetadata().getVersion().getFriendlyString()) + .orElse(null); + if (InfinityCompatVersion.isSupported(version)) { + return true; + } + + Antarchy.LOGGER.warn( + "Skipping Infinity integration because version {} is below the supported minimum {}", + version, + InfinityCompatVersion.requiredVersion() + ); + } catch (Throwable throwable) { + Antarchy.LOGGER.warn("Skipping Infinity integration because the installed Infinity version could not be verified", throwable); + } + return false; + } + } - - - - diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricEvents.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricEvents.java index 972fcf8b..6b13c29e 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricEvents.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricEvents.java @@ -1,4 +1,6 @@ package com.craisinlord.antarchy.fabric; +import com.craisinlord.antarchy.fabric.registry.AntarchyFabricBlocks; +import com.craisinlord.antarchy.fabric.registry.AntarchyFabricItems; import com.craisinlord.antarchy.content.entity.ReverieEntity; import com.craisinlord.antarchy.config.AntarchySettings; @@ -13,11 +15,13 @@ import com.craisinlord.antarchy.content.gravity.AntarchyGravityTransition; import com.craisinlord.antarchy.content.portal.PermanentPortalManager; import com.craisinlord.antarchy.content.command.CaterpillarCommand; import com.craisinlord.antarchy.content.command.GravityCommand; +import com.craisinlord.antarchy.content.item.MinersDreamExcavationManager; import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback; import net.fabricmc.fabric.api.entity.event.v1.ServerLivingEntityEvents; import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents; import net.minecraft.server.level.ServerPlayer; import com.craisinlord.antarchy.content.SquidzookaDispenseBehavior; +import com.craisinlord.antarchy.content.RpoLauncherDispenseBehavior; import com.craisinlord.antarchy.content.WaterCannonDispenseBehavior; import net.minecraft.world.level.block.ComposterBlock; import net.minecraft.world.level.block.DispenserBlock; @@ -47,13 +51,21 @@ public final class AntarchyFabricEvents { CaterpillarCommand.register(dispatcher); }); - DispenserBlock.registerBehavior(AntarchyFabricContent.SQUIDZOOKA.get(), new SquidzookaDispenseBehavior()); - DispenserBlock.registerBehavior(AntarchyFabricContent.WATER_CANNON.get(), new WaterCannonDispenseBehavior()); + DispenserBlock.registerBehavior(AntarchyFabricItems.SQUIDZOOKA.get(), new SquidzookaDispenseBehavior()); + DispenserBlock.registerBehavior(AntarchyFabricItems.RPO_LAUNCHER.get(), new RpoLauncherDispenseBehavior()); + DispenserBlock.registerBehavior(AntarchyFabricItems.WATER_CANNON.get(), new WaterCannonDispenseBehavior()); - ComposterBlock.COMPOSTABLES.put(AntarchyFabricContent.UMBRAL_MOSS_BLOCK.get().asItem(), 0.65f); - ComposterBlock.COMPOSTABLES.put(AntarchyFabricContent.UMBRAL_MOSS_CARPET.get().asItem(), 0.3f); - ComposterBlock.COMPOSTABLES.put(AntarchyFabricContent.HUSHWEED.get().asItem(), 0.65f); - ComposterBlock.COMPOSTABLES.put(AntarchyFabricContent.CORNEA_EAR.get(), 0.65f); + ComposterBlock.COMPOSTABLES.put(AntarchyFabricBlocks.UMBRAL_MOSS_BLOCK.get().asItem(), 0.65f); + ComposterBlock.COMPOSTABLES.put(AntarchyFabricBlocks.UMBRAL_MOSS_CARPET.get().asItem(), 0.3f); + ComposterBlock.COMPOSTABLES.put(AntarchyFabricBlocks.BLUSH_MOSS_BLOCK.get().asItem(), 0.65f); + ComposterBlock.COMPOSTABLES.put(AntarchyFabricBlocks.BLUSH_MOSS_CARPET.get().asItem(), 0.3f); + ComposterBlock.COMPOSTABLES.put(AntarchyFabricBlocks.HUSHWEED.get().asItem(), 0.65f); + 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.CORN.get(), 0.65f); + ComposterBlock.COMPOSTABLES.put(AntarchyFabricItems.CORN_SEEDS.get(), 0.3f); + ComposterBlock.COMPOSTABLES.put(AntarchyFabricItems.PEACH.get(), 0.65f); ServerLivingEntityEvents.AFTER_DEATH.register((entity, damageSource) -> { if (entity instanceof ServerPlayer sp) { @@ -87,6 +99,7 @@ public final class AntarchyFabricEvents { tickDuctTapePlayers(level); tickIchorPlayers(level); tickBloodglassRecharge(level); + MinersDreamExcavationManager.tick(level); } invertedPlayers.retainAll(activeThisTick); }); diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/OuranwoodWoodTypes.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyWoodTypes.java similarity index 80% rename from fabric/src/main/java/com/craisinlord/antarchy/fabric/OuranwoodWoodTypes.java rename to fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyWoodTypes.java index 86217123..7b807144 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/OuranwoodWoodTypes.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyWoodTypes.java @@ -5,10 +5,11 @@ import com.craisinlord.antarchy.fabric.mixin.WoodTypeInvoker; import net.minecraft.world.level.block.state.properties.BlockSetType; import net.minecraft.world.level.block.state.properties.WoodType; -public final class OuranwoodWoodTypes { +public final class AntarchyWoodTypes { public static final WoodType OURANWOOD = register("ouranwood"); + public static final WoodType PEACH = register("peach"); - private OuranwoodWoodTypes() { + private AntarchyWoodTypes() { } private static WoodType register(String name) { diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/BloodglassManager.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/BloodglassManager.java index 2fb4c920..3da80911 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/BloodglassManager.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/BloodglassManager.java @@ -129,10 +129,15 @@ public final class BloodglassManager { int cap = Math.max(0, AntarchySettings.bloodCrystalHardMaxShields() - access.antarchy$getArmorShieldsActive() - access.antarchy$getArmorShieldLostCount()); - access.antarchy$setAppleShieldsActive(Math.min(amplifier + 1, cap)); - access.antarchy$setAppleShieldLostCount(0); - access.antarchy$setAppleRechargeTimer(0); - if (player instanceof ServerPlayer sp) syncBloodglass(sp); + int targetCap = Math.min(amplifier + 1, cap); + int currentCap = access.antarchy$getAppleShieldsActive() + access.antarchy$getAppleShieldLostCount(); + // Only grant newly-added capacity (e.g. first application, or a higher amplifier). + // A mere duration refresh of an already-active ward must not reset shields that are + // already lost, nor restart their recharge timer. + if (targetCap > currentCap) { + access.antarchy$setAppleShieldsActive(access.antarchy$getAppleShieldsActive() + (targetCap - currentCap)); + if (player instanceof ServerPlayer sp) syncBloodglass(sp); + } } public static void handleWardRemoved(Player player) { diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/FabricInfinityCompat.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/FabricInfinityCompat.java index 5aec90de..8c038d39 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/FabricInfinityCompat.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/FabricInfinityCompat.java @@ -1,5 +1,6 @@ package com.craisinlord.antarchy.fabric; +import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.compat.infinity.InfinityCompatBridge; import net.lerariemann.infinity.util.InfinityMethods; import net.lerariemann.infinity.util.teleport.WarpLogic; @@ -28,6 +29,7 @@ public final class FabricInfinityCompat implements InfinityCompatBridge { try { return InfinityMethods.getRandomId(random); } catch (Throwable throwable) { + Antarchy.LOGGER.error("[Antarchy] Failed to get a random Infinity dimension id", throwable); return null; } } @@ -38,6 +40,7 @@ public final class FabricInfinityCompat implements InfinityCompatBridge { WarpLogic.requestWarp(player, dimensionId, false); return true; } catch (Throwable throwable) { + Antarchy.LOGGER.error("[Antarchy] Failed to request an Infinity warp to {}", dimensionId, throwable); return false; } } diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyFabricClientBootstrap.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyFabricClientBootstrap.java index 7c61431e..61b2ff3b 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyFabricClientBootstrap.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyFabricClientBootstrap.java @@ -1,4 +1,8 @@ package com.craisinlord.antarchy.fabric.client; +import com.craisinlord.antarchy.fabric.registry.AntarchyFabricBlocks; +import com.craisinlord.antarchy.fabric.registry.AntarchyFabricEntities; +import com.craisinlord.antarchy.fabric.registry.AntarchyFabricItems; +import com.craisinlord.antarchy.fabric.registry.AntarchyFabricMisc; import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.content.client.HerculesBeetleImpactShakeClientState; @@ -21,6 +25,7 @@ import net.fabricmc.fabric.api.client.rendering.v1.HudRenderCallback; import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderEvents; import net.minecraft.client.model.BoatModel; import net.minecraft.client.model.ChestBoatModel; +import net.minecraft.client.gui.screens.MenuScreens; import net.minecraft.client.renderer.BiomeColors; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.texture.TextureAtlas; @@ -51,6 +56,7 @@ public final class AntarchyFabricClientBootstrap { public static void register() { AntarchyKeyBindings.register(); + MenuScreens.register(AntarchyFabricMisc.DORRIE_INVENTORY_MENU.get(), com.craisinlord.antarchy.content.client.screen.DorrieInventoryScreen::new); registerRenderers(); registerEntityLayers(); registerColors(); @@ -63,58 +69,69 @@ public final class AntarchyFabricClientBootstrap { private static void registerRenderers() { BlockEntityRendererRegistry.register( - (net.minecraft.world.level.block.entity.BlockEntityType) AntarchyFabricContent.DREAM_CAMPFIRE_BLOCK_ENTITY.get(), + (net.minecraft.world.level.block.entity.BlockEntityType) AntarchyFabricBlocks.DREAM_CAMPFIRE_BLOCK_ENTITY.get(), (BlockEntityRendererProvider) CampfireRenderer::new ); - EntityRendererRegistry.register(AntarchyFabricContent.EASTER_BUNNY.get(), EasterBunnyRenderer::new); - EntityRendererRegistry.register(AntarchyFabricContent.FLYING_SQUIRREL.get(), FlyingSquirrelRenderer::new); - EntityRendererRegistry.register(AntarchyFabricContent.CATERPILLAR.get(), CaterpillarRenderer::new); - EntityRendererRegistry.register(AntarchyFabricContent.BUTTERFLY.get(), ButterflyRenderer::new); - EntityRendererRegistry.register(AntarchyFabricContent.REVERIE.get(), ReverieRenderer::new); - EntityRendererRegistry.register(AntarchyFabricContent.BRUTALFLY.get(), BrutalflyRenderer::new); - EntityRendererRegistry.register(AntarchyFabricContent.RED_ANT.get(), AntRenderer::new); - EntityRendererRegistry.register(AntarchyFabricContent.BROWN_ANT.get(), AntRenderer::new); - EntityRendererRegistry.register(AntarchyFabricContent.RAINBOW_ANT.get(), AntRenderer::new); - EntityRendererRegistry.register(AntarchyFabricContent.MOLEWORM.get(), MolewormRenderer::new); - EntityRendererRegistry.register(AntarchyFabricContent.MANTIS.get(), MantisRenderer::new); - EntityRendererRegistry.register(AntarchyFabricContent.ALPHA_MANTIS.get(), AlphaMantisRenderer::new); - EntityRendererRegistry.register(AntarchyFabricContent.MOLEVORE.get(), MolevoreRenderer::new); - EntityRendererRegistry.register(AntarchyFabricContent.TRIFFID.get(), TriffidRenderer::new); - EntityRendererRegistry.register(AntarchyFabricContent.OURANWOOD_BOAT_ENTITY.get(), context -> new OuranwoodBoatRenderer<>(context, ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/boat/ouranwood.png"), false)); - EntityRendererRegistry.register(AntarchyFabricContent.OURANWOOD_CHEST_BOAT_ENTITY.get(), context -> new OuranwoodBoatRenderer<>(context, ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/chest_boat/ouranwood.png"), true)); - EntityRendererRegistry.register(AntarchyFabricContent.APPLE_COW.get(), AppleCowRenderer::new); - EntityRendererRegistry.register(AntarchyFabricContent.GOLDEN_APPLE_COW.get(), AppleCowRenderer::new); - EntityRendererRegistry.register(AntarchyFabricContent.ENCHANTED_GOLDEN_APPLE_COW.get(), AppleCowRenderer::new); - EntityRendererRegistry.register(AntarchyFabricContent.DIAMOND_MINECART.get(), DiamondMinecartRenderer::new); - EntityRendererRegistry.register(AntarchyFabricContent.DR_TRAYAURUS.get(), context -> new DrTrayaurusRenderer(context, ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/dr_trayaurus.png"))); - EntityRendererRegistry.register(AntarchyFabricContent.CLOUD_SHARK.get(), CloudSharkRenderer::new); - EntityRendererRegistry.register(AntarchyFabricContent.KRAKEN.get(), KrakenRenderer::new); - EntityRendererRegistry.register(AntarchyFabricContent.KRAKEN_PART.get(), MultipartPartRenderer::new); - EntityRendererRegistry.register(AntarchyFabricContent.MISSILE_SQUID.get(), MissileSquidRenderer::new); - EntityRendererRegistry.register(AntarchyFabricContent.OCTOPUS_BOMB.get(), OctopusBombRenderer::new); - EntityRendererRegistry.register(AntarchyFabricContent.NIGHTMARE.get(), NightmareRenderer::new); - EntityRendererRegistry.register(AntarchyFabricContent.LUCID.get(), LucidRenderer::new); - EntityRendererRegistry.register(AntarchyFabricContent.BED_BUG.get(), BedBugRenderer::new); - EntityRendererRegistry.register(AntarchyFabricContent.WASP.get(), WaspRenderer::new); - EntityRendererRegistry.register(AntarchyFabricContent.BOMBER.get(), BomberRenderer::new); - EntityRendererRegistry.register(AntarchyFabricContent.BASILISK.get(), BasiliskRenderer::new); - EntityRendererRegistry.register(AntarchyFabricContent.SHRINK_RAY_PROJECTILE.get(), SizeRayProjectileRenderer::new); - EntityRendererRegistry.register(AntarchyFabricContent.GROWTH_RAY_PROJECTILE.get(), SizeRayProjectileRenderer::new); - EntityRendererRegistry.register(AntarchyFabricContent.LUCID_BOLT.get(), LucidBoltRenderer::new); - EntityRendererRegistry.register(AntarchyFabricContent.LUCID_PEARL_PROJECTILE.get(), ThrownItemRenderer::new); - EntityRendererRegistry.register(AntarchyFabricContent.HUSH_PROJECTILE.get(), HushProjectileRenderer::new); - EntityRendererRegistry.register(AntarchyFabricContent.BRUTALFLY_ORB.get(), BrutalflyOrbRenderer::new); - EntityRendererRegistry.register(AntarchyFabricContent.UPWARD_FALLING_BLOCK.get(), UpwardFallingBlockRenderer::new); - EntityRendererRegistry.register(AntarchyFabricContent.SCORPION.get(), ScorpionRenderer::new); - EntityRendererRegistry.register(AntarchyFabricContent.EMPEROR_SCORPION.get(), EmperorScorpionRenderer::new); - EntityRendererRegistry.register(AntarchyFabricContent.TORETERROR.get(), ToreterrorRenderer::new); - EntityRendererRegistry.register(AntarchyFabricContent.WATER_BOMB.get(), WaterBombRenderer::new); - EntityRendererRegistry.register(AntarchyFabricContent.CHEEP.get(), com.craisinlord.antarchy.content.client.renderer.CheepRenderer::new); - // EntityRendererRegistry.register(AntarchyFabricContent.GLIMMER.get(), com.craisinlord.antarchy.content.client.renderer.GlimmerRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.EASTER_BUNNY.get(), EasterBunnyRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.FLYING_SQUIRREL.get(), FlyingSquirrelRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.CATERPILLAR.get(), CaterpillarRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.BUTTERFLY.get(), ButterflyRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.REVERIE.get(), ReverieRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.BRUTALFLY.get(), BrutalflyRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.RED_ANT.get(), AntRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.BROWN_ANT.get(), AntRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.RAINBOW_ANT.get(), AntRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.MOLEWORM.get(), MolewormRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.MANTIS.get(), MantisRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.ALPHA_MANTIS.get(), AlphaMantisRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.MOLEVORE.get(), MolevoreRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.TRIFFID.get(), TriffidRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.OURANWOOD_BOAT_ENTITY.get(), context -> new OuranwoodBoatRenderer<>(context, ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/boat/ouranwood.png"), false)); + EntityRendererRegistry.register(AntarchyFabricEntities.OURANWOOD_CHEST_BOAT_ENTITY.get(), context -> new OuranwoodBoatRenderer<>(context, ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/chest_boat/ouranwood.png"), true)); + EntityRendererRegistry.register(AntarchyFabricEntities.PEACH_BOAT_ENTITY.get(), context -> new PeachBoatRenderer<>(context, ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/boat/peach.png"), false)); + EntityRendererRegistry.register(AntarchyFabricEntities.PEACH_CHEST_BOAT_ENTITY.get(), context -> new PeachBoatRenderer<>(context, ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/chest_boat/peach.png"), true)); + EntityRendererRegistry.register(AntarchyFabricEntities.APPLE_COW.get(), AppleCowRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.GOLDEN_APPLE_COW.get(), AppleCowRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.ENCHANTED_GOLDEN_APPLE_COW.get(), AppleCowRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.DIAMOND_MINECART.get(), DiamondMinecartRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.DR_TRAYAURUS.get(), context -> new DrTrayaurusRenderer(context, ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/dr_trayaurus.png"))); + EntityRendererRegistry.register(AntarchyFabricEntities.CLOUD_SHARK.get(), CloudSharkRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.KRAKEN.get(), KrakenRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.KRAKEN_PART.get(), MultipartPartRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.TENTACLE.get(), com.craisinlord.antarchy.content.client.renderer.TentacleRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.KRAKENS_GRASP_TRIDENT.get(), ThrownItemRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.MISSILE_SQUID.get(), MissileSquidRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.OCTOPUS_BOMB.get(), OctopusBombRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.NIGHTMARE.get(), NightmareRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.LUCID.get(), LucidRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.BED_BUG.get(), BedBugRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.WASP.get(), WaspRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.BOMBER.get(), BomberRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.BASILISK.get(), BasiliskRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.SHRINK_RAY_PROJECTILE.get(), SizeRayProjectileRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.GROWTH_RAY_PROJECTILE.get(), SizeRayProjectileRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.LUCID_BOLT.get(), LucidBoltRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.LUCID_PEARL_PROJECTILE.get(), ThrownItemRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.KRAKENS_GRASP_TRIDENT.get(), ThrownItemRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.HUSH_PROJECTILE.get(), HushProjectileRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.BRUTALFLY_ORB.get(), BrutalflyOrbRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.UPWARD_FALLING_BLOCK.get(), UpwardFallingBlockRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.SCORPION.get(), ScorpionRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.EMPEROR_SCORPION.get(), EmperorScorpionRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.TORETERROR.get(), ToreterrorRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.WATER_BOMB.get(), WaterBombRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.CHEEP.get(), com.craisinlord.antarchy.content.client.renderer.CheepRenderer::new); + // Dorrie is not part of this update yet. + // EntityRendererRegistry.register(AntarchyFabricEntities.DORRIE.get(), com.craisinlord.antarchy.content.client.renderer.DorrieRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.OURANWOOD_DEER.get(), com.craisinlord.antarchy.content.client.renderer.OuranwoodDeerRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.GLIMMER.get(), com.craisinlord.antarchy.content.client.renderer.glimmer.GlimmerRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.ELKA.get(), com.craisinlord.antarchy.content.client.renderer.ElkaRenderer::new); EntityModelLayerRegistry.registerModelLayer(OuranwoodBoatRenderer.boatLayer(), BoatModel::createBodyModel); EntityModelLayerRegistry.registerModelLayer(OuranwoodBoatRenderer.chestBoatLayer(), ChestBoatModel::createBodyModel); + EntityModelLayerRegistry.registerModelLayer(PeachBoatRenderer.boatLayer(), BoatModel::createBodyModel); + EntityModelLayerRegistry.registerModelLayer(PeachBoatRenderer.chestBoatLayer(), ChestBoatModel::createBodyModel); } private static void registerColors() { @@ -122,24 +139,26 @@ public final class AntarchyFabricClientBootstrap { (state, level, pos, tintIndex) -> level != null && pos != null ? BiomeColors.getAverageFoliageColor(level, pos) : FoliageColor.getDefaultColor(), - AntarchyFabricContent.OURANWOOD_LEAVES.get() + AntarchyFabricBlocks.OURANWOOD_LEAVES.get() ); - ColorProviderRegistry.BLOCK.register((state, level, pos, tintIndex) -> 0xFF4A0000, AntarchyFabricContent.ANTIWATER_BLOCK.get()); + ColorProviderRegistry.BLOCK.register((state, level, pos, tintIndex) -> 0xFF4A0000, AntarchyFabricBlocks.ANTIWATER_BLOCK.get()); ColorProviderRegistry.BLOCK.register( (state, level, pos, tintIndex) -> level != null && pos != null ? BiomeColors.getAverageGrassColor(level, pos) - : net.minecraft.world.level.GrassColor.getDefaultColor() + : net.minecraft.world.level.GrassColor.getDefaultColor(), + AntarchyFabricBlocks.SPIDER_LILY.get() ); - ColorProviderRegistry.ITEM.register((stack, tintIndex) -> FoliageColor.getDefaultColor(), AntarchyFabricContent.OURANWOOD_LEAVES_ITEM.get()); + ColorProviderRegistry.ITEM.register((stack, tintIndex) -> FoliageColor.getDefaultColor(), AntarchyFabricItems.OURANWOOD_LEAVES_ITEM.get()); ColorProviderRegistry.ITEM.register( - (stack, tintIndex) -> net.minecraft.world.level.GrassColor.getDefaultColor() + (stack, tintIndex) -> tintIndex == 0 ? net.minecraft.world.level.GrassColor.getDefaultColor() : -1, + AntarchyFabricItems.SPIDER_LILY_ITEM.get() ); } private static void registerFluids() { FluidRenderHandlerRegistry.INSTANCE.register( - AntarchyFabricContent.BILE.get(), - AntarchyFabricContent.FLOWING_BILE.get(), + AntarchyFabricMisc.BILE.get(), + AntarchyFabricMisc.FLOWING_BILE.get(), new SimpleFluidRenderHandler( ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "block/bile/bile_still"), ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "block/bile/bile_flowing"), @@ -149,8 +168,8 @@ public final class AntarchyFabricClientBootstrap { ); FluidRenderHandlerRegistry.INSTANCE.register( - AntarchyFabricContent.ICHOR.get(), - AntarchyFabricContent.FLOWING_ICHOR.get(), + AntarchyFabricMisc.ICHOR.get(), + AntarchyFabricMisc.FLOWING_ICHOR.get(), new SimpleFluidRenderHandler( ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "block/antiwater_still"), ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "block/antiwater_flow"), @@ -160,8 +179,8 @@ public final class AntarchyFabricClientBootstrap { ); FluidRenderHandlerRegistry.INSTANCE.register( - AntarchyFabricContent.ANTIWATER.get(), - AntarchyFabricContent.FLOWING_ANTIWATER.get(), + AntarchyFabricMisc.ANTIWATER.get(), + AntarchyFabricMisc.FLOWING_ANTIWATER.get(), new SimpleFluidRenderHandler( ResourceLocation.withDefaultNamespace("block/water_still"), ResourceLocation.withDefaultNamespace("block/water_flow"), @@ -185,88 +204,119 @@ public final class AntarchyFabricClientBootstrap { } } ); + + FluidRenderHandlerRegistry.INSTANCE.register( + AntarchyFabricMisc.LUMEN.get(), + AntarchyFabricMisc.FLOWING_LUMEN.get(), + new SimpleFluidRenderHandler( + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "block/lumen_still"), + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "block/lumen_flow"), + ResourceLocation.withDefaultNamespace("block/water_overlay"), + 0xFFFFFFFF + ) + ); } private static void registerParticles() { ParticleFactoryRegistry registry = ParticleFactoryRegistry.getInstance(); - registry.register(AntarchyFabricContent.DREAM_FIRE_FLAME.get(), DreamFlameParticle.Provider::new); - registry.register(AntarchyFabricContent.STINKY_GAS.get(), HypnoticGasParticle.Provider::new); - registry.register(AntarchyFabricContent.STINKY_FLY.get(), FireflyParticle.Provider::new); - registry.register(AntarchyFabricContent.HYPNOTIC_GAS.get(), HypnoticGasParticle.Provider::new); - registry.register(AntarchyFabricContent.HYPNOTIC_GAS_DOWN.get(), sprites -> new HypnoticGasParticle.Provider(sprites, true)); - registry.register(AntarchyFabricContent.HYPNOTIC_GAS_CLOUD.get(), new HypnoticGasCloudParticle.Provider()); - registry.register(AntarchyFabricContent.HYPNOTIC_GAS_CLOUD_DOWN.get(), new HypnoticGasCloudParticle.Provider(true)); - registry.register(AntarchyFabricContent.INVERTED_GEYSER_BASE.get(), InvertedGeyserBaseParticle.Provider::new); - registry.register(AntarchyFabricContent.INVERTED_GEYSER_PLUME.get(), InvertedGeyserPlumeParticle.Provider::new); - registry.register(AntarchyFabricContent.INVERTED_GEYSER_POOF.get(), InvertedGeyserBaseParticle.Provider::new); - registry.register(AntarchyFabricContent.INVERTED_GEYSER_ERUPTION.get(), new InvertedGeyserEruptionParticle.Provider()); - registry.register(AntarchyFabricContent.FIREFLY.get(), FireflyParticle.Provider::new); - registry.register(AntarchyFabricContent.ORANGE_ASH.get(), OrangeAshParticle.Provider::new); + registry.register(AntarchyFabricMisc.DREAM_FIRE_FLAME.get(), DreamFlameParticle.Provider::new); + registry.register(AntarchyFabricMisc.STINKY_GAS.get(), HypnoticGasParticle.Provider::new); + registry.register(AntarchyFabricMisc.STINKY_FLY.get(), FireflyParticle.Provider::new); + registry.register(AntarchyFabricMisc.PEACH_LEAVES_PARTICLE.get(), PeachLeavesParticle.Provider::new); + registry.register(AntarchyFabricMisc.HYPNOTIC_GAS.get(), HypnoticGasParticle.Provider::new); + registry.register(AntarchyFabricMisc.HYPNOTIC_GAS_DOWN.get(), sprites -> new HypnoticGasParticle.Provider(sprites, true)); + registry.register(AntarchyFabricMisc.HYPNOTIC_GAS_CLOUD.get(), new HypnoticGasCloudParticle.Provider()); + registry.register(AntarchyFabricMisc.HYPNOTIC_GAS_CLOUD_DOWN.get(), new HypnoticGasCloudParticle.Provider(true)); + registry.register(AntarchyFabricMisc.INVERTED_GEYSER_BASE.get(), InvertedGeyserBaseParticle.Provider::new); + registry.register(AntarchyFabricMisc.INVERTED_GEYSER_PLUME.get(), InvertedGeyserPlumeParticle.Provider::new); + registry.register(AntarchyFabricMisc.INVERTED_GEYSER_POOF.get(), InvertedGeyserBaseParticle.Provider::new); + registry.register(AntarchyFabricMisc.INVERTED_GEYSER_ERUPTION.get(), new InvertedGeyserEruptionParticle.Provider()); + registry.register(AntarchyFabricMisc.FIREFLY.get(), FireflyParticle.Provider::new); + registry.register(AntarchyFabricMisc.ORANGE_ASH.get(), OrangeAshParticle.Provider::new); } private static void registerRenderLayers() { - BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.OURANWOOD_LEAVES.get(), RenderType.cutout()); - BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.OURANWOOD_DOOR.get(), RenderType.cutout()); - BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.OURANWOOD_TRAPDOOR.get(), RenderType.cutout()); - BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.OURANWOOD_ACORN_BLOCK.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.OURANWOOD_LEAVES.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.OURANWOOD_DOOR.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.OURANWOOD_TRAPDOOR.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.OURANWOOD_ACORN_BLOCK.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.PEACH_LEAVES.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.PEACH_HANGING_PEACH.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.PEACH_DOOR.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.PEACH_TRAPDOOR.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.PEACH_SAPLING.get(), RenderType.cutout()); // BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.OURANWOOD_VINE.get(), RenderType.cutout()); // BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.OURANWOOD_VINE_PLANT.get(), RenderType.cutout()); - BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.DUPLICATOR_SAPLING.get(), RenderType.cutout()); - BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.ORANGE_MILKWEED.get(), RenderType.cutout()); - BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.PINK_MILKWEED.get(), RenderType.cutout()); - BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.HUSHWEED.get(), RenderType.cutout()); - BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.CORNEA_STALK.get(), RenderType.cutout()); - BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.FALLEN_KING_CROWN_BLOCK.get(), RenderType.cutout()); - BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.ANTIMETAL_SCAFFOLDING.get(), RenderType.cutout()); - BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.UMBRAL_MOSS_CARPET.get(), RenderType.cutout()); - BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.NYXITE_SPIKE.get(), RenderType.cutout()); - BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.SMALL_BLOOD_CRYSTAL_BUD.get(), RenderType.cutout()); - BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.MEDIUM_BLOOD_CRYSTAL_BUD.get(), RenderType.cutout()); - BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.LARGE_BLOOD_CRYSTAL_BUD.get(), RenderType.cutout()); - BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.BLOOD_CRYSTAL_CRYSTAL.get(), RenderType.cutout()); - BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.DREAM_TORCH.get(), RenderType.cutout()); - BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.DREAM_WALL_TORCH.get(), RenderType.cutout()); - BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.DREAM_LANTERN.get(), RenderType.cutout()); - BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.DREAM_CAMPFIRE.get(), RenderType.cutout()); - BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.DREAM_FIRE.get(), RenderType.cutout()); - BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.DREAM_CEILING_FIRE.get(), RenderType.cutout()); - BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.ANTIWATER_BLOCK.get(), RenderType.translucent()); - BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.ELYTHIA_PORTAL.get(), RenderType.translucent()); - BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.THORAXIS_PORTAL.get(), RenderType.translucent()); - BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.TRIFFID_GOO_BLOCK.get(), RenderType.translucent()); - BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.URANIUM_DOOR.get(), RenderType.cutout()); - BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.TITANIUM_DOOR.get(), RenderType.cutout()); - BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.URANIUM_TRAPDOOR.get(), RenderType.cutout()); - BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.TITANIUM_TRAPDOOR.get(), RenderType.cutout()); - BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.URANIUM_BARS.get(), RenderType.cutout()); - BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.TITANIUM_BARS.get(), RenderType.cutout()); - BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.CLOUD_BLOCK.get(), RenderType.translucent()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.DUPLICATOR_SAPLING.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.ORANGE_MILKWEED.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.PINK_MILKWEED.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.CAMELLIA.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.SPIDER_LILY.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.GIANT_LILY_PAD.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.HUSHWEED.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.CORNEA_STALK.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.CORN_CROP.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.WILD_CORN.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.FALLEN_KING_CROWN_BLOCK.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.ANTIMETAL_SCAFFOLDING.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.UMBRAL_MOSS_CARPET.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.NYXITE_SPIKE.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.STAR_CORAL.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.STAR_CORAL_FAN.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.STAR_CORAL_WALL_FAN.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.DEAD_STAR_CORAL.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.DEAD_STAR_CORAL_FAN.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.DEAD_STAR_CORAL_WALL_FAN.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.SMALL_BLOOD_CRYSTAL_BUD.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.MEDIUM_BLOOD_CRYSTAL_BUD.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.LARGE_BLOOD_CRYSTAL_BUD.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.BLOOD_CRYSTAL_CRYSTAL.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.DREAM_TORCH.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.DREAM_WALL_TORCH.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.DREAM_LANTERN.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.DREAM_CAMPFIRE.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.DREAM_FIRE.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.DREAM_CEILING_FIRE.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.ANTIWATER_BLOCK.get(), RenderType.translucent()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.LUMEN_BLOCK.get(), RenderType.translucent()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.ELYTHIA_PORTAL.get(), RenderType.translucent()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.THORAXIS_PORTAL.get(), RenderType.translucent()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.TRIFFID_GOO_BLOCK.get(), RenderType.translucent()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.URANIUM_DOOR.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.TITANIUM_DOOR.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.URANIUM_TRAPDOOR.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.TITANIUM_TRAPDOOR.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.URANIUM_BARS.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.TITANIUM_BARS.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.CLOUD_BLOCK.get(), RenderType.translucent()); BlockRenderLayerMap.INSTANCE.putFluids( RenderType.translucent(), - AntarchyFabricContent.BILE.get(), - AntarchyFabricContent.FLOWING_BILE.get(), - AntarchyFabricContent.ICHOR.get(), - AntarchyFabricContent.FLOWING_ICHOR.get(), - AntarchyFabricContent.ANTIWATER.get(), - AntarchyFabricContent.FLOWING_ANTIWATER.get() + AntarchyFabricMisc.BILE.get(), + AntarchyFabricMisc.FLOWING_BILE.get(), + AntarchyFabricMisc.ICHOR.get(), + AntarchyFabricMisc.FLOWING_ICHOR.get(), + AntarchyFabricMisc.LUMEN.get(), + AntarchyFabricMisc.FLOWING_LUMEN.get(), + AntarchyFabricMisc.ANTIWATER.get(), + AntarchyFabricMisc.FLOWING_ANTIWATER.get() ); } private static void registerItemProperties() { ItemProperties.register( - AntarchyFabricContent.ULTIMATE_BOW.get(), + AntarchyFabricItems.ULTIMATE_BOW.get(), ResourceLocation.withDefaultNamespace("pull"), (stack, level, entity, seed) -> entity == null || entity.getUseItem() != stack ? 0.0F : (stack.getItem().getUseDuration(stack, entity) - entity.getUseItemRemainingTicks()) / 20.0F ); ItemProperties.register( - AntarchyFabricContent.ULTIMATE_BOW.get(), + AntarchyFabricItems.ULTIMATE_BOW.get(), ResourceLocation.withDefaultNamespace("pulling"), (stack, level, entity, seed) -> entity != null && entity.isUsingItem() && entity.getUseItem() == stack ? 1.0F : 0.0F ); ItemProperties.register( - AntarchyFabricContent.ULTIMATE_CROSSBOW.get(), + AntarchyFabricItems.ULTIMATE_CROSSBOW.get(), ResourceLocation.withDefaultNamespace("pull"), (stack, level, entity, seed) -> { if (entity == null || CrossbowItem.isCharged(stack) || entity.getUseItem() != stack) { @@ -277,17 +327,17 @@ public final class AntarchyFabricClientBootstrap { } ); ItemProperties.register( - AntarchyFabricContent.ULTIMATE_CROSSBOW.get(), + AntarchyFabricItems.ULTIMATE_CROSSBOW.get(), ResourceLocation.withDefaultNamespace("pulling"), (stack, level, entity, seed) -> entity != null && entity.isUsingItem() && entity.getUseItem() == stack && !CrossbowItem.isCharged(stack) ? 1.0F : 0.0F ); ItemProperties.register( - AntarchyFabricContent.ULTIMATE_CROSSBOW.get(), + AntarchyFabricItems.ULTIMATE_CROSSBOW.get(), ResourceLocation.withDefaultNamespace("charged"), (stack, level, entity, seed) -> CrossbowItem.isCharged(stack) ? 1.0F : 0.0F ); ItemProperties.register( - AntarchyFabricContent.ULTIMATE_CROSSBOW.get(), + AntarchyFabricItems.ULTIMATE_CROSSBOW.get(), ResourceLocation.withDefaultNamespace("firework"), (stack, level, entity, seed) -> CrossbowItem.isCharged(stack) && ChargedProjectiles.of(stack).contains(Items.FIREWORK_ROCKET) ? 1.0F : 0.0F ); diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/DreadClientHandler.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/DreadClientHandler.java index 4df0d8ee..a472dbc0 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/DreadClientHandler.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/DreadClientHandler.java @@ -1,4 +1,6 @@ package com.craisinlord.antarchy.fabric.client; +import com.craisinlord.antarchy.fabric.registry.AntarchyFabricMisc; +import com.craisinlord.antarchy.fabric.registry.AntarchyFabricSounds; import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.AntarchyTags; @@ -24,7 +26,7 @@ import java.util.Random; public final class DreadClientHandler { private static final Holder DREAD_EFFECT = - BuiltInRegistries.MOB_EFFECT.wrapAsHolder(AntarchyFabricContent.DREAD.get()); + BuiltInRegistries.MOB_EFFECT.wrapAsHolder(AntarchyFabricMisc.DREAD.get()); private static final int FOOTSTEP_MIN_INTERVAL_TICKS = 10; private static final int FOOTSTEP_MAX_INTERVAL_TICKS = 22; private static final int APPARITION_MIN_DURATION_TICKS = 16; @@ -285,7 +287,7 @@ public final class DreadClientHandler { player.getX(), player.getY() + 1.0D, player.getZ(), - AntarchyFabricContent.NIGHTMARE_BITE.get(), + AntarchyFabricSounds.NIGHTMARE_BITE.get(), SoundSource.HOSTILE, 0.4F, 0.88F + RANDOM.nextFloat() * 0.12F, diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/DreadHudRenderer.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/DreadHudRenderer.java index 8feae4d6..f88b07a0 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/DreadHudRenderer.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/DreadHudRenderer.java @@ -1,4 +1,5 @@ package com.craisinlord.antarchy.fabric.client; +import com.craisinlord.antarchy.fabric.registry.AntarchyFabricMisc; import com.craisinlord.antarchy.fabric.AntarchyFabricContent; import net.minecraft.client.Minecraft; @@ -10,7 +11,7 @@ import net.minecraft.world.effect.MobEffect; import net.minecraft.world.entity.player.Player; public final class DreadHudRenderer { - private static final Holder DREAD_EFFECT = BuiltInRegistries.MOB_EFFECT.wrapAsHolder(AntarchyFabricContent.DREAD.get()); + private static final Holder DREAD_EFFECT = BuiltInRegistries.MOB_EFFECT.wrapAsHolder(AntarchyFabricMisc.DREAD.get()); private DreadHudRenderer() { } diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/ElythiaFireflyManager.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/ElythiaFireflyManager.java index b436f125..ca92f8d8 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/ElythiaFireflyManager.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/ElythiaFireflyManager.java @@ -1,4 +1,5 @@ package com.craisinlord.antarchy.fabric.client; +import com.craisinlord.antarchy.fabric.registry.AntarchyFabricMisc; import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.AntarchyTags; @@ -56,7 +57,7 @@ public final class ElythiaFireflyManager { if (!level.getBlockState(candidate).isAir()) continue; level.addParticle( - AntarchyFabricContent.FIREFLY.get(), + AntarchyFabricMisc.FIREFLY.get(), candidate.getX() + level.random.nextDouble(), candidate.getY() + level.random.nextDouble(), candidate.getZ() + level.random.nextDouble(), diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/FallenKingCrownArmorStandLayer.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/FallenKingCrownArmorStandLayer.java index 4d36e49e..e55147a6 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/FallenKingCrownArmorStandLayer.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/FallenKingCrownArmorStandLayer.java @@ -1,4 +1,6 @@ package com.craisinlord.antarchy.fabric.client; +import com.craisinlord.antarchy.fabric.registry.AntarchyFabricBlocks; +import com.craisinlord.antarchy.fabric.registry.AntarchyFabricItems; import com.craisinlord.antarchy.fabric.AntarchyFabricContent; import com.mojang.blaze3d.vertex.PoseStack; @@ -24,7 +26,7 @@ public final class FallenKingCrownArmorStandLayer extends RenderLayer PARALYZED_EFFECT = - BuiltInRegistries.MOB_EFFECT.wrapAsHolder(AntarchyFabricContent.PARALYZED.get()); + BuiltInRegistries.MOB_EFFECT.wrapAsHolder(AntarchyFabricMisc.PARALYZED.get()); private static final int PARTICLE_INTERVAL = 3; diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/ParalyzedHudRenderer.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/ParalyzedHudRenderer.java index d5365870..8858fc4e 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/ParalyzedHudRenderer.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/ParalyzedHudRenderer.java @@ -1,4 +1,5 @@ package com.craisinlord.antarchy.fabric.client; +import com.craisinlord.antarchy.fabric.registry.AntarchyFabricMisc; import com.craisinlord.antarchy.fabric.AntarchyFabricContent; import net.minecraft.client.Minecraft; @@ -11,7 +12,7 @@ import net.minecraft.world.effect.MobEffectInstance; import net.minecraft.world.entity.player.Player; public final class ParalyzedHudRenderer { - private static final Holder PARALYZED_EFFECT = BuiltInRegistries.MOB_EFFECT.wrapAsHolder(AntarchyFabricContent.PARALYZED.get()); + private static final Holder PARALYZED_EFFECT = BuiltInRegistries.MOB_EFFECT.wrapAsHolder(AntarchyFabricMisc.PARALYZED.get()); private ParalyzedHudRenderer() { } diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/TriffidGooHudRenderer.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/TriffidGooHudRenderer.java index b222ffd1..c2c59d05 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/TriffidGooHudRenderer.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/TriffidGooHudRenderer.java @@ -1,4 +1,5 @@ package com.craisinlord.antarchy.fabric.client; +import com.craisinlord.antarchy.fabric.registry.AntarchyFabricBlocks; import com.craisinlord.antarchy.fabric.AntarchyFabricContent; import net.minecraft.client.Minecraft; @@ -23,7 +24,7 @@ public final class TriffidGooHudRenderer { fadeProgress = Math.max(0f, fadeProgress - FADE_SPEED); if (fadeProgress <= 0f) return; } else { - Block goo = AntarchyFabricContent.TRIFFID_GOO_BLOCK.get(); + Block goo = AntarchyFabricBlocks.TRIFFID_GOO_BLOCK.get(); BlockPos feet = player.blockPosition(); boolean inGoo = player.level().getBlockState(feet).is(goo) || player.level().getBlockState(feet.above()).is(goo); diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/content/fluid/AntiwaterFluid.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/content/fluid/AntiwaterFluid.java index 565d95e8..9b32a774 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/content/fluid/AntiwaterFluid.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/content/fluid/AntiwaterFluid.java @@ -1,4 +1,7 @@ package com.craisinlord.antarchy.fabric.content.fluid; +import com.craisinlord.antarchy.fabric.registry.AntarchyFabricBlocks; +import com.craisinlord.antarchy.fabric.registry.AntarchyFabricItems; +import com.craisinlord.antarchy.fabric.registry.AntarchyFabricMisc; import com.craisinlord.antarchy.fabric.AntarchyFabricContent; import java.util.HashSet; @@ -28,22 +31,22 @@ public abstract class AntiwaterFluid extends FlowingFluid { @Override public Fluid getFlowing() { - return AntarchyFabricContent.FLOWING_ANTIWATER.get(); + return AntarchyFabricMisc.FLOWING_ANTIWATER.get(); } @Override public Fluid getSource() { - return AntarchyFabricContent.ANTIWATER.get(); + return AntarchyFabricMisc.ANTIWATER.get(); } @Override public Item getBucket() { - return AntarchyFabricContent.ANTIWATER_BUCKET.get(); + return AntarchyFabricItems.ANTIWATER_BUCKET.get(); } @Override public boolean isSame(Fluid fluid) { - return fluid == AntarchyFabricContent.ANTIWATER.get() || fluid == AntarchyFabricContent.FLOWING_ANTIWATER.get(); + return fluid == AntarchyFabricMisc.ANTIWATER.get() || fluid == AntarchyFabricMisc.FLOWING_ANTIWATER.get(); } @Override @@ -78,7 +81,7 @@ public abstract class AntiwaterFluid extends FlowingFluid { @Override protected BlockState createLegacyBlock(FluidState state) { - return AntarchyFabricContent.ANTIWATER_BLOCK.get() + return AntarchyFabricBlocks.ANTIWATER_BLOCK.get() .defaultBlockState() .setValue(LiquidBlock.LEVEL, getLegacyLevel(state)); } @@ -341,8 +344,8 @@ public abstract class AntiwaterFluid extends FlowingFluid { if (aboveFluid.is(FluidTags.WATER)) { BlockState result = state.isSource() - ? AntarchyFabricContent.ANTIMETAL.get().defaultBlockState() - : AntarchyFabricContent.NYXITE.get().defaultBlockState(); + ? AntarchyFabricBlocks.ANTIMETAL.get().defaultBlockState() + : AntarchyFabricBlocks.NYXITE.get().defaultBlockState(); level.setBlockAndUpdate(pos, result); level.levelEvent(1501, pos, 0); return; diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/AntimetalScaffoldingMixin.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/AntimetalScaffoldingMixin.java index c96f551f..3d8405cb 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/AntimetalScaffoldingMixin.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/AntimetalScaffoldingMixin.java @@ -1,4 +1,5 @@ package com.craisinlord.antarchy.fabric.mixin; +import com.craisinlord.antarchy.fabric.registry.AntarchyFabricBlocks; import com.craisinlord.antarchy.fabric.AntarchyFabricContent; import net.minecraft.core.BlockPos; @@ -69,7 +70,7 @@ public abstract class AntimetalScaffoldingMixin { } private boolean antarchy$isAntimetalScaffolding() { - return ((ScaffoldingBlock) (Object) this).asItem() == AntarchyFabricContent.ANTIMETAL_SCAFFOLDING.get().asItem(); + return ((ScaffoldingBlock) (Object) this).asItem() == AntarchyFabricBlocks.ANTIMETAL_SCAFFOLDING.get().asItem(); } private int antarchy$getDistance(BlockGetter level, BlockPos pos) { diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/CrossbowArmPoseMixin.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/CrossbowArmPoseMixin.java index 2c3664a7..573165a4 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/CrossbowArmPoseMixin.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/CrossbowArmPoseMixin.java @@ -1,6 +1,7 @@ package com.craisinlord.antarchy.fabric.mixin.client; import com.craisinlord.antarchy.content.item.GravityGunItem; +import com.craisinlord.antarchy.content.item.RpoLauncherItem; import com.craisinlord.antarchy.content.item.SizeRayItem; import com.craisinlord.antarchy.content.item.SquidzookaItem; import com.craisinlord.antarchy.content.item.WaterCannonItem; @@ -25,7 +26,7 @@ public class CrossbowArmPoseMixin { ItemStack stack = player.getItemInHand(hand); Item item = stack.getItem(); - if (item instanceof GravityGunItem || item instanceof SquidzookaItem || item instanceof WaterCannonItem) { + if (item instanceof GravityGunItem || item instanceof SquidzookaItem || item instanceof RpoLauncherItem || item instanceof WaterCannonItem) { cir.setReturnValue(HumanoidModel.ArmPose.CROSSBOW_HOLD); } else if (item instanceof SizeRayItem) { if (player.isUsingItem() && player.getUsedItemHand() == hand) { diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/MultipartClientSpawnMixin.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/MultipartClientSpawnMixin.java index 5968bf07..e39b6ea7 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/MultipartClientSpawnMixin.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/MultipartClientSpawnMixin.java @@ -1,4 +1,5 @@ package com.craisinlord.antarchy.fabric.mixin.client; +import com.craisinlord.antarchy.fabric.registry.AntarchyFabricEntities; import com.craisinlord.antarchy.fabric.AntarchyFabricContent; import net.minecraft.client.multiplayer.ClientPacketListener; @@ -12,7 +13,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; public abstract class MultipartClientSpawnMixin { @Inject(method = "handleAddEntity", at = @At("HEAD"), cancellable = true) private void antarchy$skipTrackedMultipartPlaceholders(ClientboundAddEntityPacket packet, CallbackInfo ci) { - if (packet.getType() == AntarchyFabricContent.KRAKEN_PART.get()) { + if (packet.getType() == AntarchyFabricEntities.KRAKEN_PART.get()) { ci.cancel(); } } diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/infinity/RandomSpringMixin.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/infinity/RandomSpringMixin.java deleted file mode 100644 index 559cdba6..00000000 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/infinity/RandomSpringMixin.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.craisinlord.antarchy.fabric.mixin.infinity; - -import net.lerariemann.infinity.dimensions.features.fluid_springs.RandomSpring; -import net.lerariemann.infinity.util.core.ConfigType; -import net.lerariemann.infinity.util.core.RandomProvider; -import net.minecraft.nbt.CompoundTag; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; - -import java.util.Random; - -@Mixin(value = RandomSpring.class, remap = false) -/* - * Skips bad fluid picks for Infinity random springs on Fabric. - */ -public abstract class RandomSpringMixin { - @Redirect( - method = "feature", - at = @At( - value = "INVOKE", - target = "Lnet/lerariemann/infinity/util/core/RandomProvider;randomName(Ljava/util/Random;Lnet/lerariemann/infinity/util/core/ConfigType;)Ljava/lang/String;" - ) - ) - private String antarchy$useFluidIdForSpring(RandomProvider provider, Random random, ConfigType configType) { - if (configType != ConfigType.FLUIDS) { - return provider.randomName(random, configType); - } - - CompoundTag fluidTag = provider.randomElement(random, configType); - String fluidId = fluidTag.getString("fluidName"); - if (!fluidId.isEmpty()) { - return fluidId; - } - return fluidTag.getString("Name"); - } -} diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/network/AntarchyFabricNetworking.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/network/AntarchyFabricNetworking.java index 81ff9284..a560c639 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/network/AntarchyFabricNetworking.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/network/AntarchyFabricNetworking.java @@ -1,4 +1,5 @@ package com.craisinlord.antarchy.fabric.network; +import com.craisinlord.antarchy.fabric.registry.AntarchyFabricEntities; import com.craisinlord.antarchy.content.entity.DiamondMinecartEntity; import com.craisinlord.antarchy.content.client.HerculesBeetleImpactShakeClientState; @@ -61,7 +62,7 @@ public final class AntarchyFabricNetworking { } public static MultipartPartEntity createMultipartPart(MultipartEntityOwner owner, int partIndex, com.craisinlord.antarchy.content.entity.multipart.MultipartPartDefinition spec) { - return new MultipartPartEntity(AntarchyFabricContent.KRAKEN_PART.get(), ((Entity) owner).level()) + return new MultipartPartEntity(AntarchyFabricEntities.KRAKEN_PART.get(), ((Entity) owner).level()) .antarchy$configure(owner, partIndex, spec); } diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricBlocks.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricBlocks.java new file mode 100644 index 00000000..e241c595 --- /dev/null +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricBlocks.java @@ -0,0 +1,1169 @@ +package com.craisinlord.antarchy.fabric.registry; + +import com.craisinlord.antarchy.fabric.AntarchyWoodTypes; +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.compat.infinity.InfinityCompat; +import com.craisinlord.antarchy.compat.infinity.InfinityCompatVersion; +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.CreativeTabOrder; +import com.craisinlord.antarchy.content.block.*; +import com.craisinlord.antarchy.content.AntarchySoundEvents; +import com.craisinlord.antarchy.content.item.BloodCrystalArmorItem; +import com.craisinlord.antarchy.content.item.BloodCrystalAppleItem; +import com.craisinlord.antarchy.content.item.BloodCrystalKatanaItem; +import com.craisinlord.antarchy.content.block.entity.AntNestBlockEntity; +import com.craisinlord.antarchy.content.block.entity.DreamCampfireBlockEntity; +import com.craisinlord.antarchy.content.block.entity.HushweedBlockEntity; +import com.craisinlord.antarchy.content.block.entity.PotentNyxiteBlockEntity; +import com.craisinlord.antarchy.content.block.entity.WaspNestBlockEntity; +import com.craisinlord.antarchy.content.fluid.BileLiquidBlock; +import com.craisinlord.antarchy.content.fluid.LumenLiquidBlock; +import com.craisinlord.antarchy.content.worldgen.ants.BrownAntNestFeature; +import com.craisinlord.antarchy.content.worldgen.ants.RainbowAntNestFeature; +import com.craisinlord.antarchy.content.worldgen.ants.RedAntNestFeature; +import com.craisinlord.antarchy.content.worldgen.ants.TermiteNestFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynBileCystFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynBileVeinFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynCreepvineFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynWallAmberMossFeature; +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.NyxiteSpikeFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.PotentNyxiteFeature; +import com.craisinlord.antarchy.fabric.content.fluid.AntiwaterFluid; +import com.craisinlord.antarchy.fabric.content.fluid.AntiwaterLiquidBlock; +import com.craisinlord.antarchy.fabric.item.DeferredSpawnEggItem; +import com.craisinlord.antarchy.fabric.network.AntarchyFabricNetworking; +import com.craisinlord.antarchy.fabric.registry.DeferredBlock; +import com.craisinlord.antarchy.fabric.registry.DeferredHolder; +import com.craisinlord.antarchy.fabric.registry.DeferredItem; +import com.craisinlord.antarchy.fabric.registry.DeferredRegister; +import com.craisinlord.antarchy.content.effect.DreadMobEffect; +import com.craisinlord.antarchy.content.effect.GrowthMobEffect; +import com.craisinlord.antarchy.content.effect.InvertedMobEffect; +import com.craisinlord.antarchy.content.effect.ParalyzedMobEffect; +import com.craisinlord.antarchy.content.effect.ShrinkMobEffect; +import com.craisinlord.antarchy.content.effect.StinkyMobEffect; +import com.craisinlord.antarchy.content.entity.AppleCowEntityVariants.AppleCow; +import com.craisinlord.antarchy.content.entity.AppleCowEntityVariants.EnchantedGoldenAppleCow; +import com.craisinlord.antarchy.content.entity.AppleCowEntityVariants.GoldenAppleCow; +import com.craisinlord.antarchy.content.entity.cloud_shark.CloudSharkEntity; +import com.craisinlord.antarchy.content.entity.BedBugEntity; +import com.craisinlord.antarchy.content.entity.ButterflyEntity; +import com.craisinlord.antarchy.content.entity.CaterpillarEntity; +import com.craisinlord.antarchy.content.entity.DiamondMinecartEntity; +import com.craisinlord.antarchy.content.entity.DrTrayaurusEntity; +import com.craisinlord.antarchy.content.entity.brutalfly.BrutalflyEntity; +import com.craisinlord.antarchy.content.entity.brutalfly.BrutalflyOrbEntity; +import com.craisinlord.antarchy.content.entity.EasterBunnyEntity; +import com.craisinlord.antarchy.content.entity.flying_squirrel.FlyingSquirrelEntity; +import com.craisinlord.antarchy.content.entity.ReverieEntity; +import com.craisinlord.antarchy.content.entity.MissileSquidEntity; +import com.craisinlord.antarchy.content.entity.lucid.LucidEntity; +import com.craisinlord.antarchy.content.entity.lucid.LucidBoltEntity; +import com.craisinlord.antarchy.content.entity.lucid.LucidEyeProjectileEntity; +import com.craisinlord.antarchy.content.entity.HushProjectileEntity; +import com.craisinlord.antarchy.content.entity.JumpyBugEntity; +import com.craisinlord.antarchy.content.entity.StinkBugEntity; +import com.craisinlord.antarchy.content.entity.OuranwoodBoatEntity; +import com.craisinlord.antarchy.content.entity.OuranwoodChestBoatEntity; +import com.craisinlord.antarchy.content.entity.AlphaMantisEntity; +import com.craisinlord.antarchy.content.entity.MantisEntity; +import com.craisinlord.antarchy.content.entity.RollyPollyEntity; +import com.craisinlord.antarchy.content.entity.basilisk.BasiliskEntity; +import com.craisinlord.antarchy.content.entity.EmperorScorpionEntity; +import com.craisinlord.antarchy.content.entity.ScorpionEntity; +import com.craisinlord.antarchy.content.item.LucidEyeItem; +import com.craisinlord.antarchy.content.item.LucidPearlItem; +import com.craisinlord.antarchy.content.entity.nightmare.NightmareEntity; +import com.craisinlord.antarchy.content.entity.ToreterrorEntity; +import com.craisinlord.antarchy.content.entity.WaterBombEntity; +import com.craisinlord.antarchy.content.item.PrimordialArmorItem; +import com.craisinlord.antarchy.content.item.WaterCannonItem; +import com.craisinlord.antarchy.content.entity.kraken.KrakenEntity; +import com.craisinlord.antarchy.content.entity.OctopusBombEntity; +import com.craisinlord.antarchy.content.entity.MolevoreEntity; +import com.craisinlord.antarchy.content.entity.MolewormEntity; +import com.craisinlord.antarchy.content.entity.BomberEntity; +import com.craisinlord.antarchy.content.entity.SizeRayProjectileEntity; +import com.craisinlord.antarchy.content.entity.TriffidEntity; +import com.craisinlord.antarchy.content.entity.WaspEntity; +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 com.craisinlord.antarchy.content.item.BattleAxeItem; +import com.craisinlord.antarchy.content.item.BasiliskDaggerItem; +import com.craisinlord.antarchy.content.item.BigBerthaItem; +import com.craisinlord.antarchy.content.item.AntimetalBlockItem; +import com.craisinlord.antarchy.fabric.item.AntimetalScaffoldingItem; +import com.craisinlord.antarchy.content.item.CloudSharkFinSoupItem; +import com.craisinlord.antarchy.content.item.CorneaEarItem; +import com.craisinlord.antarchy.content.item.GravityGunItem; +import com.craisinlord.antarchy.content.item.MinersDreamItem; +import com.craisinlord.antarchy.content.item.DuctTapeBlockItem; +import com.craisinlord.antarchy.content.item.BrutalflyElytraItem; +import com.craisinlord.antarchy.content.item.MobComingSoonTooltipItem; +import com.craisinlord.antarchy.content.item.MogglesItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimateAxeItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimateHoeItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimatePickaxeItem; +import com.craisinlord.antarchy.content.item.ultimate.UtlimateShovelItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimateSwordItem; +import com.craisinlord.antarchy.content.item.DiamondMinecartItem; +import com.craisinlord.antarchy.content.item.ReverieBottleItem; +import com.craisinlord.antarchy.content.item.ScorpionWhipItem; +import com.craisinlord.antarchy.content.item.ScorpionWhipTetherSync; +import com.craisinlord.antarchy.content.network.HerculesBeetleImpactShakeSync; +import com.craisinlord.antarchy.content.item.SizeRayItem; +import com.craisinlord.antarchy.content.item.SquidzookaItem; +import com.craisinlord.antarchy.content.item.SimpleToolTier; +import com.craisinlord.antarchy.content.item.ultimate.UltimateArmorItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimateBowItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimateCrossbowItem; +import com.craisinlord.antarchy.content.item.NightmareArmorItem; +import com.craisinlord.antarchy.content.item.NightmareSwordItem; +import com.craisinlord.antarchy.content.item.OuranwoodBoatOnlyItem; +import com.craisinlord.antarchy.content.item.OuranwoodChestBoatItem; +import com.craisinlord.antarchy.content.item.RainbowSugarItem; +import com.craisinlord.antarchy.content.worldgen.elythia.CoralSpikeFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaBiomeSource; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaRiverCarveFunction; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaFloraFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaLargeTuffBoulderFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.PeachForestMossyBoulderFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.PeachForestPondConfiguration; +import com.craisinlord.antarchy.content.worldgen.elythia.PeachForestPondFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaPondFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaSurfaceCoverFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaTuffBoulderFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaUndergroundFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.MolewormCaveEntranceFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.MolewormSurfaceMoundsFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.BrutalflyCocoonFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.LumenPoolFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.LumenLilyPadFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.LumenStreamFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.MolewormTunnelsFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.MolewormWarrensFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.OuranwoodCocoonTreeFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.OuranwoodTreeConfiguration; +import com.craisinlord.antarchy.content.worldgen.elythia.OuranwoodTreeFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.PeachTreeConfiguration; +import com.craisinlord.antarchy.content.worldgen.elythia.PeachTreeFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.TriffidPatchFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynEggPatchFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.ChitenSpikeConfiguration; +import com.craisinlord.antarchy.content.worldgen.cavaryn.ChitenSpikeFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.BedBugNestFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.BedBugSurfaceClusterFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.CloudSeaCalciteFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.LucidAntiwaterPoolFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisBiomeSource; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisDuneConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisDuneFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisFissureConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisFissureFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisBloodCrystalConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisBloodCrystalFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisAntiwaterPoolConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisAntiwaterPoolFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisRibColumnsConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisRibColumnsFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisSpikeConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisSpikeFeature; +import com.craisinlord.antarchy.content.client.particle.InvertedGeyserBaseParticleOptions; +import com.craisinlord.antarchy.content.client.particle.InvertedGeyserParticleOptions; +import com.craisinlord.antarchy.content.portal.PermanentPortalType; +import java.util.List; +import java.util.ArrayList; +import java.util.Comparator; +import com.mojang.serialization.MapCodec; +import net.fabricmc.fabric.api.object.builder.v1.entity.FabricDefaultAttributeRegistry; +import net.fabricmc.fabric.api.registry.FabricBrewingRecipeRegistryBuilder; +import net.minecraft.advancements.critereon.EntitySubPredicate; +import net.minecraft.core.Holder; +import net.minecraft.core.registries.Registries; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.world.item.alchemy.Potion; +import net.minecraft.world.item.alchemy.PotionContents; +import net.minecraft.world.effect.MobEffect; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.tags.TagKey; +import net.minecraft.world.damagesource.DamageType; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.MobCategory; +import net.minecraft.world.entity.ai.attributes.Attribute; +import net.minecraft.world.entity.ai.attributes.AttributeSupplier; +import net.minecraft.world.entity.ai.attributes.Attributes; +import net.minecraft.world.entity.animal.Cow; +import net.minecraft.world.entity.animal.Rabbit; +import net.minecraft.world.entity.SpawnPlacementTypes; +import net.minecraft.world.entity.SpawnPlacements; +import net.minecraft.world.entity.npc.Villager; +import net.minecraft.world.entity.monster.Monster; +import net.minecraft.world.item.ArmorItem; +import net.minecraft.world.item.ArmorMaterial; +import net.minecraft.world.item.BucketItem; +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.Rarity; +import net.minecraft.world.item.StandingAndWallBlockItem; +import net.minecraft.world.food.FoodProperties; +import net.minecraft.world.item.Tier; +import net.minecraft.world.item.Tiers; +import net.minecraft.world.item.alchemy.Potions; +import net.minecraft.world.item.crafting.Ingredient; +import net.minecraft.world.flag.FeatureFlags; +import net.minecraft.core.Direction; +import net.minecraft.core.particles.ParticleType; +import net.minecraft.core.particles.SimpleParticleType; +import net.minecraft.util.valueproviders.UniformInt; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.AmethystClusterBlock; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.DropExperienceBlock; +import net.minecraft.world.level.block.GlowLichenBlock; +import net.minecraft.world.level.block.HorizontalDirectionalBlock; +import net.minecraft.world.level.block.LiquidBlock; +import net.minecraft.world.level.block.RotatedPillarBlock; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.block.VineBlock; +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.biome.BiomeSource; +import net.minecraft.world.level.levelgen.DensityFunction; +import net.minecraft.world.level.levelgen.feature.Feature; +import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; +import net.minecraft.world.level.levelgen.feature.configurations.SimpleBlockConfiguration; +import net.minecraft.world.level.levelgen.Heightmap; +import net.fabricmc.loader.api.FabricLoader; +import net.minecraft.world.level.material.Fluid; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.block.Mirror; +import net.minecraft.world.level.block.Rotation; +import com.craisinlord.antarchy.fabric.AntarchyFabricContent; + +public final class AntarchyFabricBlocks { + + public static final DeferredRegister.Blocks BLOCKS = DeferredRegister.createBlocks(Antarchy.MODID); + + + public static final DeferredRegister> BLOCK_ENTITY_TYPES = DeferredRegister.create(Registries.BLOCK_ENTITY_TYPE, Antarchy.MODID); + + + public static final DeferredBlock DUPLICATOR_LOG = BLOCKS.register("duplicator_log", + () -> new DuplicatorLogBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.OAK_LOG).randomTicks())); + + + public static final DeferredBlock OURANWOOD_LOG = BLOCKS.register("ouranwood_log", + () -> new OuranwoodLogBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_LOG))); + + + public static final DeferredBlock OURANWOOD_WOOD = BLOCKS.register("ouranwood_wood", + () -> new OuranwoodLogBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_WOOD))); + + + public static final DeferredBlock MOSSY_OURANWOOD_LOG = BLOCKS.register("mossy_ouranwood_log", + () -> new OuranwoodLogBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_LOG))); + + + public static final DeferredBlock MOSSY_OURANWOOD_WOOD = BLOCKS.register("mossy_ouranwood_wood", + () -> new OuranwoodLogBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_WOOD))); + + + public static final DeferredBlock STRIPPED_OURANWOOD_LOG = BLOCKS.register("stripped_ouranwood_log", + () -> new OuranwoodLogBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.STRIPPED_JUNGLE_LOG))); + + + public static final DeferredBlock STRIPPED_OURANWOOD_WOOD = BLOCKS.register("stripped_ouranwood_wood", + () -> new OuranwoodLogBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.STRIPPED_JUNGLE_WOOD))); + + + public static final DeferredBlock OURANWOOD_PLANKS = BLOCKS.register("ouranwood_planks", + () -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_PLANKS))); + + + public static final DeferredBlock OURANWOOD_STAIRS = BLOCKS.register("ouranwood_stairs", + () -> new net.minecraft.world.level.block.StairBlock(OURANWOOD_PLANKS.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_STAIRS))); + + + public static final DeferredBlock OURANWOOD_SLAB = BLOCKS.register("ouranwood_slab", + () -> new net.minecraft.world.level.block.SlabBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_SLAB))); + + + public static final DeferredBlock OURANWOOD_FENCE = BLOCKS.register("ouranwood_fence", + () -> new net.minecraft.world.level.block.FenceBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_FENCE))); + + + public static final DeferredBlock OURANWOOD_FENCE_GATE = BLOCKS.register("ouranwood_fence_gate", + () -> new net.minecraft.world.level.block.FenceGateBlock(net.minecraft.world.level.block.state.properties.WoodType.JUNGLE, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_FENCE_GATE))); + + + public static final DeferredBlock OURANWOOD_DOOR = BLOCKS.register("ouranwood_door", + () -> new net.minecraft.world.level.block.DoorBlock(net.minecraft.world.level.block.state.properties.BlockSetType.JUNGLE, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_DOOR))); + + + public static final DeferredBlock OURANWOOD_TRAPDOOR = BLOCKS.register("ouranwood_trapdoor", + () -> new net.minecraft.world.level.block.TrapDoorBlock(net.minecraft.world.level.block.state.properties.BlockSetType.JUNGLE, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_TRAPDOOR))); + + + public static final DeferredBlock OURANWOOD_PRESSURE_PLATE = BLOCKS.register("ouranwood_pressure_plate", + () -> new net.minecraft.world.level.block.PressurePlateBlock(net.minecraft.world.level.block.state.properties.BlockSetType.JUNGLE, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_PRESSURE_PLATE))); + + + public static final DeferredBlock OURANWOOD_BUTTON = BLOCKS.register("ouranwood_button", + () -> new net.minecraft.world.level.block.ButtonBlock(net.minecraft.world.level.block.state.properties.BlockSetType.JUNGLE, 30, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_BUTTON))); + + + public static final DeferredBlock OURANWOOD_LEAVES = BLOCKS.register("ouranwood_leaves", + () -> new OuranwoodLeavesBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_LEAVES).randomTicks())); + + + public static final DeferredBlock OURANWOOD_ACORN_BLOCK = BLOCKS.register("ouranwood_acorn", + () -> new OuranwoodAcornBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.OAK_SAPLING).randomTicks().noCollission())); + + + public static final DeferredBlock ORANGE_MILKWEED = BLOCKS.register("orange_milkweed", + () -> new MilkweedBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.PEONY))); + + + public static final DeferredBlock PINK_MILKWEED = BLOCKS.register("pink_milkweed", + () -> new MilkweedBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.PEONY))); + + + public static final DeferredBlock CAMELLIA = BLOCKS.register("camellia", + () -> new com.craisinlord.antarchy.content.block.CamelliaBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.PEONY))); + + + public static final DeferredBlock SPIDER_LILY = BLOCKS.register("spider_lily", + () -> new com.craisinlord.antarchy.content.block.SpiderLilyBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.POPPY))); + + + public static final DeferredBlock GIANT_LILY_PAD = BLOCKS.register("giant_lily_pad", + () -> new GiantLilyPadBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.LILY_PAD))); + + + public static final DeferredBlock OURANWOOD_SIGN = BLOCKS.register("ouranwood_sign", + () -> new net.minecraft.world.level.block.StandingSignBlock(AntarchyWoodTypes.OURANWOOD, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_SIGN))); + + + public static final DeferredBlock OURANWOOD_WALL_SIGN = BLOCKS.register("ouranwood_wall_sign", + () -> new net.minecraft.world.level.block.WallSignBlock(AntarchyWoodTypes.OURANWOOD, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_WALL_SIGN))); + + + public static final DeferredBlock OURANWOOD_HANGING_SIGN = BLOCKS.register("ouranwood_hanging_sign", + () -> new net.minecraft.world.level.block.CeilingHangingSignBlock(AntarchyWoodTypes.OURANWOOD, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_HANGING_SIGN))); + + + public static final DeferredBlock OURANWOOD_WALL_HANGING_SIGN = BLOCKS.register("ouranwood_wall_hanging_sign", + () -> new net.minecraft.world.level.block.WallHangingSignBlock(AntarchyWoodTypes.OURANWOOD, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_WALL_HANGING_SIGN))); + + + public static final DeferredBlock PEACH_LOG = BLOCKS.register("peach_log", + () -> new RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_LOG))); + + + public static final DeferredBlock PEACH_WOOD = BLOCKS.register("peach_wood", + () -> new RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_WOOD))); + + + public static final DeferredBlock STRIPPED_PEACH_LOG = BLOCKS.register("stripped_peach_log", + () -> new RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.STRIPPED_JUNGLE_LOG))); + + + public static final DeferredBlock STRIPPED_PEACH_WOOD = BLOCKS.register("stripped_peach_wood", + () -> new RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.STRIPPED_JUNGLE_WOOD))); + + + public static final DeferredBlock PEACH_PLANKS = BLOCKS.register("peach_planks", + () -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_PLANKS))); + + + public static final DeferredBlock PEACH_STAIRS = BLOCKS.register("peach_stairs", + () -> new net.minecraft.world.level.block.StairBlock(PEACH_PLANKS.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_STAIRS))); + + + public static final DeferredBlock PEACH_SLAB = BLOCKS.register("peach_slab", + () -> new net.minecraft.world.level.block.SlabBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_SLAB))); + + + public static final DeferredBlock PEACH_FENCE = BLOCKS.register("peach_fence", + () -> new net.minecraft.world.level.block.FenceBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_FENCE))); + + + public static final DeferredBlock PEACH_FENCE_GATE = BLOCKS.register("peach_fence_gate", + () -> new net.minecraft.world.level.block.FenceGateBlock(net.minecraft.world.level.block.state.properties.WoodType.JUNGLE, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_FENCE_GATE))); + + + public static final DeferredBlock PEACH_DOOR = BLOCKS.register("peach_door", + () -> new net.minecraft.world.level.block.DoorBlock(net.minecraft.world.level.block.state.properties.BlockSetType.JUNGLE, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_DOOR))); + + + public static final DeferredBlock PEACH_TRAPDOOR = BLOCKS.register("peach_trapdoor", + () -> new net.minecraft.world.level.block.TrapDoorBlock(net.minecraft.world.level.block.state.properties.BlockSetType.JUNGLE, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_TRAPDOOR))); + + + public static final DeferredBlock PEACH_PRESSURE_PLATE = BLOCKS.register("peach_pressure_plate", + () -> new net.minecraft.world.level.block.PressurePlateBlock(net.minecraft.world.level.block.state.properties.BlockSetType.JUNGLE, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_PRESSURE_PLATE))); + + + public static final DeferredBlock PEACH_BUTTON = BLOCKS.register("peach_button", + () -> new net.minecraft.world.level.block.ButtonBlock(net.minecraft.world.level.block.state.properties.BlockSetType.JUNGLE, 30, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_BUTTON))); + + + public static final DeferredBlock PEACH_LEAVES = BLOCKS.register("peach_leaves", + () -> new com.craisinlord.antarchy.content.block.PeachLeavesBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_LEAVES).randomTicks())); + + + public static final DeferredBlock PEACH_HANGING_PEACH = BLOCKS.register("hanging_peach", + () -> new com.craisinlord.antarchy.content.block.HangingPeachBlock(BlockBehaviour.Properties.of().noOcclusion().instabreak())); + + + public static final DeferredBlock PEACH_SAPLING = BLOCKS.register("peach_sapling", + () -> new com.craisinlord.antarchy.content.block.PeachSaplingBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.OAK_SAPLING).randomTicks().noCollission())); + + + public static final DeferredBlock PEACH_SIGN = BLOCKS.register("peach_sign", + () -> new net.minecraft.world.level.block.StandingSignBlock(AntarchyWoodTypes.PEACH, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_SIGN))); + + + public static final DeferredBlock PEACH_WALL_SIGN = BLOCKS.register("peach_wall_sign", + () -> new net.minecraft.world.level.block.WallSignBlock(AntarchyWoodTypes.PEACH, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_WALL_SIGN))); + + + public static final DeferredBlock PEACH_HANGING_SIGN = BLOCKS.register("peach_hanging_sign", + () -> new net.minecraft.world.level.block.CeilingHangingSignBlock(AntarchyWoodTypes.PEACH, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_HANGING_SIGN))); + + + public static final DeferredBlock PEACH_WALL_HANGING_SIGN = BLOCKS.register("peach_wall_hanging_sign", + () -> new net.minecraft.world.level.block.WallHangingSignBlock(AntarchyWoodTypes.PEACH, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_WALL_HANGING_SIGN))); + + + public static final DeferredBlock DUPLICATOR_SAPLING = BLOCKS.register("duplicator_sapling", + () -> new DuplicatorSaplingBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.OAK_SAPLING).randomTicks().noCollission())); + + + public static final DeferredBlock DUCT_TAPE = BLOCKS.register("duct_tape", + () -> new DuctTapeBlock(BlockBehaviour.Properties.of() + .strength(0.2F) + .sound(SoundType.WOOL) + .noOcclusion() + .replaceable())); + + + public static final DeferredBlock INFESTED_ROOTED_DIRT = BLOCKS.register("infested_rooted_dirt", + () -> new InfestedRootedDirtBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.ROOTED_DIRT).randomTicks())); + + + public static final DeferredBlock INFESTED_COARSE_DIRT = BLOCKS.register("infested_coarse_dirt", + () -> new InfestedCoarseDirtBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.COARSE_DIRT).randomTicks())); + + + public static final DeferredBlock NYXITE = BLOCKS.register("nyxite", + () -> new Block(nyxiteProperties())); + + + public static final DeferredBlock POLISHED_NYXITE = BLOCKS.register("polished_nyxite", + () -> new Block(nyxiteProperties())); + + + public static final DeferredBlock CHISELED_NYXITE = BLOCKS.register("chiseled_nyxite", + () -> new Block(nyxiteProperties())); + + + public static final DeferredBlock NYXITE_BRICKS = BLOCKS.register("nyxite_bricks", + () -> new Block(nyxiteProperties())); + + + public static final DeferredBlock NYXITE_STAIRS = BLOCKS.register("nyxite_stairs", + () -> new net.minecraft.world.level.block.StairBlock(NYXITE.get().defaultBlockState(), nyxiteProperties())); + + + public static final DeferredBlock NYXITE_SLAB = BLOCKS.register("nyxite_slab", + () -> new net.minecraft.world.level.block.SlabBlock(nyxiteProperties())); + + + public static final DeferredBlock NYXITE_WALL = BLOCKS.register("nyxite_wall", + () -> new net.minecraft.world.level.block.WallBlock(nyxiteProperties())); + + + public static final DeferredBlock POLISHED_NYXITE_STAIRS = BLOCKS.register("polished_nyxite_stairs", + () -> new net.minecraft.world.level.block.StairBlock(POLISHED_NYXITE.get().defaultBlockState(), nyxiteProperties())); + + + public static final DeferredBlock POLISHED_NYXITE_SLAB = BLOCKS.register("polished_nyxite_slab", + () -> new net.minecraft.world.level.block.SlabBlock(nyxiteProperties())); + + + public static final DeferredBlock POLISHED_NYXITE_WALL = BLOCKS.register("polished_nyxite_wall", + () -> new net.minecraft.world.level.block.WallBlock(nyxiteProperties())); + + + public static final DeferredBlock NYXITE_BRICK_STAIRS = BLOCKS.register("nyxite_brick_stairs", + () -> new net.minecraft.world.level.block.StairBlock(NYXITE_BRICKS.get().defaultBlockState(), nyxiteProperties())); + + + public static final DeferredBlock NYXITE_BRICK_SLAB = BLOCKS.register("nyxite_brick_slab", + () -> new net.minecraft.world.level.block.SlabBlock(nyxiteProperties())); + + + public static final DeferredBlock NYXITE_BRICK_WALL = BLOCKS.register("nyxite_brick_wall", + () -> new net.minecraft.world.level.block.WallBlock(nyxiteProperties())); + + + public static final DeferredBlock SHELLSTONE = BLOCKS.register("shellstone", + () -> new Block(AntarchyObjects.shellstoneProperties())); + + + public static final DeferredBlock POLISHED_SHELLSTONE = BLOCKS.register("polished_shellstone", + () -> new Block(AntarchyObjects.shellstoneProperties())); + + + public static final DeferredBlock SHELLSTONE_BRICKS = BLOCKS.register("shellstone_bricks", + () -> new Block(AntarchyObjects.shellstoneProperties())); + + + public static final DeferredBlock CHISELED_SHELLSTONE = BLOCKS.register("chiseled_shellstone", + () -> new Block(AntarchyObjects.shellstoneProperties())); + + + public static final DeferredBlock MOSSY_SHELLSTONE_BRICKS = BLOCKS.register("mossy_shellstone_bricks", + () -> new Block(AntarchyObjects.shellstoneProperties())); + + + public static final DeferredBlock CRACKED_SHELLSTONE_BRICKS = BLOCKS.register("cracked_shellstone_bricks", + () -> new Block(AntarchyObjects.shellstoneProperties())); + + + public static final DeferredBlock MOSSY_SHELLSTONE_BRICK_STAIRS = BLOCKS.register("mossy_shellstone_brick_stairs", + () -> new net.minecraft.world.level.block.StairBlock(MOSSY_SHELLSTONE_BRICKS.get().defaultBlockState(), AntarchyObjects.shellstoneProperties())); + + + public static final DeferredBlock MOSSY_SHELLSTONE_BRICK_SLAB = BLOCKS.register("mossy_shellstone_brick_slab", + () -> new net.minecraft.world.level.block.SlabBlock(AntarchyObjects.shellstoneProperties())); + + + public static final DeferredBlock MOSSY_SHELLSTONE_BRICK_WALL = BLOCKS.register("mossy_shellstone_brick_wall", + () -> new net.minecraft.world.level.block.WallBlock(AntarchyObjects.shellstoneProperties())); + + + public static final DeferredBlock SHELLSTONE_STAIRS = BLOCKS.register("shellstone_stairs", + () -> new net.minecraft.world.level.block.StairBlock(SHELLSTONE.get().defaultBlockState(), AntarchyObjects.shellstoneProperties())); + + + public static final DeferredBlock SHELLSTONE_SLAB = BLOCKS.register("shellstone_slab", + () -> new net.minecraft.world.level.block.SlabBlock(AntarchyObjects.shellstoneProperties())); + + + public static final DeferredBlock SHELLSTONE_WALL = BLOCKS.register("shellstone_wall", + () -> new net.minecraft.world.level.block.WallBlock(AntarchyObjects.shellstoneProperties())); + + + public static final DeferredBlock POLISHED_SHELLSTONE_STAIRS = BLOCKS.register("polished_shellstone_stairs", + () -> new net.minecraft.world.level.block.StairBlock(POLISHED_SHELLSTONE.get().defaultBlockState(), AntarchyObjects.shellstoneProperties())); + + + public static final DeferredBlock POLISHED_SHELLSTONE_SLAB = BLOCKS.register("polished_shellstone_slab", + () -> new net.minecraft.world.level.block.SlabBlock(AntarchyObjects.shellstoneProperties())); + + + public static final DeferredBlock POLISHED_SHELLSTONE_WALL = BLOCKS.register("polished_shellstone_wall", + () -> new net.minecraft.world.level.block.WallBlock(AntarchyObjects.shellstoneProperties())); + + + public static final DeferredBlock SHELLSTONE_BRICK_STAIRS = BLOCKS.register("shellstone_brick_stairs", + () -> new net.minecraft.world.level.block.StairBlock(SHELLSTONE_BRICKS.get().defaultBlockState(), AntarchyObjects.shellstoneProperties())); + + + public static final DeferredBlock SHELLSTONE_BRICK_SLAB = BLOCKS.register("shellstone_brick_slab", + () -> new net.minecraft.world.level.block.SlabBlock(AntarchyObjects.shellstoneProperties())); + + + public static final DeferredBlock SHELLSTONE_BRICK_WALL = BLOCKS.register("shellstone_brick_wall", + () -> new net.minecraft.world.level.block.WallBlock(AntarchyObjects.shellstoneProperties())); + + + public static final DeferredBlock TRIFFID_GOO_BLOCK = BLOCKS.register("triffid_goo_block", + () -> new com.craisinlord.antarchy.content.block.TriffidGooBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SLIME_BLOCK).noOcclusion().isViewBlocking((s, l, p) -> false).isSuffocating((s, l, p) -> false))); + + + public static final DeferredBlock CLOUD_BLOCK = BLOCKS.register("cloud_block", + () -> new com.craisinlord.antarchy.content.block.CloudBlock( + AntarchyFabricItems::cloudBucketItem, + BlockBehaviour.Properties.ofFullCopy(Blocks.POWDER_SNOW).noLootTable().noOcclusion() + )); + + + public static final DeferredBlock ELYTHIA_PORTAL = BLOCKS.register("elythia_portal", + () -> new AntDimensionPortalBlock(PermanentPortalType.ELYTHIA, portalProperties())); + + + public static final DeferredBlock THORAXIS_PORTAL = BLOCKS.register("thoraxis_portal", + () -> new AntDimensionPortalBlock(PermanentPortalType.THORAXIS, portalProperties())); + + + public static final DeferredBlock PALE_NYXITE = BLOCKS.register("pale_nyxite", + () -> new Block(nyxiteProperties())); + + + public static final DeferredBlock NYXITE_SPIKE = BLOCKS.register("nyxite_spike", + () -> new NyxiteSpikeBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.POINTED_DRIPSTONE))); + + + public static final DeferredBlock POTENT_NYXITE = BLOCKS.register("potent_nyxite", + () -> new PotentNyxiteBlock( + AntarchyFabricBlocks::potentNyxiteBlockEntityType, + BlockBehaviour.Properties.ofFullCopy(Blocks.NETHERRACK).lightLevel(state -> 3) + )); + + + public static final DeferredBlock UMBRAL_MOSS_BLOCK = BLOCKS.register("umbral_moss_block", + () -> new UmbralMossBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.MOSS_BLOCK))); + + + public static final DeferredBlock UMBRAL_MOSS_CARPET = BLOCKS.register("umbral_moss_carpet", + () -> new UmbralMossCarpetBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.MOSS_CARPET).noOcclusion())); + + + public static final DeferredBlock BLUSH_MOSS_BLOCK = BLOCKS.register("blush_moss_block", + () -> new BlushMossBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.MOSS_BLOCK))); + + + public static final DeferredBlock BLUSH_MOSS_CARPET = BLOCKS.register("blush_moss_carpet", + () -> new BlushMossCarpetBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.MOSS_CARPET).noOcclusion())); + + + public static final DeferredBlock DREAM_TORCH = BLOCKS.register("dream_torch", + () -> new DreamTorchBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SOUL_TORCH))); + + + public static final DeferredBlock DREAM_WALL_TORCH = BLOCKS.register("dream_wall_torch", + () -> new DreamWallTorchBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SOUL_WALL_TORCH))); + + + public static final DeferredBlock DREAM_LANTERN = BLOCKS.register("dream_lantern", + () -> new net.minecraft.world.level.block.LanternBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SOUL_LANTERN))); + + + public static final DeferredBlock DREAM_CAMPFIRE = BLOCKS.register("dream_campfire", + () -> new DreamCampfireBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SOUL_CAMPFIRE))); + + + public static final DeferredBlock DREAM_FIRE = BLOCKS.register("dream_fire", + () -> new DreamFireBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SOUL_FIRE))); + + + public static final DeferredBlock DREAM_CEILING_FIRE = BLOCKS.register("dream_fire_ceiling", + () -> new DreamCeilingFireBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SOUL_FIRE))); + + + public static final DeferredBlock BED_BUG_EGG = BLOCKS.register("bed_bug_egg", + () -> new BedBugEggBlock(BlockBehaviour.Properties.of() + .strength(0.15F) + .sound(SoundType.METAL) + .randomTicks() + .noOcclusion() + .noCollission() + .replaceable())); + + + public static final DeferredBlock WASP_NEST = BLOCKS.register("wasp_nest", + () -> new WaspNestBlock(AntarchyFabricBlocks::waspNestBlockEntityType, BlockBehaviour.Properties.ofFullCopy(Blocks.BEE_NEST))); + + + public static final DeferredBlock OURANWOOD_SQUIRREL_NEST = BLOCKS.register("ouranwood_squirrel_nest", + () -> new com.craisinlord.antarchy.content.block.OuranwoodSquirrelNestBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.COARSE_DIRT).noLootTable())); + + + public static final DeferredBlock BRUTALFLY_COCOON_SPAWNER = BLOCKS.register("brutalfly_cocoon_spawner", + () -> new com.craisinlord.antarchy.content.block.BrutalflyCocoonSpawnerBlock(BlockBehaviour.Properties.of().noCollission().instabreak().noLootTable())); + + + public static final DeferredBlock HUSHWEED = BLOCKS.register("hushweed", + () -> new HushweedBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.AZALEA).noCollission().noOcclusion())); + + + public static final DeferredBlock BILE_BLOCK = BLOCKS.register("bile", + () -> new BileLiquidBlock((net.minecraft.world.level.material.FlowingFluid) AntarchyFabricMisc.BILE.get(), BlockBehaviour.Properties.ofFullCopy(Blocks.WATER).lightLevel(state -> 5).noLootTable())); + + + public static final DeferredBlock ICHOR_BLOCK = BLOCKS.register("ichor", + () -> new LiquidBlock((net.minecraft.world.level.material.FlowingFluid) AntarchyFabricMisc.ICHOR.get(), BlockBehaviour.Properties.ofFullCopy(Blocks.WATER).noLootTable())); + + + public static final DeferredBlock ANTIWATER_BLOCK = BLOCKS.register("antiwater", + () -> new AntiwaterLiquidBlock((net.minecraft.world.level.material.FlowingFluid) AntarchyFabricMisc.ANTIWATER.get(), + BlockBehaviour.Properties.ofFullCopy(Blocks.WATER).noLootTable())); + + + public static final DeferredBlock LUMEN_BLOCK = BLOCKS.register("lumen", + () -> new LumenLiquidBlock((net.minecraft.world.level.material.FlowingFluid) AntarchyFabricMisc.LUMEN.get(), + BlockBehaviour.Properties.ofFullCopy(Blocks.WATER).lightLevel(state -> 9).noLootTable())); + + + public static final DeferredBlock LUMEN_FROGLIGHT = BLOCKS.register("lumen_froglight", + () -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.OCHRE_FROGLIGHT))); + + + public static final DeferredBlock ROSEATE_FROGLIGHT = BLOCKS.register("roseate_froglight", + () -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.OCHRE_FROGLIGHT))); + + + public static final DeferredBlock RED_ANT_NEST = BLOCKS.register("red_ant_nest", + () -> new AntNestBlock( + AntarchyFabricEntities.RED_ANT, + AntarchyFabricBlocks::antNestBlockEntityType, + true, + BlockBehaviour.Properties.ofFullCopy(Blocks.MAGMA_BLOCK).lightLevel(state -> 3).noLootTable() + )); + + + public static final DeferredBlock BROWN_ANT_NEST = BLOCKS.register("brown_ant_nest", + () -> new AntNestBlock(AntarchyFabricEntities.BROWN_ANT, AntarchyFabricBlocks::antNestBlockEntityType, BlockBehaviour.Properties.ofFullCopy(Blocks.DIRT).noLootTable())); + + + public static final DeferredBlock RAINBOW_ANT_NEST = BLOCKS.register("rainbow_ant_nest", + () -> new AntNestBlock(AntarchyFabricEntities.RAINBOW_ANT, AntarchyFabricBlocks::antNestBlockEntityType, BlockBehaviour.Properties.ofFullCopy(Blocks.DIRT).noLootTable())); + + + public static final DeferredBlock URANIUM_ORE = BLOCKS.register("uranium_ore", + () -> createOre(Blocks.EMERALD_ORE, 4, 8)); + + + public static final DeferredBlock DEEPSLATE_URANIUM_ORE = BLOCKS.register("deepslate_uranium_ore", + () -> createOre(Blocks.DEEPSLATE_EMERALD_ORE, 4, 8)); + + + public static final DeferredBlock TITANIUM_ORE = BLOCKS.register("titanium_ore", + () -> createOre(Blocks.DIAMOND_ORE, 4, 8)); + + + public static final DeferredBlock DEEPSLATE_TITANIUM_ORE = BLOCKS.register("deepslate_titanium_ore", + () -> createOre(Blocks.DEEPSLATE_DIAMOND_ORE, 4, 8)); + + + public static final DeferredBlock URANIUM_BLOCK = BLOCKS.register("uranium_block", + () -> createStorageBlock(Blocks.EMERALD_BLOCK)); + + + public static final DeferredBlock TITANIUM_BLOCK = BLOCKS.register("titanium_block", + () -> createStorageBlock(Blocks.DIAMOND_BLOCK)); + + + public static final DeferredBlock RAW_URANIUM_BLOCK = BLOCKS.register("raw_uranium_block", + () -> createRawStorageBlock(Blocks.RAW_GOLD_BLOCK)); + + + public static final DeferredBlock RAW_TITANIUM_BLOCK = BLOCKS.register("raw_titanium_block", + () -> createRawStorageBlock(Blocks.RAW_IRON_BLOCK)); + + + public static final DeferredBlock CUT_URANIUM = BLOCKS.register("cut_uranium", + () -> createHorizontalFacingStorageBlock(Blocks.CUT_COPPER)); + + + public static final DeferredBlock CUT_TITANIUM = BLOCKS.register("cut_titanium", + () -> createHorizontalFacingStorageBlock(Blocks.CUT_COPPER)); + + + public static final DeferredBlock CUT_URANIUM_SLAB = BLOCKS.register("cut_uranium_slab", + () -> new net.minecraft.world.level.block.SlabBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.CUT_COPPER_SLAB))); + + + public static final DeferredBlock CUT_TITANIUM_SLAB = BLOCKS.register("cut_titanium_slab", + () -> new net.minecraft.world.level.block.SlabBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.CUT_COPPER_SLAB))); + + + public static final DeferredBlock CUT_URANIUM_STAIRS = BLOCKS.register("cut_uranium_stairs", + () -> new net.minecraft.world.level.block.StairBlock(CUT_URANIUM.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(Blocks.CUT_COPPER_STAIRS))); + + + public static final DeferredBlock CUT_TITANIUM_STAIRS = BLOCKS.register("cut_titanium_stairs", + () -> new net.minecraft.world.level.block.StairBlock(CUT_TITANIUM.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(Blocks.CUT_COPPER_STAIRS))); + + + public static final DeferredBlock CHISELED_URANIUM = BLOCKS.register("chiseled_uranium", + () -> createHorizontalFacingStorageBlock(Blocks.CHISELED_COPPER)); + + + public static final DeferredBlock CHISELED_TITANIUM = BLOCKS.register("chiseled_titanium", + () -> createHorizontalFacingStorageBlock(Blocks.CHISELED_COPPER)); + + + public static final DeferredBlock URANIUM_BULB = BLOCKS.register("uranium_bulb", + () -> new SignalSavingBulbBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.COPPER_BULB))); + + + public static final DeferredBlock TITANIUM_BULB = BLOCKS.register("titanium_bulb", + () -> new SignalSavingBulbBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.COPPER_BULB))); + + + public static final DeferredBlock URANIUM_DOOR = BLOCKS.register("uranium_door", + () -> new net.minecraft.world.level.block.DoorBlock(net.minecraft.world.level.block.state.properties.BlockSetType.IRON, BlockBehaviour.Properties.ofFullCopy(Blocks.IRON_DOOR))); + + + public static final DeferredBlock TITANIUM_DOOR = BLOCKS.register("titanium_door", + () -> new net.minecraft.world.level.block.DoorBlock(net.minecraft.world.level.block.state.properties.BlockSetType.IRON, BlockBehaviour.Properties.ofFullCopy(Blocks.IRON_DOOR))); + + + public static final DeferredBlock URANIUM_TRAPDOOR = BLOCKS.register("uranium_trapdoor", + () -> new net.minecraft.world.level.block.TrapDoorBlock(net.minecraft.world.level.block.state.properties.BlockSetType.IRON, BlockBehaviour.Properties.ofFullCopy(Blocks.IRON_TRAPDOOR))); + + + public static final DeferredBlock TITANIUM_TRAPDOOR = BLOCKS.register("titanium_trapdoor", + () -> new net.minecraft.world.level.block.TrapDoorBlock(net.minecraft.world.level.block.state.properties.BlockSetType.IRON, BlockBehaviour.Properties.ofFullCopy(Blocks.IRON_TRAPDOOR))); + + + public static final DeferredBlock URANIUM_BARS = BLOCKS.register("uranium_bars", + () -> new net.minecraft.world.level.block.IronBarsBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.IRON_BARS))); + + + public static final DeferredBlock TITANIUM_BARS = BLOCKS.register("titanium_bars", + () -> new net.minecraft.world.level.block.IronBarsBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.IRON_BARS))); + + + public static final DeferredBlock ANTIMETAL = BLOCKS.register("antimetal", + () -> new net.minecraft.world.level.block.RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.BASALT))); + + + public static final DeferredBlock POLISHED_ANTIMETAL = BLOCKS.register("polished_antimetal", + () -> new net.minecraft.world.level.block.RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.POLISHED_BASALT))); + + + public static final DeferredBlock ANTIMETAL_SCAFFOLDING = BLOCKS.register("antimetal_scaffolding", + () -> new com.craisinlord.antarchy.content.block.AntimetalScaffoldingBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SCAFFOLDING))); + + + public static final DeferredBlock CORNEA_STALK = BLOCKS.register("cornea_stalk", + () -> new CorneaStalkBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SWEET_BERRY_BUSH).randomTicks())); + + + public static final DeferredBlock CORN_CROP = BLOCKS.register("corn_crop", + () -> new CornCropBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.WHEAT).randomTicks().noCollission().noOcclusion())); + + + public static final DeferredBlock WILD_CORN = BLOCKS.register("wild_corn", + () -> new WildCornBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.WHEAT).noCollission().noOcclusion())); + + + public static final DeferredBlock FALLEN_KING_CROWN_BLOCK = BLOCKS.register("fallen_king_crown", + () -> new Block(BlockBehaviour.Properties.of() + .strength(0.2F) + .sound(SoundType.METAL) + .noOcclusion() + .isSuffocating((state, level, pos) -> false) + .isViewBlocking((state, level, pos) -> false))); + + + public static final DeferredBlock SMALL_BLOOD_CRYSTAL_BUD = BLOCKS.register("small_blood_crystal_bud", + () -> new AmethystClusterBlock(3.0F, 4.0F, BlockBehaviour.Properties.ofFullCopy(Blocks.SMALL_AMETHYST_BUD))); + + + public static final DeferredBlock MEDIUM_BLOOD_CRYSTAL_BUD = BLOCKS.register("medium_blood_crystal_bud", + () -> new AmethystClusterBlock(4.0F, 3.0F, BlockBehaviour.Properties.ofFullCopy(Blocks.MEDIUM_AMETHYST_BUD))); + + + public static final DeferredBlock LARGE_BLOOD_CRYSTAL_BUD = BLOCKS.register("large_blood_crystal_bud", + () -> new AmethystClusterBlock(5.0F, 3.0F, BlockBehaviour.Properties.ofFullCopy(Blocks.LARGE_AMETHYST_BUD))); + + + public static final DeferredBlock BUDDING_BLOOD_CRYSTAL = BLOCKS.register("budding_blood_crystal", + () -> new BuddingBloodCrystalBlock( + BlockBehaviour.Properties.ofFullCopy(Blocks.BUDDING_AMETHYST), + AntarchyFabricBlocks::smallBloodCrystalBudBlock, + AntarchyFabricBlocks::mediumBloodCrystalBudBlock, + AntarchyFabricBlocks::largeBloodCrystalBudBlock, + AntarchyFabricBlocks::bloodCrystalCrystalBlock + )); + + + public static final DeferredBlock BLOOD_CRYSTAL = BLOCKS.register("blood_crystal_block", + () -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.AMETHYST_BLOCK))); + + + public static final DeferredBlock BLOOD_CRYSTAL_CRYSTAL = BLOCKS.register("blood_crystal_cluster", + () -> new AmethystClusterBlock(7.0F, 3.0F, BlockBehaviour.Properties.ofFullCopy(Blocks.AMETHYST_CLUSTER))); + + + public static final DeferredBlock DREAM_SAND = BLOCKS.register("dream_sand", + () -> new DreamSandBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SAND))); + + + public static final DeferredBlock DREAM_SANDSTONE = BLOCKS.register("dream_sandstone", + () -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.SANDSTONE))); + + + public static final DeferredBlock CHISELED_DREAM_SANDSTONE = BLOCKS.register("chiseled_dream_sandstone", + () -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.CHISELED_SANDSTONE))); + + + public static final DeferredBlock CUT_DREAM_SANDSTONE = BLOCKS.register("cut_dream_sandstone", + () -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.CUT_SANDSTONE))); + + + public static final DeferredBlock SMOOTH_DREAM_SANDSTONE = BLOCKS.register("smooth_dream_sandstone", + () -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.SMOOTH_SANDSTONE))); + + + public static final DeferredBlock DREAM_SANDSTONE_STAIRS = BLOCKS.register("dream_sandstone_stairs", + () -> new net.minecraft.world.level.block.StairBlock(DREAM_SANDSTONE.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(Blocks.SANDSTONE_STAIRS))); + + + public static final DeferredBlock DREAM_SANDSTONE_SLAB = BLOCKS.register("dream_sandstone_slab", + () -> new net.minecraft.world.level.block.SlabBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SANDSTONE_SLAB))); + + + public static final DeferredBlock DREAM_SANDSTONE_WALL = BLOCKS.register("dream_sandstone_wall", + () -> new net.minecraft.world.level.block.WallBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SANDSTONE_WALL))); + + + public static final DeferredBlock SMOOTH_DREAM_SANDSTONE_STAIRS = BLOCKS.register("smooth_dream_sandstone_stairs", + () -> new net.minecraft.world.level.block.StairBlock(SMOOTH_DREAM_SANDSTONE.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(Blocks.SMOOTH_SANDSTONE_STAIRS))); + + + public static final DeferredBlock SMOOTH_DREAM_SANDSTONE_SLAB = BLOCKS.register("smooth_dream_sandstone_slab", + () -> new net.minecraft.world.level.block.SlabBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SMOOTH_SANDSTONE_SLAB))); + + + public static final DeferredBlock CUT_DREAM_SANDSTONE_SLAB = BLOCKS.register("cut_dream_sandstone_slab", + () -> new net.minecraft.world.level.block.SlabBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.CUT_SANDSTONE_SLAB))); + + + public static final DeferredBlock DEAD_STAR_CORAL_BLOCK = BLOCKS.register("dead_star_coral_block", + () -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.TUBE_CORAL_BLOCK))); + + + public static final DeferredBlock DEAD_STAR_CORAL = BLOCKS.register("dead_star_coral", + () -> new net.minecraft.world.level.block.BaseCoralPlantBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.TUBE_CORAL))); + + + public static final DeferredBlock DEAD_STAR_CORAL_FAN = BLOCKS.register("dead_star_coral_fan", + () -> new net.minecraft.world.level.block.BaseCoralFanBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.TUBE_CORAL_FAN))); + + + public static final DeferredBlock DEAD_STAR_CORAL_WALL_FAN = BLOCKS.register("dead_star_coral_wall_fan", + () -> new net.minecraft.world.level.block.BaseCoralWallFanBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.TUBE_CORAL_WALL_FAN))); + + + public static final DeferredBlock STAR_CORAL_BLOCK = BLOCKS.register("star_coral_block", + () -> new StarCoralBlock(DEAD_STAR_CORAL_BLOCK.get(), BlockBehaviour.Properties.ofFullCopy(Blocks.TUBE_CORAL_BLOCK).lightLevel(state -> 8))); + + + public static final DeferredBlock STAR_CORAL = BLOCKS.register("star_coral", + () -> new StarCoralPlantBlock(DEAD_STAR_CORAL.get(), BlockBehaviour.Properties.ofFullCopy(Blocks.TUBE_CORAL).lightLevel(state -> 8))); + + + public static final DeferredBlock STAR_CORAL_FAN = BLOCKS.register("star_coral_fan", + () -> new StarCoralFanBlock(DEAD_STAR_CORAL_FAN.get(), BlockBehaviour.Properties.ofFullCopy(Blocks.TUBE_CORAL_FAN).lightLevel(state -> 8))); + + + public static final DeferredBlock STAR_CORAL_WALL_FAN = BLOCKS.register("star_coral_wall_fan", + () -> new StarCoralWallFanBlock(DEAD_STAR_CORAL_WALL_FAN.get(), BlockBehaviour.Properties.ofFullCopy(Blocks.TUBE_CORAL_WALL_FAN).lightLevel(state -> 8))); + + + public static final DeferredHolder, BlockEntityType> ANT_NEST_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register("ant_nest", + () -> BlockEntityType.Builder.of( + AntNestBlockEntity::new, + RED_ANT_NEST.get(), + BROWN_ANT_NEST.get(), + RAINBOW_ANT_NEST.get() + ).build(null)); + + + public static final DeferredHolder, BlockEntityType> DREAM_CAMPFIRE_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register("dream_campfire", + () -> BlockEntityType.Builder.of( + DreamCampfireBlockEntity::new, + DREAM_CAMPFIRE.get() + ).build(null)); + + + public static final DeferredHolder, BlockEntityType> WASP_NEST_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register("wasp_nest", + () -> BlockEntityType.Builder.of( + WaspNestBlockEntity::new, + WASP_NEST.get() + ).build(null)); + + + public static final DeferredHolder, BlockEntityType> HUSHWEED_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register("hushweed", + () -> BlockEntityType.Builder.of( + HushweedBlockEntity::new, + HUSHWEED.get() + ).build(null)); + + + public static final DeferredHolder, BlockEntityType> POTENT_NYXITE_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register("potent_nyxite", + () -> BlockEntityType.Builder.of( + (pos, state) -> new PotentNyxiteBlockEntity(pos, state, AntarchyFabricBlocks::potentNyxiteBlockEntityType), + POTENT_NYXITE.get() + ).build(null)); + + + + private static BlockEntityType antNestBlockEntityType() { + return ANT_NEST_BLOCK_ENTITY.get(); + } + + + + private static BlockEntityType waspNestBlockEntityType() { + return WASP_NEST_BLOCK_ENTITY.get(); + } + + + + private static BlockEntityType potentNyxiteBlockEntityType() { + return POTENT_NYXITE_BLOCK_ENTITY.get(); + } + + + + private static Block smallBloodCrystalBudBlock() { + return SMALL_BLOOD_CRYSTAL_BUD.get(); + } + + + + private static Block mediumBloodCrystalBudBlock() { + return MEDIUM_BLOOD_CRYSTAL_BUD.get(); + } + + + + private static Block largeBloodCrystalBudBlock() { + return LARGE_BLOOD_CRYSTAL_BUD.get(); + } + + + + private static Block bloodCrystalCrystalBlock() { + return BLOOD_CRYSTAL_CRYSTAL.get(); + } + + + + + private static Block createDirtOre(Block copyFrom) { + return new Block(dirtOreProperties()); + } + + + + private static Block createDirtOre(Block copyFrom, int minExperience, int maxExperience) { + return new DropExperienceBlock(UniformInt.of(minExperience, maxExperience), dirtOreProperties()); + } + + + + private static BlockBehaviour.Properties dirtOreProperties() { + return BlockBehaviour.Properties.ofFullCopy(Blocks.DIRT) + .sound(SoundType.ROOTED_DIRT) + .strength(0.65F, 0.8F) + .requiresCorrectToolForDrops(); + } + + + + private static BlockBehaviour.Properties nyxiteProperties() { + return BlockBehaviour.Properties.ofFullCopy(Blocks.NETHERRACK); + } + + + + private static BlockBehaviour.Properties portalProperties() { + return BlockBehaviour.Properties.of() + .strength(-1.0F) + .noCollission() + .noOcclusion() + .lightLevel(state -> 11) + .noLootTable() + .isSuffocating((state, level, pos) -> false) + .isViewBlocking((state, level, pos) -> false); + } + + + + private static Block createOre(Block copyFrom) { + return new Block(BlockBehaviour.Properties.ofFullCopy(copyFrom).requiresCorrectToolForDrops()); + } + + + + private static Block createOre(Block copyFrom, int minExperience, int maxExperience) { + return new DropExperienceBlock(UniformInt.of(minExperience, maxExperience), BlockBehaviour.Properties.ofFullCopy(copyFrom).requiresCorrectToolForDrops()); + } + + + + private static Block createStorageBlock(Block copyFrom) { + return new Block(BlockBehaviour.Properties.ofFullCopy(copyFrom).requiresCorrectToolForDrops()); + } + + + + private static Block createHorizontalFacingStorageBlock(Block copyFrom) { + return new SimpleHorizontalFacingBlock(BlockBehaviour.Properties.ofFullCopy(copyFrom).requiresCorrectToolForDrops()); + } + + + + private static final class SimpleHorizontalFacingBlock extends HorizontalDirectionalBlock { + private static final MapCodec CODEC = simpleCodec(SimpleHorizontalFacingBlock::new); + + private SimpleHorizontalFacingBlock(BlockBehaviour.Properties properties) { + super(properties); + registerDefaultState(stateDefinition.any().setValue(FACING, Direction.NORTH)); + } + + @Override + protected MapCodec codec() { + return CODEC; + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(FACING); + } + + @Override + public BlockState getStateForPlacement(BlockPlaceContext context) { + return defaultBlockState().setValue(FACING, context.getHorizontalDirection().getOpposite()); + } + + @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))); + } + } + + + + private static Block createRawStorageBlock(Block copyFrom) { + return new Block(BlockBehaviour.Properties.ofFullCopy(copyFrom) + .strength(3.5F, 6.0F) + .requiresCorrectToolForDrops()); + } + + + public static void register() { + BLOCKS.register(); + BLOCK_ENTITY_TYPES.register(); + } + +} diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricCreativeModeTabs.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricCreativeModeTabs.java new file mode 100644 index 00000000..2602b2e7 --- /dev/null +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricCreativeModeTabs.java @@ -0,0 +1,347 @@ +package com.craisinlord.antarchy.fabric.registry; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.compat.infinity.InfinityCompat; +import com.craisinlord.antarchy.compat.infinity.InfinityCompatVersion; +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.CreativeTabOrder; +import com.craisinlord.antarchy.content.block.*; +import com.craisinlord.antarchy.content.AntarchySoundEvents; +import com.craisinlord.antarchy.content.item.BloodCrystalArmorItem; +import com.craisinlord.antarchy.content.item.BloodCrystalAppleItem; +import com.craisinlord.antarchy.content.item.BloodCrystalKatanaItem; +import com.craisinlord.antarchy.content.block.entity.AntNestBlockEntity; +import com.craisinlord.antarchy.content.block.entity.DreamCampfireBlockEntity; +import com.craisinlord.antarchy.content.block.entity.HushweedBlockEntity; +import com.craisinlord.antarchy.content.block.entity.PotentNyxiteBlockEntity; +import com.craisinlord.antarchy.content.block.entity.WaspNestBlockEntity; +import com.craisinlord.antarchy.content.fluid.BileLiquidBlock; +import com.craisinlord.antarchy.content.fluid.LumenLiquidBlock; +import com.craisinlord.antarchy.content.worldgen.ants.BrownAntNestFeature; +import com.craisinlord.antarchy.content.worldgen.ants.RainbowAntNestFeature; +import com.craisinlord.antarchy.content.worldgen.ants.RedAntNestFeature; +import com.craisinlord.antarchy.content.worldgen.ants.TermiteNestFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynBileCystFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynBileVeinFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynCreepvineFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynWallAmberMossFeature; +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.NyxiteSpikeFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.PotentNyxiteFeature; +import com.craisinlord.antarchy.fabric.content.fluid.AntiwaterFluid; +import com.craisinlord.antarchy.fabric.content.fluid.AntiwaterLiquidBlock; +import com.craisinlord.antarchy.fabric.item.DeferredSpawnEggItem; +import com.craisinlord.antarchy.fabric.network.AntarchyFabricNetworking; +import com.craisinlord.antarchy.fabric.registry.DeferredBlock; +import com.craisinlord.antarchy.fabric.registry.DeferredHolder; +import com.craisinlord.antarchy.fabric.registry.DeferredItem; +import com.craisinlord.antarchy.fabric.registry.DeferredRegister; +import com.craisinlord.antarchy.content.effect.DreadMobEffect; +import com.craisinlord.antarchy.content.effect.GrowthMobEffect; +import com.craisinlord.antarchy.content.effect.InvertedMobEffect; +import com.craisinlord.antarchy.content.effect.ParalyzedMobEffect; +import com.craisinlord.antarchy.content.effect.ShrinkMobEffect; +import com.craisinlord.antarchy.content.effect.StinkyMobEffect; +import com.craisinlord.antarchy.content.entity.AppleCowEntityVariants.AppleCow; +import com.craisinlord.antarchy.content.entity.AppleCowEntityVariants.EnchantedGoldenAppleCow; +import com.craisinlord.antarchy.content.entity.AppleCowEntityVariants.GoldenAppleCow; +import com.craisinlord.antarchy.content.entity.cloud_shark.CloudSharkEntity; +import com.craisinlord.antarchy.content.entity.BedBugEntity; +import com.craisinlord.antarchy.content.entity.ButterflyEntity; +import com.craisinlord.antarchy.content.entity.CaterpillarEntity; +import com.craisinlord.antarchy.content.entity.DiamondMinecartEntity; +import com.craisinlord.antarchy.content.entity.DrTrayaurusEntity; +import com.craisinlord.antarchy.content.entity.brutalfly.BrutalflyEntity; +import com.craisinlord.antarchy.content.entity.brutalfly.BrutalflyOrbEntity; +import com.craisinlord.antarchy.content.entity.EasterBunnyEntity; +import com.craisinlord.antarchy.content.entity.flying_squirrel.FlyingSquirrelEntity; +import com.craisinlord.antarchy.content.entity.ReverieEntity; +import com.craisinlord.antarchy.content.entity.MissileSquidEntity; +import com.craisinlord.antarchy.content.entity.lucid.LucidEntity; +import com.craisinlord.antarchy.content.entity.lucid.LucidBoltEntity; +import com.craisinlord.antarchy.content.entity.lucid.LucidEyeProjectileEntity; +import com.craisinlord.antarchy.content.entity.HushProjectileEntity; +import com.craisinlord.antarchy.content.entity.JumpyBugEntity; +import com.craisinlord.antarchy.content.entity.StinkBugEntity; +import com.craisinlord.antarchy.content.entity.OuranwoodBoatEntity; +import com.craisinlord.antarchy.content.entity.OuranwoodChestBoatEntity; +import com.craisinlord.antarchy.content.entity.AlphaMantisEntity; +import com.craisinlord.antarchy.content.entity.MantisEntity; +import com.craisinlord.antarchy.content.entity.RollyPollyEntity; +import com.craisinlord.antarchy.content.entity.basilisk.BasiliskEntity; +import com.craisinlord.antarchy.content.entity.EmperorScorpionEntity; +import com.craisinlord.antarchy.content.entity.ScorpionEntity; +import com.craisinlord.antarchy.content.item.LucidEyeItem; +import com.craisinlord.antarchy.content.item.LucidPearlItem; +import com.craisinlord.antarchy.content.entity.nightmare.NightmareEntity; +import com.craisinlord.antarchy.content.entity.ToreterrorEntity; +import com.craisinlord.antarchy.content.entity.WaterBombEntity; +import com.craisinlord.antarchy.content.item.PrimordialArmorItem; +import com.craisinlord.antarchy.content.item.WaterCannonItem; +import com.craisinlord.antarchy.content.entity.kraken.KrakenEntity; +import com.craisinlord.antarchy.content.entity.OctopusBombEntity; +import com.craisinlord.antarchy.content.entity.MolevoreEntity; +import com.craisinlord.antarchy.content.entity.MolewormEntity; +import com.craisinlord.antarchy.content.entity.BomberEntity; +import com.craisinlord.antarchy.content.entity.SizeRayProjectileEntity; +import com.craisinlord.antarchy.content.entity.TriffidEntity; +import com.craisinlord.antarchy.content.entity.WaspEntity; +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 com.craisinlord.antarchy.content.item.BattleAxeItem; +import com.craisinlord.antarchy.content.item.BasiliskDaggerItem; +import com.craisinlord.antarchy.content.item.BigBerthaItem; +import com.craisinlord.antarchy.content.item.AntimetalBlockItem; +import com.craisinlord.antarchy.fabric.item.AntimetalScaffoldingItem; +import com.craisinlord.antarchy.content.item.CloudSharkFinSoupItem; +import com.craisinlord.antarchy.content.item.CorneaEarItem; +import com.craisinlord.antarchy.content.item.GravityGunItem; +import com.craisinlord.antarchy.content.item.MinersDreamItem; +import com.craisinlord.antarchy.content.item.DuctTapeBlockItem; +import com.craisinlord.antarchy.content.item.BrutalflyElytraItem; +import com.craisinlord.antarchy.content.item.MobComingSoonTooltipItem; +import com.craisinlord.antarchy.content.item.MogglesItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimateAxeItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimateHoeItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimatePickaxeItem; +import com.craisinlord.antarchy.content.item.ultimate.UtlimateShovelItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimateSwordItem; +import com.craisinlord.antarchy.content.item.DiamondMinecartItem; +import com.craisinlord.antarchy.content.item.ReverieBottleItem; +import com.craisinlord.antarchy.content.item.ScorpionWhipItem; +import com.craisinlord.antarchy.content.item.ScorpionWhipTetherSync; +import com.craisinlord.antarchy.content.network.HerculesBeetleImpactShakeSync; +import com.craisinlord.antarchy.content.item.SizeRayItem; +import com.craisinlord.antarchy.content.item.SquidzookaItem; +import com.craisinlord.antarchy.content.item.SimpleToolTier; +import com.craisinlord.antarchy.content.item.ultimate.UltimateArmorItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimateBowItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimateCrossbowItem; +import com.craisinlord.antarchy.content.item.NightmareArmorItem; +import com.craisinlord.antarchy.content.item.NightmareSwordItem; +import com.craisinlord.antarchy.content.item.OuranwoodBoatOnlyItem; +import com.craisinlord.antarchy.content.item.OuranwoodChestBoatItem; +import com.craisinlord.antarchy.content.item.RainbowSugarItem; +import com.craisinlord.antarchy.content.worldgen.elythia.CoralSpikeFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaBiomeSource; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaRiverCarveFunction; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaFloraFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaLargeTuffBoulderFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.PeachForestMossyBoulderFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.PeachForestPondConfiguration; +import com.craisinlord.antarchy.content.worldgen.elythia.PeachForestPondFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaPondFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaSurfaceCoverFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaTuffBoulderFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaUndergroundFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.MolewormCaveEntranceFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.MolewormSurfaceMoundsFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.BrutalflyCocoonFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.LumenPoolFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.LumenLilyPadFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.LumenStreamFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.MolewormTunnelsFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.MolewormWarrensFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.OuranwoodCocoonTreeFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.OuranwoodTreeConfiguration; +import com.craisinlord.antarchy.content.worldgen.elythia.OuranwoodTreeFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.PeachTreeConfiguration; +import com.craisinlord.antarchy.content.worldgen.elythia.PeachTreeFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.TriffidPatchFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynEggPatchFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.ChitenSpikeConfiguration; +import com.craisinlord.antarchy.content.worldgen.cavaryn.ChitenSpikeFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.BedBugNestFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.BedBugSurfaceClusterFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.CloudSeaCalciteFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.LucidAntiwaterPoolFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisBiomeSource; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisDuneConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisDuneFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisFissureConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisFissureFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisBloodCrystalConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisBloodCrystalFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisAntiwaterPoolConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisAntiwaterPoolFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisRibColumnsConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisRibColumnsFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisSpikeConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisSpikeFeature; +import com.craisinlord.antarchy.content.client.particle.InvertedGeyserBaseParticleOptions; +import com.craisinlord.antarchy.content.client.particle.InvertedGeyserParticleOptions; +import com.craisinlord.antarchy.content.portal.PermanentPortalType; +import java.util.List; +import java.util.ArrayList; +import java.util.Comparator; +import com.mojang.serialization.MapCodec; +import net.fabricmc.fabric.api.object.builder.v1.entity.FabricDefaultAttributeRegistry; +import net.fabricmc.fabric.api.registry.FabricBrewingRecipeRegistryBuilder; +import net.minecraft.advancements.critereon.EntitySubPredicate; +import net.minecraft.core.Holder; +import net.minecraft.core.registries.Registries; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.world.item.alchemy.Potion; +import net.minecraft.world.item.alchemy.PotionContents; +import net.minecraft.world.effect.MobEffect; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.tags.TagKey; +import net.minecraft.world.damagesource.DamageType; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.MobCategory; +import net.minecraft.world.entity.ai.attributes.Attribute; +import net.minecraft.world.entity.ai.attributes.AttributeSupplier; +import net.minecraft.world.entity.ai.attributes.Attributes; +import net.minecraft.world.entity.animal.Cow; +import net.minecraft.world.entity.animal.Rabbit; +import net.minecraft.world.entity.SpawnPlacementTypes; +import net.minecraft.world.entity.SpawnPlacements; +import net.minecraft.world.entity.npc.Villager; +import net.minecraft.world.entity.monster.Monster; +import net.minecraft.world.item.ArmorItem; +import net.minecraft.world.item.ArmorMaterial; +import net.minecraft.world.item.BucketItem; +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.Rarity; +import net.minecraft.world.item.StandingAndWallBlockItem; +import net.minecraft.world.food.FoodProperties; +import net.minecraft.world.item.Tier; +import net.minecraft.world.item.Tiers; +import net.minecraft.world.item.alchemy.Potions; +import net.minecraft.world.item.crafting.Ingredient; +import net.minecraft.world.flag.FeatureFlags; +import net.minecraft.core.Direction; +import net.minecraft.core.particles.ParticleType; +import net.minecraft.core.particles.SimpleParticleType; +import net.minecraft.util.valueproviders.UniformInt; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.AmethystClusterBlock; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.DropExperienceBlock; +import net.minecraft.world.level.block.GlowLichenBlock; +import net.minecraft.world.level.block.HorizontalDirectionalBlock; +import net.minecraft.world.level.block.LiquidBlock; +import net.minecraft.world.level.block.RotatedPillarBlock; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.block.VineBlock; +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.biome.BiomeSource; +import net.minecraft.world.level.levelgen.DensityFunction; +import net.minecraft.world.level.levelgen.feature.Feature; +import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; +import net.minecraft.world.level.levelgen.feature.configurations.SimpleBlockConfiguration; +import net.minecraft.world.level.levelgen.Heightmap; +import net.fabricmc.loader.api.FabricLoader; +import net.minecraft.world.level.material.Fluid; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.block.Mirror; +import net.minecraft.world.level.block.Rotation; +import com.craisinlord.antarchy.fabric.AntarchyFabricContent; + +public final class AntarchyFabricCreativeModeTabs { + + public static final DeferredRegister CREATIVE_MODE_TABS = DeferredRegister.create(Registries.CREATIVE_MODE_TAB, Antarchy.MODID); + + + + public static final DeferredHolder ANTARCHY_TAB = CREATIVE_MODE_TABS.register("antarchy", + () -> CreativeModeTab.builder(CreativeModeTab.Row.TOP, 0) + .title(net.minecraft.network.chat.Component.translatable("itemGroup.antarchy.antarchy")) + .icon(() -> new ItemStack(AntarchyFabricItems.GRAVITY_GUN.get())) + .displayItems((parameters, output) -> populateCreativeTab(output)) + .build()); + + + + private static void populateCreativeTab(CreativeModeTab.Output output) { + ArrayList sortedItems = new ArrayList<>(); + for (var holder : AntarchyFabricItems.ITEMS.getEntries()) { + Item item = holder.get(); + if (item != Items.AIR) { + sortedItems.add(item); + } + } + sortedItems.sort(CreativeTabOrder.COMPARATOR); + sortedItems.forEach(item -> { + if (item == AntarchyFabricItems.GLIMMER_BOTTLE.get()) { + addGlimmerBottleVariants(output); + } else { + output.accept(item); + } + }); + addPotionVariants(output); + } + + + + private static void addGlimmerBottleVariants(CreativeModeTab.Output output) { + for (com.craisinlord.antarchy.content.entity.glimmer.GlimmerVariant variant : com.craisinlord.antarchy.content.entity.glimmer.GlimmerVariant.values()) { + output.accept(com.craisinlord.antarchy.content.item.GlimmerBottleItem.create(variant)); + } + } + + + + private static void addPotionVariants(CreativeModeTab.Output output) { + acceptPotionFamily(output, AntarchyFabricMisc.DREAD_POTION); + acceptPotionFamily(output, AntarchyFabricMisc.LONG_DREAD); + acceptPotionFamily(output, AntarchyFabricMisc.INVERSION); + acceptPotionFamily(output, AntarchyFabricMisc.LONG_INVERSION); + acceptPotionFamily(output, AntarchyFabricMisc.STINKY_POTION); + acceptPotionFamily(output, AntarchyFabricMisc.LONG_STINKY); + acceptPotionFamily(output, AntarchyFabricMisc.PARALYSIS); + acceptPotionFamily(output, AntarchyFabricMisc.LONG_PARALYSIS); + acceptPotionFamily(output, AntarchyFabricMisc.HASTE); + acceptPotionFamily(output, AntarchyFabricMisc.STRONG_HASTE); + acceptPotionFamily(output, AntarchyFabricMisc.SHRINKING); + acceptPotionFamily(output, AntarchyFabricMisc.STRONG_SHRINKING); + acceptPotionFamily(output, AntarchyFabricMisc.EXTREME_SHRINKING); + acceptPotionFamily(output, AntarchyFabricMisc.GROWING); + acceptPotionFamily(output, AntarchyFabricMisc.STRONG_GROWING); + acceptPotionFamily(output, AntarchyFabricMisc.EXTREME_GROWING); + } + + + + private static void acceptPotionFamily(CreativeModeTab.Output output, DeferredHolder potion) { + Holder holder = AntarchyFabricContent.potionHolder(potion); + output.accept(PotionContents.createItemStack(Items.POTION, holder)); + output.accept(PotionContents.createItemStack(Items.SPLASH_POTION, holder)); + output.accept(PotionContents.createItemStack(Items.LINGERING_POTION, holder)); + output.accept(PotionContents.createItemStack(Items.TIPPED_ARROW, holder)); + } + + + + private static int creativeTabGroup(Item item) { + return CreativeTabOrder.group(item); + } + + + + private static int creativeTabSubOrder(Item item) { + return CreativeTabOrder.subOrder(item); + } + + + public static void register() { + CREATIVE_MODE_TABS.register(); + } + +} diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricEntities.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricEntities.java new file mode 100644 index 00000000..f1f948e8 --- /dev/null +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricEntities.java @@ -0,0 +1,652 @@ +package com.craisinlord.antarchy.fabric.registry; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.compat.infinity.InfinityCompat; +import com.craisinlord.antarchy.compat.infinity.InfinityCompatVersion; +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.CreativeTabOrder; +import com.craisinlord.antarchy.content.block.*; +import com.craisinlord.antarchy.content.AntarchySoundEvents; +import com.craisinlord.antarchy.content.item.BloodCrystalArmorItem; +import com.craisinlord.antarchy.content.item.BloodCrystalAppleItem; +import com.craisinlord.antarchy.content.item.BloodCrystalKatanaItem; +import com.craisinlord.antarchy.content.block.entity.AntNestBlockEntity; +import com.craisinlord.antarchy.content.block.entity.DreamCampfireBlockEntity; +import com.craisinlord.antarchy.content.block.entity.HushweedBlockEntity; +import com.craisinlord.antarchy.content.block.entity.PotentNyxiteBlockEntity; +import com.craisinlord.antarchy.content.block.entity.WaspNestBlockEntity; +import com.craisinlord.antarchy.content.fluid.BileLiquidBlock; +import com.craisinlord.antarchy.content.fluid.LumenLiquidBlock; +import com.craisinlord.antarchy.content.worldgen.ants.BrownAntNestFeature; +import com.craisinlord.antarchy.content.worldgen.ants.RainbowAntNestFeature; +import com.craisinlord.antarchy.content.worldgen.ants.RedAntNestFeature; +import com.craisinlord.antarchy.content.worldgen.ants.TermiteNestFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynBileCystFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynBileVeinFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynCreepvineFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynWallAmberMossFeature; +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.NyxiteSpikeFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.PotentNyxiteFeature; +import com.craisinlord.antarchy.fabric.content.fluid.AntiwaterFluid; +import com.craisinlord.antarchy.fabric.content.fluid.AntiwaterLiquidBlock; +import com.craisinlord.antarchy.fabric.item.DeferredSpawnEggItem; +import com.craisinlord.antarchy.fabric.network.AntarchyFabricNetworking; +import com.craisinlord.antarchy.fabric.registry.DeferredBlock; +import com.craisinlord.antarchy.fabric.registry.DeferredHolder; +import com.craisinlord.antarchy.fabric.registry.DeferredItem; +import com.craisinlord.antarchy.fabric.registry.DeferredRegister; +import com.craisinlord.antarchy.content.effect.DreadMobEffect; +import com.craisinlord.antarchy.content.effect.GrowthMobEffect; +import com.craisinlord.antarchy.content.effect.InvertedMobEffect; +import com.craisinlord.antarchy.content.effect.ParalyzedMobEffect; +import com.craisinlord.antarchy.content.effect.ShrinkMobEffect; +import com.craisinlord.antarchy.content.effect.StinkyMobEffect; +import com.craisinlord.antarchy.content.entity.AppleCowEntityVariants.AppleCow; +import com.craisinlord.antarchy.content.entity.AppleCowEntityVariants.EnchantedGoldenAppleCow; +import com.craisinlord.antarchy.content.entity.AppleCowEntityVariants.GoldenAppleCow; +import com.craisinlord.antarchy.content.entity.cloud_shark.CloudSharkEntity; +import com.craisinlord.antarchy.content.entity.BedBugEntity; +import com.craisinlord.antarchy.content.entity.ButterflyEntity; +import com.craisinlord.antarchy.content.entity.CaterpillarEntity; +import com.craisinlord.antarchy.content.entity.DiamondMinecartEntity; +import com.craisinlord.antarchy.content.entity.DrTrayaurusEntity; +import com.craisinlord.antarchy.content.entity.brutalfly.BrutalflyEntity; +import com.craisinlord.antarchy.content.entity.brutalfly.BrutalflyOrbEntity; +import com.craisinlord.antarchy.content.entity.EasterBunnyEntity; +import com.craisinlord.antarchy.content.entity.flying_squirrel.FlyingSquirrelEntity; +import com.craisinlord.antarchy.content.entity.ReverieEntity; +import com.craisinlord.antarchy.content.entity.MissileSquidEntity; +import com.craisinlord.antarchy.content.entity.lucid.LucidEntity; +import com.craisinlord.antarchy.content.entity.lucid.LucidBoltEntity; +import com.craisinlord.antarchy.content.entity.lucid.LucidEyeProjectileEntity; +import com.craisinlord.antarchy.content.entity.HushProjectileEntity; +import com.craisinlord.antarchy.content.entity.JumpyBugEntity; +import com.craisinlord.antarchy.content.entity.StinkBugEntity; +import com.craisinlord.antarchy.content.entity.OuranwoodBoatEntity; +import com.craisinlord.antarchy.content.entity.OuranwoodChestBoatEntity; +import com.craisinlord.antarchy.content.entity.AlphaMantisEntity; +import com.craisinlord.antarchy.content.entity.MantisEntity; +import com.craisinlord.antarchy.content.entity.RollyPollyEntity; +import com.craisinlord.antarchy.content.entity.basilisk.BasiliskEntity; +import com.craisinlord.antarchy.content.entity.EmperorScorpionEntity; +import com.craisinlord.antarchy.content.entity.ScorpionEntity; +import com.craisinlord.antarchy.content.item.LucidEyeItem; +import com.craisinlord.antarchy.content.item.LucidPearlItem; +import com.craisinlord.antarchy.content.entity.nightmare.NightmareEntity; +import com.craisinlord.antarchy.content.entity.ToreterrorEntity; +import com.craisinlord.antarchy.content.entity.WaterBombEntity; +import com.craisinlord.antarchy.content.item.PrimordialArmorItem; +import com.craisinlord.antarchy.content.item.WaterCannonItem; +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.OctopusBombEntity; +import com.craisinlord.antarchy.content.entity.MolevoreEntity; +import com.craisinlord.antarchy.content.entity.MolewormEntity; +import com.craisinlord.antarchy.content.entity.BomberEntity; +import com.craisinlord.antarchy.content.entity.SizeRayProjectileEntity; +import com.craisinlord.antarchy.content.entity.TriffidEntity; +import com.craisinlord.antarchy.content.entity.WaspEntity; +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 com.craisinlord.antarchy.content.item.BattleAxeItem; +import com.craisinlord.antarchy.content.item.BasiliskDaggerItem; +import com.craisinlord.antarchy.content.item.BigBerthaItem; +import com.craisinlord.antarchy.content.item.AntimetalBlockItem; +import com.craisinlord.antarchy.fabric.item.AntimetalScaffoldingItem; +import com.craisinlord.antarchy.content.item.CloudSharkFinSoupItem; +import com.craisinlord.antarchy.content.item.CorneaEarItem; +import com.craisinlord.antarchy.content.item.GravityGunItem; +import com.craisinlord.antarchy.content.item.MinersDreamItem; +import com.craisinlord.antarchy.content.item.DuctTapeBlockItem; +import com.craisinlord.antarchy.content.item.BrutalflyElytraItem; +import com.craisinlord.antarchy.content.item.MobComingSoonTooltipItem; +import com.craisinlord.antarchy.content.item.MogglesItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimateAxeItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimateHoeItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimatePickaxeItem; +import com.craisinlord.antarchy.content.item.ultimate.UtlimateShovelItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimateSwordItem; +import com.craisinlord.antarchy.content.item.DiamondMinecartItem; +import com.craisinlord.antarchy.content.item.ReverieBottleItem; +import com.craisinlord.antarchy.content.item.ScorpionWhipItem; +import com.craisinlord.antarchy.content.item.ScorpionWhipTetherSync; +import com.craisinlord.antarchy.content.network.HerculesBeetleImpactShakeSync; +import com.craisinlord.antarchy.content.item.SizeRayItem; +import com.craisinlord.antarchy.content.item.SquidzookaItem; +import com.craisinlord.antarchy.content.item.SimpleToolTier; +import com.craisinlord.antarchy.content.item.ultimate.UltimateArmorItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimateBowItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimateCrossbowItem; +import com.craisinlord.antarchy.content.item.NightmareArmorItem; +import com.craisinlord.antarchy.content.item.NightmareSwordItem; +import com.craisinlord.antarchy.content.item.OuranwoodBoatOnlyItem; +import com.craisinlord.antarchy.content.item.OuranwoodChestBoatItem; +import com.craisinlord.antarchy.content.item.RainbowSugarItem; +import com.craisinlord.antarchy.content.worldgen.elythia.CoralSpikeFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaBiomeSource; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaRiverCarveFunction; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaFloraFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaLargeTuffBoulderFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.PeachForestMossyBoulderFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.PeachForestPondConfiguration; +import com.craisinlord.antarchy.content.worldgen.elythia.PeachForestPondFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaPondFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaSurfaceCoverFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaTuffBoulderFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaUndergroundFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.MolewormCaveEntranceFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.MolewormSurfaceMoundsFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.BrutalflyCocoonFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.LumenPoolFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.LumenLilyPadFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.LumenStreamFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.MolewormTunnelsFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.MolewormWarrensFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.OuranwoodCocoonTreeFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.OuranwoodTreeConfiguration; +import com.craisinlord.antarchy.content.worldgen.elythia.OuranwoodTreeFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.PeachTreeConfiguration; +import com.craisinlord.antarchy.content.worldgen.elythia.PeachTreeFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.TriffidPatchFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynEggPatchFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.ChitenSpikeConfiguration; +import com.craisinlord.antarchy.content.worldgen.cavaryn.ChitenSpikeFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.BedBugNestFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.BedBugSurfaceClusterFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.CloudSeaCalciteFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.LucidAntiwaterPoolFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisBiomeSource; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisDuneConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisDuneFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisFissureConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisFissureFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisBloodCrystalConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisBloodCrystalFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisAntiwaterPoolConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisAntiwaterPoolFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisRibColumnsConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisRibColumnsFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisSpikeConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisSpikeFeature; +import com.craisinlord.antarchy.content.client.particle.InvertedGeyserBaseParticleOptions; +import com.craisinlord.antarchy.content.client.particle.InvertedGeyserParticleOptions; +import com.craisinlord.antarchy.content.portal.PermanentPortalType; +import java.util.List; +import java.util.ArrayList; +import java.util.Comparator; +import com.mojang.serialization.MapCodec; +import net.fabricmc.fabric.api.object.builder.v1.entity.FabricDefaultAttributeRegistry; +import net.fabricmc.fabric.api.registry.FabricBrewingRecipeRegistryBuilder; +import net.minecraft.advancements.critereon.EntitySubPredicate; +import net.minecraft.core.Holder; +import net.minecraft.core.registries.Registries; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.world.item.alchemy.Potion; +import net.minecraft.world.item.alchemy.PotionContents; +import net.minecraft.world.effect.MobEffect; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.tags.TagKey; +import net.minecraft.world.damagesource.DamageType; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.MobCategory; +import net.minecraft.world.entity.ai.attributes.Attribute; +import net.minecraft.world.entity.ai.attributes.AttributeSupplier; +import net.minecraft.world.entity.ai.attributes.Attributes; +import net.minecraft.world.entity.animal.Cow; +import net.minecraft.world.entity.animal.Rabbit; +import net.minecraft.world.entity.SpawnPlacementTypes; +import net.minecraft.world.entity.SpawnPlacements; +import net.minecraft.world.entity.npc.Villager; +import net.minecraft.world.entity.monster.Monster; +import net.minecraft.world.item.ArmorItem; +import net.minecraft.world.item.ArmorMaterial; +import net.minecraft.world.item.BucketItem; +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.Rarity; +import net.minecraft.world.item.StandingAndWallBlockItem; +import net.minecraft.world.food.FoodProperties; +import net.minecraft.world.item.Tier; +import net.minecraft.world.item.Tiers; +import net.minecraft.world.item.alchemy.Potions; +import net.minecraft.world.item.crafting.Ingredient; +import net.minecraft.world.flag.FeatureFlags; +import net.minecraft.core.Direction; +import net.minecraft.core.particles.ParticleType; +import net.minecraft.core.particles.SimpleParticleType; +import net.minecraft.util.valueproviders.UniformInt; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.AmethystClusterBlock; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.DropExperienceBlock; +import net.minecraft.world.level.block.GlowLichenBlock; +import net.minecraft.world.level.block.HorizontalDirectionalBlock; +import net.minecraft.world.level.block.LiquidBlock; +import net.minecraft.world.level.block.RotatedPillarBlock; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.block.VineBlock; +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.biome.BiomeSource; +import net.minecraft.world.level.levelgen.DensityFunction; +import net.minecraft.world.level.levelgen.feature.Feature; +import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; +import net.minecraft.world.level.levelgen.feature.configurations.SimpleBlockConfiguration; +import net.minecraft.world.level.levelgen.Heightmap; +import net.fabricmc.loader.api.FabricLoader; +import net.minecraft.world.level.material.Fluid; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.block.Mirror; +import net.minecraft.world.level.block.Rotation; +import com.craisinlord.antarchy.fabric.AntarchyFabricContent; + +public final class AntarchyFabricEntities { + + public static final DeferredRegister> ENTITY_TYPES = DeferredRegister.create(Registries.ENTITY_TYPE, Antarchy.MODID); + + + public static final DeferredHolder, EntityType> RED_ANT = ENTITY_TYPES.register("red_ant", + () -> buildAntType(RedAntEntity::new, MobCategory.CREATURE, "red_ant")); + + + public static final DeferredHolder, EntityType> BROWN_ANT = ENTITY_TYPES.register("brown_ant", + () -> buildAntType(BrownAntEntity::new, MobCategory.CREATURE, "brown_ant")); + + + public static final DeferredHolder, EntityType> RAINBOW_ANT = ENTITY_TYPES.register("rainbow_ant", + () -> buildAntType(RainbowAntEntity::new, MobCategory.CREATURE, "rainbow_ant")); + + + public static final DeferredHolder, EntityType> MOLEWORM = ENTITY_TYPES.register("moleworm", + () -> EntityType.Builder.of(MolewormEntity::new, MobCategory.MONSTER) + .sized(0.4F, 0.3F) + .clientTrackingRange(8) + .build("moleworm")); + + + public static final DeferredHolder, EntityType> MANTIS = ENTITY_TYPES.register("mantis", + () -> EntityType.Builder.of(MantisEntity::new, MobCategory.MONSTER) + .sized(3.125F, 2.5F) + .clientTrackingRange(8) + .build("mantis")); + + + public static final DeferredHolder, EntityType> ALPHA_MANTIS = ENTITY_TYPES.register("alpha_mantis", + () -> EntityType.Builder.of(AlphaMantisEntity::new, MobCategory.MONSTER) + .sized(4.25F, 3.35F) + .clientTrackingRange(10) + .build("alpha_mantis")); + + + public static final DeferredHolder, EntityType> OURANWOOD_BOAT_ENTITY = ENTITY_TYPES.register("ouranwood_boat", + () -> EntityType.Builder.of(OuranwoodBoatEntity::new, MobCategory.MISC) + .sized(1.375F, 0.5625F) + .clientTrackingRange(10) + .updateInterval(10) + .build("ouranwood_boat")); + + + public static final DeferredHolder, EntityType> OURANWOOD_CHEST_BOAT_ENTITY = ENTITY_TYPES.register("ouranwood_chest_boat", + () -> EntityType.Builder.of(OuranwoodChestBoatEntity::new, MobCategory.MISC) + .sized(1.375F, 0.5625F) + .clientTrackingRange(10) + .updateInterval(10) + .build("ouranwood_chest_boat")); + + + public static final DeferredHolder, EntityType> PEACH_BOAT_ENTITY = ENTITY_TYPES.register("peach_boat", + () -> EntityType.Builder.of(com.craisinlord.antarchy.content.entity.PeachBoatEntity::new, MobCategory.MISC) + .sized(1.375F, 0.5625F) + .clientTrackingRange(10) + .updateInterval(10) + .build("peach_boat")); + + + public static final DeferredHolder, EntityType> PEACH_CHEST_BOAT_ENTITY = ENTITY_TYPES.register("peach_chest_boat", + () -> EntityType.Builder.of(com.craisinlord.antarchy.content.entity.PeachChestBoatEntity::new, MobCategory.MISC) + .sized(1.375F, 0.5625F) + .clientTrackingRange(10) + .updateInterval(10) + .build("peach_chest_boat")); + + + public static final DeferredHolder, EntityType> MOLEVORE = ENTITY_TYPES.register("molevore", + () -> EntityType.Builder.of(MolevoreEntity::new, MobCategory.MONSTER) + .sized(1.95F, 1.1F) + .clientTrackingRange(10) + .build("molevore")); + + + public static final DeferredHolder, EntityType> TRIFFID = ENTITY_TYPES.register("triffid", + () -> EntityType.Builder.of(TriffidEntity::new, MobCategory.MONSTER) + .sized(2.0F, 5.0F) + .clientTrackingRange(10) + .build("triffid")); + + + public static final DeferredHolder, EntityType> BED_BUG = ENTITY_TYPES.register("bed_bug", + () -> EntityType.Builder.of(BedBugEntity::new, MobCategory.CREATURE) + .sized(1.15F, 0.8F) + .clientTrackingRange(8) + .build("bed_bug")); + + + public static final DeferredHolder, EntityType> WASP = ENTITY_TYPES.register("wasp", + () -> EntityType.Builder.of(WaspEntity::new, MobCategory.MONSTER) + .sized(0.8625F, 1.365F) + .clientTrackingRange(8) + .build("wasp")); + + + public static final DeferredHolder, EntityType> BOMBER = ENTITY_TYPES.register("bomber", + () -> EntityType.Builder.of(BomberEntity::new, MobCategory.MONSTER) + .sized(0.55F, 0.75F) + .clientTrackingRange(8) + .build("bomber")); + + + public static final DeferredHolder, EntityType> SHRINK_RAY_PROJECTILE = ENTITY_TYPES.register("shrink_ray_projectile", + () -> EntityType.Builder.of(SizeRayProjectileEntity::createShrink, MobCategory.MISC) + .sized(0.5F, 0.5F) + .clientTrackingRange(8) + .updateInterval(1) + .build("shrink_ray_projectile")); + + + public static final DeferredHolder, EntityType> GROWTH_RAY_PROJECTILE = ENTITY_TYPES.register("growth_ray_projectile", + () -> EntityType.Builder.of(SizeRayProjectileEntity::createGrowth, MobCategory.MISC) + .sized(0.5F, 0.5F) + .clientTrackingRange(8) + .updateInterval(1) + .build("growth_ray_projectile")); + + + public static final DeferredHolder, EntityType> DIAMOND_MINECART = ENTITY_TYPES.register("diamond_minecart", + () -> EntityType.Builder.of((entityType, level) -> new DiamondMinecartEntity(entityType, level, AntarchyFabricItems.diamondMinecartItem()), MobCategory.MISC) + .sized(0.98F, 0.7F) + .clientTrackingRange(8) + .build("diamond_minecart")); + + + + public static final DeferredHolder, EntityType> EASTER_BUNNY = ENTITY_TYPES.register("easter_bunny", + () -> EntityType.Builder.of(EasterBunnyEntity::new, MobCategory.CREATURE) + .sized(0.5F, 1.0F) + .clientTrackingRange(8) + .build("easter_bunny")); + + + public static final DeferredHolder, EntityType> FLYING_SQUIRREL = ENTITY_TYPES.register("flying_squirrel", + () -> EntityType.Builder.of(FlyingSquirrelEntity::new, MobCategory.CREATURE) + .sized(0.6F, 0.7F) + .clientTrackingRange(8) + .build("flying_squirrel")); + + + public static final DeferredHolder, EntityType> CATERPILLAR = ENTITY_TYPES.register("caterpillar", + () -> EntityType.Builder.of(CaterpillarEntity::new, MobCategory.CREATURE) + .sized(0.8775F, 0.585F) + .clientTrackingRange(8) + .build("caterpillar")); + + + public static final DeferredHolder, EntityType> BUTTERFLY = ENTITY_TYPES.register("butterfly", + () -> EntityType.Builder.of(ButterflyEntity::new, MobCategory.AMBIENT) + .sized(1.125F, 1.375F) + .clientTrackingRange(8) + .build("butterfly")); + + + public static final DeferredHolder, EntityType> REVERIE = ENTITY_TYPES.register("reverie", + () -> EntityType.Builder.of(ReverieEntity::new, MobCategory.AMBIENT) + .sized(0.7F, 0.7F) + .clientTrackingRange(8) + .build("reverie")); + + + public static final DeferredHolder, EntityType> BRUTALFLY = ENTITY_TYPES.register("brutalfly", + () -> EntityType.Builder.of(BrutalflyEntity::new, MobCategory.MONSTER) + .sized(2.4F, 2.1F) + .clientTrackingRange(12) + .build("brutalfly")); + + + public static final DeferredHolder, EntityType> APPLE_COW = ENTITY_TYPES.register("apple_cow", + () -> buildCowType(AppleCow::new, "apple_cow")); + + + public static final DeferredHolder, EntityType> GOLDEN_APPLE_COW = ENTITY_TYPES.register("golden_apple_cow", + () -> buildCowType(GoldenAppleCow::new, "golden_apple_cow")); + + + public static final DeferredHolder, EntityType> ENCHANTED_GOLDEN_APPLE_COW = ENTITY_TYPES.register("enchanted_golden_apple_cow", + () -> buildCowType(EnchantedGoldenAppleCow::new, "enchanted_golden_apple_cow")); + + + public static final DeferredHolder, EntityType> DR_TRAYAURUS = ENTITY_TYPES.register("dr_trayaurus", + () -> EntityType.Builder.of(DrTrayaurusEntity::new, MobCategory.MISC) + .sized(0.6F, 1.95F) + .clientTrackingRange(10) + .build("dr_trayaurus")); + + + public static final DeferredHolder, EntityType> CLOUD_SHARK = ENTITY_TYPES.register("cloud_shark", + () -> EntityType.Builder.of(CloudSharkEntity::new, MobCategory.MONSTER) + .sized(2.4F, 0.9F) + .clientTrackingRange(10) + .build("cloud_shark")); + + + public static final DeferredHolder, EntityType> KRAKEN = ENTITY_TYPES.register("kraken", + () -> EntityType.Builder.of(KrakenEntity::new, MobCategory.MONSTER) + .sized(11.4F, 39.0F) + .clientTrackingRange(12) + .build("kraken")); + + + public static final DeferredHolder, EntityType> KRAKEN_PART = ENTITY_TYPES.register("kraken_part", + () -> EntityType.Builder.of( + com.craisinlord.antarchy.fabric.entity.multipart.MultipartPartEntity::new, + MobCategory.MISC + ) + .sized(1.0F, 1.0F) + .clientTrackingRange(12) + .updateInterval(1) + .build("kraken_part")); + + + public static final DeferredHolder, EntityType> MISSILE_SQUID = ENTITY_TYPES.register("missile_squid", + () -> EntityType.Builder.of(MissileSquidEntity::new, MobCategory.MONSTER) + .sized(1.62F, 3.18F) + .clientTrackingRange(10) + .build("missile_squid")); + + + public static final DeferredHolder, EntityType> OCTOPUS_BOMB = ENTITY_TYPES.register("octopus_bomb", + () -> EntityType.Builder.of(OctopusBombEntity::new, MobCategory.MONSTER) + .sized(2.4F, 2.9F) + .clientTrackingRange(10) + .build("octopus_bomb")); + + + public static final DeferredHolder, EntityType> NIGHTMARE = ENTITY_TYPES.register("nightmare", + () -> EntityType.Builder.of(NightmareEntity::new, MobCategory.MONSTER) + .sized(3.2F, 3.8F) + .clientTrackingRange(12) + .build("nightmare")); + + + public static final DeferredHolder, EntityType> LUCID = ENTITY_TYPES.register("lucid", + () -> EntityType.Builder.of(LucidEntity::new, MobCategory.MONSTER) + .sized(2.0F, 2.0F) + .clientTrackingRange(10) + .build("lucid")); + + + public static final DeferredHolder, EntityType> LUCID_BOLT = ENTITY_TYPES.register("lucid_bolt", + () -> EntityType.Builder.of(LucidBoltEntity::new, MobCategory.MISC) + .sized(0.3F, 0.3F) + .clientTrackingRange(8) + .updateInterval(1) + .build("lucid_bolt")); + + public static final DeferredHolder, EntityType> KRAKENS_GRASP_TRIDENT = ENTITY_TYPES.register("krakens_grasp_trident", + () -> EntityType.Builder.of(KrakensGraspThrownTrident::new, MobCategory.MISC) + .sized(0.5F, 0.5F) + .clientTrackingRange(8) + .updateInterval(1) + .build("krakens_grasp_trident")); + + public static final DeferredHolder, EntityType> TENTACLE = ENTITY_TYPES.register("tentacle", + () -> EntityType.Builder.of(TentacleEntity::new, MobCategory.MISC) + .sized(1.2F, 4.5F) + .clientTrackingRange(10) + .build("tentacle")); + + + public static final DeferredHolder, EntityType> SCORPION = ENTITY_TYPES.register("scorpion", + () -> EntityType.Builder.of(ScorpionEntity::new, MobCategory.MONSTER) + .sized(1.5F, 1.0F) + .clientTrackingRange(8) + .build("scorpion")); + + + public static final DeferredHolder, EntityType> BASILISK = ENTITY_TYPES.register("basilisk", + () -> EntityType.Builder.of(BasiliskEntity::new, MobCategory.MONSTER) + .sized(3.0F, 3.5F) + .clientTrackingRange(14) + .build("basilisk")); + + + public static final DeferredHolder, EntityType> EMPEROR_SCORPION = ENTITY_TYPES.register("emperor_scorpion", + () -> EntityType.Builder.of(EmperorScorpionEntity::new, MobCategory.MONSTER) + .sized(6.0F, 3.0F) + .clientTrackingRange(12) + .build("emperor_scorpion")); + + + public static final DeferredHolder, EntityType> LUCID_PEARL_PROJECTILE = ENTITY_TYPES.register("lucid_pearl_projectile", + () -> EntityType.Builder.of(LucidEyeProjectileEntity::new, MobCategory.MISC) + .sized(0.25F, 0.25F) + .clientTrackingRange(8) + .updateInterval(1) + .build("lucid_pearl_projectile")); + + + public static final DeferredHolder, EntityType> HUSH_PROJECTILE = ENTITY_TYPES.register("hush_projectile", + () -> EntityType.Builder.of(HushProjectileEntity::new, MobCategory.MISC) + .sized(0.35F, 0.35F) + .clientTrackingRange(8) + .updateInterval(1) + .build("hush_projectile")); + + + public static final DeferredHolder, EntityType> BRUTALFLY_ORB = ENTITY_TYPES.register("brutalfly_orb", + () -> EntityType.Builder.of(BrutalflyOrbEntity::new, MobCategory.MISC) + .sized(0.75F, 0.75F) + .clientTrackingRange(10) + .updateInterval(1) + .build("brutalfly_orb")); + + + public static final DeferredHolder, EntityType> UPWARD_FALLING_BLOCK = ENTITY_TYPES.register("upward_falling_block", + () -> EntityType.Builder.of( + com.craisinlord.antarchy.content.entity.UpwardFallingBlockEntity::new, MobCategory.MISC) + .sized(0.98F, 0.98F) + .clientTrackingRange(10) + .updateInterval(1) + .build("upward_falling_block")); + + + public static final DeferredHolder, EntityType> TORETERROR = ENTITY_TYPES.register("toreterror", + () -> EntityType.Builder.of(ToreterrorEntity::new, MobCategory.MONSTER) + .sized(2.0F, 3.0F) + .clientTrackingRange(14) + .build("toreterror")); + + + public static final DeferredHolder, EntityType> WATER_BOMB = ENTITY_TYPES.register("water_bomb", + () -> EntityType.Builder.of(WaterBombEntity::new, MobCategory.MISC) + .sized(0.4F, 0.4F) + .clientTrackingRange(8) + .updateInterval(1) + .build("water_bomb")); + + + + public static final DeferredHolder, EntityType> CHEEP = ENTITY_TYPES.register("cheep", + () -> EntityType.Builder.of(com.craisinlord.antarchy.content.entity.CheepEntity::new, MobCategory.WATER_AMBIENT) + .sized(1.0F, 1.2F) + .clientTrackingRange(8) + .build("cheep")); + + + + // Dorrie is not part of this update yet. + // public static final DeferredHolder, EntityType> DORRIE = ENTITY_TYPES.register("dorrie", + // () -> EntityType.Builder.of(com.craisinlord.antarchy.content.entity.DorrieEntity::new, MobCategory.CREATURE) + // .sized(1.6F, 1.4F) + // .clientTrackingRange(10) + // .build("dorrie")); + + + public static final DeferredHolder, EntityType> OURANWOOD_DEER = ENTITY_TYPES.register("ouranwood_deer", + () -> EntityType.Builder.of(com.craisinlord.antarchy.content.entity.OuranwoodDeerEntity::new, MobCategory.CREATURE) + .sized(0.9F, 1.4F) + .clientTrackingRange(8) + .build("ouranwood_deer")); + + + public static final DeferredHolder, EntityType> GLIMMER = ENTITY_TYPES.register("glimmer", + () -> EntityType.Builder.of(com.craisinlord.antarchy.content.entity.glimmer.GlimmerEntity::new, MobCategory.CREATURE) + .sized(0.9F, 1.4F) + .clientTrackingRange(8) + .build("glimmer")); + + + public static final DeferredHolder, EntityType> ELKA = ENTITY_TYPES.register("elka", + () -> EntityType.Builder.of(com.craisinlord.antarchy.content.entity.ElkaEntity::new, MobCategory.CREATURE) + .sized(2.2F, 3.5F) + .clientTrackingRange(10) + .build("elka")); + + + + private static EntityType buildCowType(EntityType.EntityFactory factory, String name) { + return EntityType.Builder.of(factory, MobCategory.CREATURE) + .sized(0.9F, 1.4F) + .clientTrackingRange(10) + .build(name); + } + + + + private static EntityType buildAntType(EntityType.EntityFactory factory, MobCategory category, String name) { + return EntityType.Builder.of(factory, category) + .sized(0.6375F, 0.2125F) + .clientTrackingRange(8) + .build(name); + } + + + public static void register() { + ENTITY_TYPES.register(); + } + +} diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricEntityAttributes.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricEntityAttributes.java new file mode 100644 index 00000000..1c82accb --- /dev/null +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricEntityAttributes.java @@ -0,0 +1,335 @@ +package com.craisinlord.antarchy.fabric.registry; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.compat.infinity.InfinityCompat; +import com.craisinlord.antarchy.compat.infinity.InfinityCompatVersion; +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.CreativeTabOrder; +import com.craisinlord.antarchy.content.block.*; +import com.craisinlord.antarchy.content.AntarchySoundEvents; +import com.craisinlord.antarchy.content.item.BloodCrystalArmorItem; +import com.craisinlord.antarchy.content.item.BloodCrystalAppleItem; +import com.craisinlord.antarchy.content.item.BloodCrystalKatanaItem; +import com.craisinlord.antarchy.content.block.entity.AntNestBlockEntity; +import com.craisinlord.antarchy.content.block.entity.DreamCampfireBlockEntity; +import com.craisinlord.antarchy.content.block.entity.HushweedBlockEntity; +import com.craisinlord.antarchy.content.block.entity.PotentNyxiteBlockEntity; +import com.craisinlord.antarchy.content.block.entity.WaspNestBlockEntity; +import com.craisinlord.antarchy.content.fluid.BileLiquidBlock; +import com.craisinlord.antarchy.content.fluid.LumenLiquidBlock; +import com.craisinlord.antarchy.content.worldgen.ants.BrownAntNestFeature; +import com.craisinlord.antarchy.content.worldgen.ants.RainbowAntNestFeature; +import com.craisinlord.antarchy.content.worldgen.ants.RedAntNestFeature; +import com.craisinlord.antarchy.content.worldgen.ants.TermiteNestFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynBileCystFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynBileVeinFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynCreepvineFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynWallAmberMossFeature; +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.NyxiteSpikeFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.PotentNyxiteFeature; +import com.craisinlord.antarchy.fabric.content.fluid.AntiwaterFluid; +import com.craisinlord.antarchy.fabric.content.fluid.AntiwaterLiquidBlock; +import com.craisinlord.antarchy.fabric.item.DeferredSpawnEggItem; +import com.craisinlord.antarchy.fabric.network.AntarchyFabricNetworking; +import com.craisinlord.antarchy.fabric.registry.DeferredBlock; +import com.craisinlord.antarchy.fabric.registry.DeferredHolder; +import com.craisinlord.antarchy.fabric.registry.DeferredItem; +import com.craisinlord.antarchy.fabric.registry.DeferredRegister; +import com.craisinlord.antarchy.content.effect.DreadMobEffect; +import com.craisinlord.antarchy.content.effect.GrowthMobEffect; +import com.craisinlord.antarchy.content.effect.InvertedMobEffect; +import com.craisinlord.antarchy.content.effect.ParalyzedMobEffect; +import com.craisinlord.antarchy.content.effect.ShrinkMobEffect; +import com.craisinlord.antarchy.content.effect.StinkyMobEffect; +import com.craisinlord.antarchy.content.entity.AppleCowEntityVariants.AppleCow; +import com.craisinlord.antarchy.content.entity.AppleCowEntityVariants.EnchantedGoldenAppleCow; +import com.craisinlord.antarchy.content.entity.AppleCowEntityVariants.GoldenAppleCow; +import com.craisinlord.antarchy.content.entity.cloud_shark.CloudSharkEntity; +import com.craisinlord.antarchy.content.entity.BedBugEntity; +import com.craisinlord.antarchy.content.entity.ButterflyEntity; +import com.craisinlord.antarchy.content.entity.CaterpillarEntity; +import com.craisinlord.antarchy.content.entity.DiamondMinecartEntity; +import com.craisinlord.antarchy.content.entity.DrTrayaurusEntity; +import com.craisinlord.antarchy.content.entity.brutalfly.BrutalflyEntity; +import com.craisinlord.antarchy.content.entity.brutalfly.BrutalflyOrbEntity; +import com.craisinlord.antarchy.content.entity.EasterBunnyEntity; +import com.craisinlord.antarchy.content.entity.flying_squirrel.FlyingSquirrelEntity; +import com.craisinlord.antarchy.content.entity.ReverieEntity; +import com.craisinlord.antarchy.content.entity.MissileSquidEntity; +import com.craisinlord.antarchy.content.entity.lucid.LucidEntity; +import com.craisinlord.antarchy.content.entity.lucid.LucidBoltEntity; +import com.craisinlord.antarchy.content.entity.lucid.LucidEyeProjectileEntity; +import com.craisinlord.antarchy.content.entity.HushProjectileEntity; +import com.craisinlord.antarchy.content.entity.JumpyBugEntity; +import com.craisinlord.antarchy.content.entity.StinkBugEntity; +import com.craisinlord.antarchy.content.entity.OuranwoodBoatEntity; +import com.craisinlord.antarchy.content.entity.OuranwoodChestBoatEntity; +import com.craisinlord.antarchy.content.entity.AlphaMantisEntity; +import com.craisinlord.antarchy.content.entity.MantisEntity; +import com.craisinlord.antarchy.content.entity.RollyPollyEntity; +import com.craisinlord.antarchy.content.entity.basilisk.BasiliskEntity; +import com.craisinlord.antarchy.content.entity.EmperorScorpionEntity; +import com.craisinlord.antarchy.content.entity.ScorpionEntity; +import com.craisinlord.antarchy.content.item.LucidEyeItem; +import com.craisinlord.antarchy.content.item.LucidPearlItem; +import com.craisinlord.antarchy.content.entity.nightmare.NightmareEntity; +import com.craisinlord.antarchy.content.entity.ToreterrorEntity; +import com.craisinlord.antarchy.content.entity.WaterBombEntity; +import com.craisinlord.antarchy.content.item.PrimordialArmorItem; +import com.craisinlord.antarchy.content.item.WaterCannonItem; +import com.craisinlord.antarchy.content.entity.kraken.KrakenEntity; +import com.craisinlord.antarchy.content.entity.kraken.TentacleEntity; +import com.craisinlord.antarchy.content.entity.OctopusBombEntity; +import com.craisinlord.antarchy.content.entity.MolevoreEntity; +import com.craisinlord.antarchy.content.entity.MolewormEntity; +import com.craisinlord.antarchy.content.entity.BomberEntity; +import com.craisinlord.antarchy.content.entity.SizeRayProjectileEntity; +import com.craisinlord.antarchy.content.entity.TriffidEntity; +import com.craisinlord.antarchy.content.entity.WaspEntity; +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 com.craisinlord.antarchy.content.item.BattleAxeItem; +import com.craisinlord.antarchy.content.item.BasiliskDaggerItem; +import com.craisinlord.antarchy.content.item.BigBerthaItem; +import com.craisinlord.antarchy.content.item.AntimetalBlockItem; +import com.craisinlord.antarchy.fabric.item.AntimetalScaffoldingItem; +import com.craisinlord.antarchy.content.item.CloudSharkFinSoupItem; +import com.craisinlord.antarchy.content.item.CorneaEarItem; +import com.craisinlord.antarchy.content.item.GravityGunItem; +import com.craisinlord.antarchy.content.item.MinersDreamItem; +import com.craisinlord.antarchy.content.item.DuctTapeBlockItem; +import com.craisinlord.antarchy.content.item.BrutalflyElytraItem; +import com.craisinlord.antarchy.content.item.MobComingSoonTooltipItem; +import com.craisinlord.antarchy.content.item.MogglesItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimateAxeItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimateHoeItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimatePickaxeItem; +import com.craisinlord.antarchy.content.item.ultimate.UtlimateShovelItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimateSwordItem; +import com.craisinlord.antarchy.content.item.DiamondMinecartItem; +import com.craisinlord.antarchy.content.item.ReverieBottleItem; +import com.craisinlord.antarchy.content.item.ScorpionWhipItem; +import com.craisinlord.antarchy.content.item.ScorpionWhipTetherSync; +import com.craisinlord.antarchy.content.network.HerculesBeetleImpactShakeSync; +import com.craisinlord.antarchy.content.item.SizeRayItem; +import com.craisinlord.antarchy.content.item.SquidzookaItem; +import com.craisinlord.antarchy.content.item.SimpleToolTier; +import com.craisinlord.antarchy.content.item.ultimate.UltimateArmorItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimateBowItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimateCrossbowItem; +import com.craisinlord.antarchy.content.item.NightmareArmorItem; +import com.craisinlord.antarchy.content.item.NightmareSwordItem; +import com.craisinlord.antarchy.content.item.OuranwoodBoatOnlyItem; +import com.craisinlord.antarchy.content.item.OuranwoodChestBoatItem; +import com.craisinlord.antarchy.content.item.RainbowSugarItem; +import com.craisinlord.antarchy.content.worldgen.elythia.CoralSpikeFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaBiomeSource; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaRiverCarveFunction; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaFloraFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaLargeTuffBoulderFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.PeachForestMossyBoulderFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.PeachForestPondConfiguration; +import com.craisinlord.antarchy.content.worldgen.elythia.PeachForestPondFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaPondFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaSurfaceCoverFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaTuffBoulderFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaUndergroundFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.MolewormCaveEntranceFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.MolewormSurfaceMoundsFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.BrutalflyCocoonFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.LumenPoolFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.LumenLilyPadFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.LumenStreamFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.MolewormTunnelsFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.MolewormWarrensFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.OuranwoodCocoonTreeFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.OuranwoodTreeConfiguration; +import com.craisinlord.antarchy.content.worldgen.elythia.OuranwoodTreeFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.PeachTreeConfiguration; +import com.craisinlord.antarchy.content.worldgen.elythia.PeachTreeFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.TriffidPatchFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynEggPatchFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.ChitenSpikeConfiguration; +import com.craisinlord.antarchy.content.worldgen.cavaryn.ChitenSpikeFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.BedBugNestFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.BedBugSurfaceClusterFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.CloudSeaCalciteFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.LucidAntiwaterPoolFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisBiomeSource; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisDuneConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisDuneFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisFissureConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisFissureFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisBloodCrystalConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisBloodCrystalFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisAntiwaterPoolConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisAntiwaterPoolFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisRibColumnsConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisRibColumnsFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisSpikeConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisSpikeFeature; +import com.craisinlord.antarchy.content.client.particle.InvertedGeyserBaseParticleOptions; +import com.craisinlord.antarchy.content.client.particle.InvertedGeyserParticleOptions; +import com.craisinlord.antarchy.content.portal.PermanentPortalType; +import java.util.List; +import java.util.ArrayList; +import java.util.Comparator; +import com.mojang.serialization.MapCodec; +import net.fabricmc.fabric.api.object.builder.v1.entity.FabricDefaultAttributeRegistry; +import net.fabricmc.fabric.api.registry.FabricBrewingRecipeRegistryBuilder; +import net.minecraft.advancements.critereon.EntitySubPredicate; +import net.minecraft.core.Holder; +import net.minecraft.core.registries.Registries; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.world.item.alchemy.Potion; +import net.minecraft.world.item.alchemy.PotionContents; +import net.minecraft.world.effect.MobEffect; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.tags.TagKey; +import net.minecraft.world.damagesource.DamageType; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.MobCategory; +import net.minecraft.world.entity.ai.attributes.Attribute; +import net.minecraft.world.entity.ai.attributes.AttributeSupplier; +import net.minecraft.world.entity.ai.attributes.Attributes; +import net.minecraft.world.entity.animal.Cow; +import net.minecraft.world.entity.animal.Rabbit; +import net.minecraft.world.entity.SpawnPlacementTypes; +import net.minecraft.world.entity.SpawnPlacements; +import net.minecraft.world.entity.npc.Villager; +import net.minecraft.world.entity.monster.Monster; +import net.minecraft.world.item.ArmorItem; +import net.minecraft.world.item.ArmorMaterial; +import net.minecraft.world.item.BucketItem; +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.Rarity; +import net.minecraft.world.item.StandingAndWallBlockItem; +import net.minecraft.world.food.FoodProperties; +import net.minecraft.world.item.Tier; +import net.minecraft.world.item.Tiers; +import net.minecraft.world.item.alchemy.Potions; +import net.minecraft.world.item.crafting.Ingredient; +import net.minecraft.world.flag.FeatureFlags; +import net.minecraft.core.Direction; +import net.minecraft.core.particles.ParticleType; +import net.minecraft.core.particles.SimpleParticleType; +import net.minecraft.util.valueproviders.UniformInt; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.AmethystClusterBlock; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.DropExperienceBlock; +import net.minecraft.world.level.block.GlowLichenBlock; +import net.minecraft.world.level.block.HorizontalDirectionalBlock; +import net.minecraft.world.level.block.LiquidBlock; +import net.minecraft.world.level.block.RotatedPillarBlock; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.block.VineBlock; +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.biome.BiomeSource; +import net.minecraft.world.level.levelgen.DensityFunction; +import net.minecraft.world.level.levelgen.feature.Feature; +import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; +import net.minecraft.world.level.levelgen.feature.configurations.SimpleBlockConfiguration; +import net.minecraft.world.level.levelgen.Heightmap; +import net.fabricmc.loader.api.FabricLoader; +import net.minecraft.world.level.material.Fluid; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.block.Mirror; +import net.minecraft.world.level.block.Rotation; +import com.craisinlord.antarchy.fabric.AntarchyFabricContent; + +public final class AntarchyFabricEntityAttributes { + + + private static AttributeSupplier.Builder buildAntAttributes(double health, double speed, double attackDamage) { + return net.minecraft.world.entity.Mob.createMobAttributes() + .add(Attributes.MAX_HEALTH, health) + .add(Attributes.MOVEMENT_SPEED, speed) + .add(Attributes.ATTACK_DAMAGE, attackDamage); + } + + + + public static void register() { + FabricDefaultAttributeRegistry.register( + net.minecraft.world.entity.EntityType.PLAYER, + net.minecraft.world.entity.player.Player.createAttributes() + .add(AntarchyFabricMisc.attributeHolder(AntarchyFabricMisc.DOUBLE_DAMAGE_CHANCE)) + .add(AntarchyFabricMisc.attributeHolder(AntarchyFabricMisc.BLOODGLASS_MAX_HEARTS)) + .build() + ); + + AttributeSupplier rabbitAttributes = Rabbit.createAttributes().build(); + FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.EASTER_BUNNY.get(), rabbitAttributes); + FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.FLYING_SQUIRREL.get(), FlyingSquirrelEntity.createAttributes().build()); + FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.CATERPILLAR.get(), CaterpillarEntity.createAttributes().build()); + FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.BUTTERFLY.get(), ButterflyEntity.createAttributes().build()); + FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.REVERIE.get(), ReverieEntity.createAttributes().build()); + FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.BRUTALFLY.get(), BrutalflyEntity.createAttributes().build()); + + AttributeSupplier cowAttributes = Cow.createAttributes().build(); + FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.APPLE_COW.get(), cowAttributes); + FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.GOLDEN_APPLE_COW.get(), cowAttributes); + FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.ENCHANTED_GOLDEN_APPLE_COW.get(), cowAttributes); + FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.DR_TRAYAURUS.get(), Villager.createAttributes().build()); + FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.CLOUD_SHARK.get(), CloudSharkEntity.createAttributes().build()); + FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.KRAKEN.get(), KrakenEntity.createAttributes().build()); + FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.MISSILE_SQUID.get(), MissileSquidEntity.createAttributes().build()); + FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.OCTOPUS_BOMB.get(), OctopusBombEntity.createAttributes().build()); + FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.TENTACLE.get(), TentacleEntity.createAttributes().build()); + FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.NIGHTMARE.get(), NightmareEntity.createAttributes().build()); + FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.BED_BUG.get(), BedBugEntity.createAttributes().build()); + FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.WASP.get(), WaspEntity.createAttributes().build()); + FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.BOMBER.get(), BomberEntity.createAttributes().build()); + FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.MANTIS.get(), MantisEntity.createAttributes().build()); + FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.ALPHA_MANTIS.get(), AlphaMantisEntity.createAttributes().build()); + FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.TRIFFID.get(), TriffidEntity.createAttributes().build()); + FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.LUCID.get(), LucidEntity.createAttributes().build()); + FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.SCORPION.get(), ScorpionEntity.createAttributes().build()); + FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.BASILISK.get(), BasiliskEntity.createAttributes().build()); + FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.EMPEROR_SCORPION.get(), EmperorScorpionEntity.createAttributes().build()); + FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.TORETERROR.get(), ToreterrorEntity.createAttributes().build()); + FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.CHEEP.get(), com.craisinlord.antarchy.content.entity.CheepEntity.createAttributes().build()); + // Dorrie is not part of this update yet. + // FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.DORRIE.get(), com.craisinlord.antarchy.content.entity.DorrieEntity.createAttributes().build()); + FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.OURANWOOD_DEER.get(), com.craisinlord.antarchy.content.entity.OuranwoodDeerEntity.createAttributes().build()); + FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.GLIMMER.get(), com.craisinlord.antarchy.content.entity.glimmer.GlimmerEntity.createAttributes().build()); + FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.ELKA.get(), com.craisinlord.antarchy.content.entity.ElkaEntity.createAttributes().build()); + + FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.RED_ANT.get(), buildAntAttributes( + AntarchySettings.redAntHealth(), + AntarchySettings.redAntMovementSpeed(), + AntarchySettings.redAntAttackDamage() + ).build()); + FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.BROWN_ANT.get(), buildAntAttributes( + AntarchySettings.brownAntHealth(), + AntarchySettings.brownAntMovementSpeed(), + AntarchySettings.brownAntAttackDamage() + ).build()); + FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.RAINBOW_ANT.get(), buildAntAttributes( + AntarchySettings.rainbowAntHealth(), + AntarchySettings.rainbowAntMovementSpeed(), + AntarchySettings.rainbowAntAttackDamage() + ).build()); + FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.MOLEWORM.get(), MolewormEntity.createAttributes().build()); + FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.MOLEVORE.get(), MolevoreEntity.createAttributes().build()); + } + +} diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricItems.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricItems.java new file mode 100644 index 00000000..a7e9409d --- /dev/null +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricItems.java @@ -0,0 +1,1534 @@ +package com.craisinlord.antarchy.fabric.registry; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.compat.infinity.InfinityCompat; +import com.craisinlord.antarchy.compat.infinity.InfinityCompatVersion; +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.CreativeTabOrder; +import com.craisinlord.antarchy.content.block.*; +import com.craisinlord.antarchy.content.AntarchySoundEvents; +import com.craisinlord.antarchy.content.item.BloodCrystalArmorItem; +import com.craisinlord.antarchy.content.item.BloodCrystalAppleItem; +import com.craisinlord.antarchy.content.item.BloodCrystalKatanaItem; +import com.craisinlord.antarchy.content.block.entity.AntNestBlockEntity; +import com.craisinlord.antarchy.content.block.entity.DreamCampfireBlockEntity; +import com.craisinlord.antarchy.content.block.entity.HushweedBlockEntity; +import com.craisinlord.antarchy.content.block.entity.PotentNyxiteBlockEntity; +import com.craisinlord.antarchy.content.block.entity.WaspNestBlockEntity; +import com.craisinlord.antarchy.content.fluid.BileLiquidBlock; +import com.craisinlord.antarchy.content.fluid.LumenLiquidBlock; +import com.craisinlord.antarchy.content.worldgen.ants.BrownAntNestFeature; +import com.craisinlord.antarchy.content.worldgen.ants.RainbowAntNestFeature; +import com.craisinlord.antarchy.content.worldgen.ants.RedAntNestFeature; +import com.craisinlord.antarchy.content.worldgen.ants.TermiteNestFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynBileCystFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynBileVeinFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynCreepvineFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynWallAmberMossFeature; +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.NyxiteSpikeFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.PotentNyxiteFeature; +import com.craisinlord.antarchy.fabric.content.fluid.AntiwaterFluid; +import com.craisinlord.antarchy.fabric.content.fluid.AntiwaterLiquidBlock; +import com.craisinlord.antarchy.fabric.item.DeferredSpawnEggItem; +import com.craisinlord.antarchy.fabric.network.AntarchyFabricNetworking; +import com.craisinlord.antarchy.fabric.registry.DeferredBlock; +import com.craisinlord.antarchy.fabric.registry.DeferredHolder; +import com.craisinlord.antarchy.fabric.registry.DeferredItem; +import com.craisinlord.antarchy.fabric.registry.DeferredRegister; +import com.craisinlord.antarchy.content.effect.DreadMobEffect; +import com.craisinlord.antarchy.content.effect.GrowthMobEffect; +import com.craisinlord.antarchy.content.effect.InvertedMobEffect; +import com.craisinlord.antarchy.content.effect.ParalyzedMobEffect; +import com.craisinlord.antarchy.content.effect.ShrinkMobEffect; +import com.craisinlord.antarchy.content.effect.StinkyMobEffect; +import com.craisinlord.antarchy.content.entity.AppleCowEntityVariants.AppleCow; +import com.craisinlord.antarchy.content.entity.AppleCowEntityVariants.EnchantedGoldenAppleCow; +import com.craisinlord.antarchy.content.entity.AppleCowEntityVariants.GoldenAppleCow; +import com.craisinlord.antarchy.content.entity.cloud_shark.CloudSharkEntity; +import com.craisinlord.antarchy.content.entity.BedBugEntity; +import com.craisinlord.antarchy.content.entity.ButterflyEntity; +import com.craisinlord.antarchy.content.entity.CaterpillarEntity; +import com.craisinlord.antarchy.content.entity.DiamondMinecartEntity; +import com.craisinlord.antarchy.content.entity.DrTrayaurusEntity; +import com.craisinlord.antarchy.content.entity.brutalfly.BrutalflyEntity; +import com.craisinlord.antarchy.content.entity.brutalfly.BrutalflyOrbEntity; +import com.craisinlord.antarchy.content.entity.EasterBunnyEntity; +import com.craisinlord.antarchy.content.entity.flying_squirrel.FlyingSquirrelEntity; +import com.craisinlord.antarchy.content.entity.ReverieEntity; +import com.craisinlord.antarchy.content.entity.MissileSquidEntity; +import com.craisinlord.antarchy.content.entity.lucid.LucidEntity; +import com.craisinlord.antarchy.content.entity.lucid.LucidBoltEntity; +import com.craisinlord.antarchy.content.entity.lucid.LucidEyeProjectileEntity; +import com.craisinlord.antarchy.content.entity.HushProjectileEntity; +import com.craisinlord.antarchy.content.entity.JumpyBugEntity; +import com.craisinlord.antarchy.content.entity.StinkBugEntity; +import com.craisinlord.antarchy.content.entity.OuranwoodBoatEntity; +import com.craisinlord.antarchy.content.entity.OuranwoodChestBoatEntity; +import com.craisinlord.antarchy.content.entity.AlphaMantisEntity; +import com.craisinlord.antarchy.content.entity.MantisEntity; +import com.craisinlord.antarchy.content.entity.RollyPollyEntity; +import com.craisinlord.antarchy.content.entity.basilisk.BasiliskEntity; +import com.craisinlord.antarchy.content.entity.EmperorScorpionEntity; +import com.craisinlord.antarchy.content.entity.ScorpionEntity; +import com.craisinlord.antarchy.content.item.LucidEyeItem; +import com.craisinlord.antarchy.content.item.LucidPearlItem; +import com.craisinlord.antarchy.content.entity.nightmare.NightmareEntity; +import com.craisinlord.antarchy.content.entity.ToreterrorEntity; +import com.craisinlord.antarchy.content.entity.WaterBombEntity; +import com.craisinlord.antarchy.content.item.PrimordialArmorItem; +import com.craisinlord.antarchy.content.item.WaterCannonItem; +import com.craisinlord.antarchy.content.entity.kraken.KrakenEntity; +import com.craisinlord.antarchy.content.entity.OctopusBombEntity; +import com.craisinlord.antarchy.content.entity.MolevoreEntity; +import com.craisinlord.antarchy.content.entity.MolewormEntity; +import com.craisinlord.antarchy.content.entity.BomberEntity; +import com.craisinlord.antarchy.content.entity.SizeRayProjectileEntity; +import com.craisinlord.antarchy.content.entity.TriffidEntity; +import com.craisinlord.antarchy.content.entity.WaspEntity; +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 com.craisinlord.antarchy.content.item.BattleAxeItem; +import com.craisinlord.antarchy.content.item.BasiliskDaggerItem; +import com.craisinlord.antarchy.content.item.BigBerthaItem; +import com.craisinlord.antarchy.content.item.KrakensGraspItem; +import com.craisinlord.antarchy.content.item.AntimetalBlockItem; +import com.craisinlord.antarchy.fabric.item.AntimetalScaffoldingItem; +import com.craisinlord.antarchy.content.item.CloudSharkFinSoupItem; +import com.craisinlord.antarchy.content.item.CorneaEarItem; +import com.craisinlord.antarchy.content.item.GravityGunItem; +import com.craisinlord.antarchy.content.item.MinersDreamItem; +import com.craisinlord.antarchy.content.item.DuctTapeBlockItem; +import com.craisinlord.antarchy.content.item.BrutalflyElytraItem; +import com.craisinlord.antarchy.content.item.MobComingSoonTooltipItem; +import com.craisinlord.antarchy.content.item.MogglesItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimateAxeItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimateHoeItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimatePickaxeItem; +import com.craisinlord.antarchy.content.item.ultimate.UtlimateShovelItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimateSwordItem; +import com.craisinlord.antarchy.content.item.DiamondMinecartItem; +import com.craisinlord.antarchy.content.item.ReverieBottleItem; +import com.craisinlord.antarchy.content.item.ScorpionWhipItem; +import com.craisinlord.antarchy.content.item.ScorpionWhipTetherSync; +import com.craisinlord.antarchy.content.network.HerculesBeetleImpactShakeSync; +import com.craisinlord.antarchy.content.item.SizeRayItem; +import com.craisinlord.antarchy.content.item.SquidzookaItem; +import com.craisinlord.antarchy.content.item.RpoLauncherItem; +import com.craisinlord.antarchy.content.item.SimpleToolTier; +import com.craisinlord.antarchy.content.item.ultimate.UltimateArmorItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimateBowItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimateCrossbowItem; +import com.craisinlord.antarchy.content.item.NightmareArmorItem; +import com.craisinlord.antarchy.content.item.NightmareSwordItem; +import com.craisinlord.antarchy.content.item.OuranwoodBoatOnlyItem; +import com.craisinlord.antarchy.content.item.OuranwoodChestBoatItem; +import com.craisinlord.antarchy.content.item.RainbowSugarItem; +import com.craisinlord.antarchy.content.worldgen.elythia.CoralSpikeFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaBiomeSource; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaRiverCarveFunction; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaFloraFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaLargeTuffBoulderFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.PeachForestMossyBoulderFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.PeachForestPondConfiguration; +import com.craisinlord.antarchy.content.worldgen.elythia.PeachForestPondFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaPondFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaSurfaceCoverFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaTuffBoulderFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaUndergroundFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.MolewormCaveEntranceFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.MolewormSurfaceMoundsFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.BrutalflyCocoonFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.LumenPoolFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.LumenLilyPadFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.LumenStreamFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.MolewormTunnelsFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.MolewormWarrensFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.OuranwoodCocoonTreeFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.OuranwoodTreeConfiguration; +import com.craisinlord.antarchy.content.worldgen.elythia.OuranwoodTreeFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.PeachTreeConfiguration; +import com.craisinlord.antarchy.content.worldgen.elythia.PeachTreeFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.TriffidPatchFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynEggPatchFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.ChitenSpikeConfiguration; +import com.craisinlord.antarchy.content.worldgen.cavaryn.ChitenSpikeFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.BedBugNestFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.BedBugSurfaceClusterFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.CloudSeaCalciteFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.LucidAntiwaterPoolFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisBiomeSource; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisDuneConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisDuneFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisFissureConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisFissureFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisBloodCrystalConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisBloodCrystalFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisAntiwaterPoolConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisAntiwaterPoolFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisRibColumnsConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisRibColumnsFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisSpikeConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisSpikeFeature; +import com.craisinlord.antarchy.content.client.particle.InvertedGeyserBaseParticleOptions; +import com.craisinlord.antarchy.content.client.particle.InvertedGeyserParticleOptions; +import com.craisinlord.antarchy.content.portal.PermanentPortalType; +import java.util.List; +import java.util.ArrayList; +import java.util.Comparator; +import com.mojang.serialization.MapCodec; +import net.fabricmc.fabric.api.object.builder.v1.entity.FabricDefaultAttributeRegistry; +import net.fabricmc.fabric.api.registry.FabricBrewingRecipeRegistryBuilder; +import net.minecraft.advancements.critereon.EntitySubPredicate; +import net.minecraft.core.Holder; +import net.minecraft.core.registries.Registries; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.world.item.alchemy.Potion; +import net.minecraft.world.item.alchemy.PotionContents; +import net.minecraft.world.effect.MobEffect; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.tags.TagKey; +import net.minecraft.world.damagesource.DamageType; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.MobCategory; +import net.minecraft.world.entity.ai.attributes.Attribute; +import net.minecraft.world.entity.ai.attributes.AttributeSupplier; +import net.minecraft.world.entity.ai.attributes.Attributes; +import net.minecraft.world.entity.animal.Cow; +import net.minecraft.world.entity.animal.Rabbit; +import net.minecraft.world.entity.SpawnPlacementTypes; +import net.minecraft.world.entity.SpawnPlacements; +import net.minecraft.world.entity.npc.Villager; +import net.minecraft.world.entity.monster.Monster; +import net.minecraft.world.item.ArmorItem; +import net.minecraft.world.item.ArmorMaterial; +import net.minecraft.world.item.BucketItem; +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.PlaceOnWaterBlockItem; +import net.minecraft.world.item.Rarity; +import net.minecraft.world.item.StandingAndWallBlockItem; +import net.minecraft.world.food.FoodProperties; +import net.minecraft.world.item.Tier; +import net.minecraft.world.item.Tiers; +import net.minecraft.world.item.alchemy.Potions; +import net.minecraft.world.item.crafting.Ingredient; +import net.minecraft.world.flag.FeatureFlags; +import net.minecraft.core.Direction; +import net.minecraft.core.particles.ParticleType; +import net.minecraft.core.particles.SimpleParticleType; +import net.minecraft.util.valueproviders.UniformInt; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.AmethystClusterBlock; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.DropExperienceBlock; +import net.minecraft.world.level.block.GlowLichenBlock; +import net.minecraft.world.level.block.HorizontalDirectionalBlock; +import net.minecraft.world.level.block.LiquidBlock; +import net.minecraft.world.level.block.RotatedPillarBlock; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.block.VineBlock; +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.biome.BiomeSource; +import net.minecraft.world.level.levelgen.DensityFunction; +import net.minecraft.world.level.levelgen.feature.Feature; +import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; +import net.minecraft.world.level.levelgen.feature.configurations.SimpleBlockConfiguration; +import net.minecraft.world.level.levelgen.Heightmap; +import net.fabricmc.loader.api.FabricLoader; +import net.minecraft.world.level.material.Fluid; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.block.Mirror; +import net.minecraft.world.level.block.Rotation; +import com.craisinlord.antarchy.fabric.AntarchyFabricContent; + +public final class AntarchyFabricItems { + + public static final DeferredRegister.Items ITEMS = DeferredRegister.createItems(Antarchy.MODID); + + + private static final Tier ULTIMATE_TIER = new SimpleToolTier( + 3072, + 10.5F, + 0.0F, + Tiers.NETHERITE.getIncorrectBlocksForDrops(), + 25, + AntarchyFabricItems::ultimateRepairIngredient + ); + + + private static final Tier BLOOD_CRYSTAL_KATANA_TIER = new SimpleToolTier( + 1200, + 8.0F, + 0.0F, + Tiers.DIAMOND.getIncorrectBlocksForDrops(), + 18, + AntarchyFabricItems::bloodCrystalRepairIngredient + ); + + + public static final DeferredItem NIGHTMARE_SCALE = ITEMS.registerSimpleItem("nightmare_scale", new Item.Properties().rarity(Rarity.RARE).fireResistant()); + + + public static final DeferredItem PRIMORDIAL_SCUTE = ITEMS.registerSimpleItem("primordial_scute", + new Item.Properties().rarity(Rarity.UNCOMMON)); + + + + public static final DeferredItem DUPLICATOR_LOG_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.DUPLICATOR_LOG); + + + public static final DeferredItem OURANWOOD_LOG_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.OURANWOOD_LOG); + + + public static final DeferredItem OURANWOOD_WOOD_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.OURANWOOD_WOOD); + + + public static final DeferredItem MOSSY_OURANWOOD_LOG_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.MOSSY_OURANWOOD_LOG); + + + public static final DeferredItem MOSSY_OURANWOOD_WOOD_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.MOSSY_OURANWOOD_WOOD); + + + public static final DeferredItem STRIPPED_OURANWOOD_LOG_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.STRIPPED_OURANWOOD_LOG); + + + public static final DeferredItem STRIPPED_OURANWOOD_WOOD_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.STRIPPED_OURANWOOD_WOOD); + + + public static final DeferredItem OURANWOOD_PLANKS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.OURANWOOD_PLANKS); + + + public static final DeferredItem OURANWOOD_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.OURANWOOD_STAIRS); + + + public static final DeferredItem OURANWOOD_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.OURANWOOD_SLAB); + + + public static final DeferredItem OURANWOOD_FENCE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.OURANWOOD_FENCE); + + + public static final DeferredItem OURANWOOD_FENCE_GATE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.OURANWOOD_FENCE_GATE); + + + public static final DeferredItem OURANWOOD_DOOR_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.OURANWOOD_DOOR); + + + public static final DeferredItem OURANWOOD_TRAPDOOR_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.OURANWOOD_TRAPDOOR); + + + public static final DeferredItem OURANWOOD_PRESSURE_PLATE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.OURANWOOD_PRESSURE_PLATE); + + + public static final DeferredItem OURANWOOD_BUTTON_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.OURANWOOD_BUTTON); + + + public static final DeferredItem OURANWOOD_LEAVES_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.OURANWOOD_LEAVES); + + + public static final DeferredItem OURANWOOD_ACORN = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.OURANWOOD_ACORN_BLOCK); + + + public static final DeferredItem PEACH_LOG_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.PEACH_LOG); + + + public static final DeferredItem PEACH_WOOD_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.PEACH_WOOD); + + + public static final DeferredItem STRIPPED_PEACH_LOG_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.STRIPPED_PEACH_LOG); + + + public static final DeferredItem STRIPPED_PEACH_WOOD_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.STRIPPED_PEACH_WOOD); + + + public static final DeferredItem PEACH_PLANKS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.PEACH_PLANKS); + + + public static final DeferredItem PEACH_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.PEACH_STAIRS); + + + public static final DeferredItem PEACH_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.PEACH_SLAB); + + + public static final DeferredItem PEACH_FENCE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.PEACH_FENCE); + + + public static final DeferredItem PEACH_FENCE_GATE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.PEACH_FENCE_GATE); + + + public static final DeferredItem PEACH_DOOR_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.PEACH_DOOR); + + + public static final DeferredItem PEACH_TRAPDOOR_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.PEACH_TRAPDOOR); + + + public static final DeferredItem PEACH_PRESSURE_PLATE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.PEACH_PRESSURE_PLATE); + + + public static final DeferredItem PEACH_BUTTON_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.PEACH_BUTTON); + + + public static final DeferredItem PEACH_LEAVES_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.PEACH_LEAVES); + + + public static final DeferredItem PEACH_SAPLING_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.PEACH_SAPLING); + + + public static final DeferredItem ORANGE_MILKWEED_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.ORANGE_MILKWEED); + + + public static final DeferredItem PINK_MILKWEED_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.PINK_MILKWEED); + + + public static final DeferredItem CAMELLIA_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.CAMELLIA); + + + public static final DeferredItem SPIDER_LILY_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.SPIDER_LILY); + + + public static final DeferredItem GIANT_LILY_PAD_ITEM = ITEMS.register("giant_lily_pad", + () -> new PlaceOnWaterBlockItem(AntarchyFabricBlocks.GIANT_LILY_PAD.get(), new Item.Properties())); + + + public static final DeferredItem OURANWOOD_SIGN_ITEM = ITEMS.register("ouranwood_sign", + () -> new net.minecraft.world.item.SignItem(new Item.Properties().stacksTo(16), AntarchyFabricBlocks.OURANWOOD_SIGN.get(), AntarchyFabricBlocks.OURANWOOD_WALL_SIGN.get())); + + + public static final DeferredItem OURANWOOD_HANGING_SIGN_ITEM = ITEMS.register("ouranwood_hanging_sign", + () -> new net.minecraft.world.item.HangingSignItem(AntarchyFabricBlocks.OURANWOOD_HANGING_SIGN.get(), AntarchyFabricBlocks.OURANWOOD_WALL_HANGING_SIGN.get(), new Item.Properties().stacksTo(16))); + + + public static final DeferredItem OURANWOOD_BOAT = ITEMS.register("ouranwood_boat", + () -> new OuranwoodBoatOnlyItem(AntarchyFabricEntities.OURANWOOD_BOAT_ENTITY.get(), new Item.Properties().stacksTo(1))); + + + public static final DeferredItem OURANWOOD_CHEST_BOAT = ITEMS.register("ouranwood_chest_boat", + () -> new OuranwoodChestBoatItem(AntarchyFabricEntities.OURANWOOD_CHEST_BOAT_ENTITY.get(), new Item.Properties().stacksTo(1))); + + + public static final DeferredItem PEACH_SIGN_ITEM = ITEMS.register("peach_sign", + () -> new net.minecraft.world.item.SignItem(new Item.Properties().stacksTo(16), AntarchyFabricBlocks.PEACH_SIGN.get(), AntarchyFabricBlocks.PEACH_WALL_SIGN.get())); + + + public static final DeferredItem PEACH_HANGING_SIGN_ITEM = ITEMS.register("peach_hanging_sign", + () -> new net.minecraft.world.item.HangingSignItem(AntarchyFabricBlocks.PEACH_HANGING_SIGN.get(), AntarchyFabricBlocks.PEACH_WALL_HANGING_SIGN.get(), new Item.Properties().stacksTo(16))); + + + public static final DeferredItem PEACH_BOAT = ITEMS.register("peach_boat", + () -> new com.craisinlord.antarchy.content.item.PeachBoatOnlyItem(AntarchyFabricEntities.PEACH_BOAT_ENTITY.get(), new Item.Properties().stacksTo(1))); + + + public static final DeferredItem PEACH_CHEST_BOAT = ITEMS.register("peach_chest_boat", + () -> new com.craisinlord.antarchy.content.item.PeachChestBoatItem(AntarchyFabricEntities.PEACH_CHEST_BOAT_ENTITY.get(), new Item.Properties().stacksTo(1))); + + + public static final DeferredItem DUPLICATOR_SAPLING_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.DUPLICATOR_SAPLING); + + + public static final DeferredItem RED_ANT_NEST_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.RED_ANT_NEST); + + + public static final DeferredItem BROWN_ANT_NEST_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.BROWN_ANT_NEST); + + + public static final DeferredItem RAINBOW_ANT_NEST_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.RAINBOW_ANT_NEST); + + + public static final DeferredItem URANIUM_ORE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.URANIUM_ORE); + + + public static final DeferredItem DEEPSLATE_URANIUM_ORE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.DEEPSLATE_URANIUM_ORE); + + + public static final DeferredItem TITANIUM_ORE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TITANIUM_ORE); + + + public static final DeferredItem DEEPSLATE_TITANIUM_ORE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.DEEPSLATE_TITANIUM_ORE); + + + public static final DeferredItem URANIUM_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.URANIUM_BLOCK); + + + public static final DeferredItem TITANIUM_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TITANIUM_BLOCK); + + + public static final DeferredItem RAW_URANIUM_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.RAW_URANIUM_BLOCK); + + + public static final DeferredItem RAW_TITANIUM_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.RAW_TITANIUM_BLOCK); + + + public static final DeferredItem CUT_URANIUM_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.CUT_URANIUM); + + + public static final DeferredItem CUT_TITANIUM_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.CUT_TITANIUM); + + + public static final DeferredItem CUT_URANIUM_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.CUT_URANIUM_SLAB); + + + public static final DeferredItem CUT_TITANIUM_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.CUT_TITANIUM_SLAB); + + + public static final DeferredItem CUT_URANIUM_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.CUT_URANIUM_STAIRS); + + + public static final DeferredItem CUT_TITANIUM_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.CUT_TITANIUM_STAIRS); + + + public static final DeferredItem CHISELED_URANIUM_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.CHISELED_URANIUM); + + + public static final DeferredItem CHISELED_TITANIUM_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.CHISELED_TITANIUM); + + + public static final DeferredItem URANIUM_BULB_ITEM = ITEMS.register("uranium_bulb", + () -> new com.craisinlord.antarchy.content.item.SignalSavingBulbItem(AntarchyFabricBlocks.URANIUM_BULB.get(), new Item.Properties())); + + + public static final DeferredItem TITANIUM_BULB_ITEM = ITEMS.register("titanium_bulb", + () -> new com.craisinlord.antarchy.content.item.SignalSavingBulbItem(AntarchyFabricBlocks.TITANIUM_BULB.get(), new Item.Properties())); + + + public static final DeferredItem URANIUM_DOOR_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.URANIUM_DOOR); + + + public static final DeferredItem TITANIUM_DOOR_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TITANIUM_DOOR); + + + public static final DeferredItem URANIUM_TRAPDOOR_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.URANIUM_TRAPDOOR); + + + public static final DeferredItem TITANIUM_TRAPDOOR_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TITANIUM_TRAPDOOR); + + + public static final DeferredItem URANIUM_BARS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.URANIUM_BARS); + + + public static final DeferredItem TITANIUM_BARS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TITANIUM_BARS); + + + public static final DeferredItem ANTIMETAL_ITEM = ITEMS.register("antimetal", + () -> new AntimetalBlockItem(AntarchyFabricBlocks.ANTIMETAL.get(), new Item.Properties())); + + + public static final DeferredItem POLISHED_ANTIMETAL_ITEM = ITEMS.register("polished_antimetal", + () -> new AntimetalBlockItem(AntarchyFabricBlocks.POLISHED_ANTIMETAL.get(), new Item.Properties())); + + + public static final DeferredItem ANTIMETAL_SCAFFOLDING_ITEM = ITEMS.register("antimetal_scaffolding", + () -> new AntimetalScaffoldingItem(AntarchyFabricBlocks.ANTIMETAL_SCAFFOLDING.get(), new Item.Properties())); + + + public static final DeferredItem SMALL_BLOOD_CRYSTAL_BUD_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.SMALL_BLOOD_CRYSTAL_BUD); + + + public static final DeferredItem MEDIUM_BLOOD_CRYSTAL_BUD_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.MEDIUM_BLOOD_CRYSTAL_BUD); + + + public static final DeferredItem LARGE_BLOOD_CRYSTAL_BUD_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.LARGE_BLOOD_CRYSTAL_BUD); + + + public static final DeferredItem BUDDING_BLOOD_CRYSTAL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.BUDDING_BLOOD_CRYSTAL); + + + public static final DeferredItem BLOOD_CRYSTAL_ITEM = ITEMS.register("blood_crystal_block", + () -> new net.minecraft.world.item.BlockItem(AntarchyFabricBlocks.BLOOD_CRYSTAL.get(), new Item.Properties())); + + + public static final DeferredItem BLOOD_CRYSTAL_CRYSTAL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.BLOOD_CRYSTAL_CRYSTAL); + + + public static final DeferredItem DREAM_SAND_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.DREAM_SAND); + + + public static final DeferredItem DREAM_SANDSTONE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.DREAM_SANDSTONE); + + + public static final DeferredItem CHISELED_DREAM_SANDSTONE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.CHISELED_DREAM_SANDSTONE); + + + public static final DeferredItem CUT_DREAM_SANDSTONE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.CUT_DREAM_SANDSTONE); + + + public static final DeferredItem SMOOTH_DREAM_SANDSTONE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.SMOOTH_DREAM_SANDSTONE); + + + public static final DeferredItem DREAM_SANDSTONE_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.DREAM_SANDSTONE_STAIRS); + + + public static final DeferredItem DREAM_SANDSTONE_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.DREAM_SANDSTONE_SLAB); + + + public static final DeferredItem DREAM_SANDSTONE_WALL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.DREAM_SANDSTONE_WALL); + + + public static final DeferredItem SMOOTH_DREAM_SANDSTONE_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.SMOOTH_DREAM_SANDSTONE_STAIRS); + + + public static final DeferredItem SMOOTH_DREAM_SANDSTONE_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.SMOOTH_DREAM_SANDSTONE_SLAB); + + + public static final DeferredItem CUT_DREAM_SANDSTONE_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.CUT_DREAM_SANDSTONE_SLAB); + + + public static final DeferredItem DEAD_STAR_CORAL_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.DEAD_STAR_CORAL_BLOCK); + + + public static final DeferredItem DEAD_STAR_CORAL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.DEAD_STAR_CORAL); + + + public static final DeferredItem DEAD_STAR_CORAL_FAN_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.DEAD_STAR_CORAL_FAN); + + + public static final DeferredItem STAR_CORAL_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.STAR_CORAL_BLOCK); + + + public static final DeferredItem STAR_CORAL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.STAR_CORAL); + + + public static final DeferredItem STAR_CORAL_FAN_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.STAR_CORAL_FAN); + + + public static final DeferredItem DUCT_TAPE_ITEM = ITEMS.register("duct_tape", + () -> new DuctTapeBlockItem(AntarchyFabricBlocks.DUCT_TAPE.get(), new Item.Properties().stacksTo(1))); + + + public static final DeferredItem INFESTED_ROOTED_DIRT_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.INFESTED_ROOTED_DIRT); + + + public static final DeferredItem INFESTED_COARSE_DIRT_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.INFESTED_COARSE_DIRT); + + + public static final DeferredItem NYXITE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.NYXITE); + + + public static final DeferredItem POLISHED_NYXITE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.POLISHED_NYXITE); + + + public static final DeferredItem CHISELED_NYXITE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.CHISELED_NYXITE); + + + public static final DeferredItem NYXITE_BRICKS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.NYXITE_BRICKS); + + + public static final DeferredItem NYXITE_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.NYXITE_STAIRS); + + + public static final DeferredItem NYXITE_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.NYXITE_SLAB); + + + public static final DeferredItem NYXITE_WALL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.NYXITE_WALL); + + + public static final DeferredItem POLISHED_NYXITE_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.POLISHED_NYXITE_STAIRS); + + + public static final DeferredItem POLISHED_NYXITE_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.POLISHED_NYXITE_SLAB); + + + public static final DeferredItem POLISHED_NYXITE_WALL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.POLISHED_NYXITE_WALL); + + + public static final DeferredItem NYXITE_BRICK_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.NYXITE_BRICK_STAIRS); + + + public static final DeferredItem NYXITE_BRICK_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.NYXITE_BRICK_SLAB); + + + public static final DeferredItem NYXITE_BRICK_WALL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.NYXITE_BRICK_WALL); + + + public static final DeferredItem SHELLSTONE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.SHELLSTONE); + + + public static final DeferredItem POLISHED_SHELLSTONE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.POLISHED_SHELLSTONE); + + + public static final DeferredItem SHELLSTONE_BRICKS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.SHELLSTONE_BRICKS); + + + public static final DeferredItem CHISELED_SHELLSTONE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.CHISELED_SHELLSTONE); + + + public static final DeferredItem MOSSY_SHELLSTONE_BRICKS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.MOSSY_SHELLSTONE_BRICKS); + + + public static final DeferredItem CRACKED_SHELLSTONE_BRICKS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.CRACKED_SHELLSTONE_BRICKS); + + + public static final DeferredItem MOSSY_SHELLSTONE_BRICK_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.MOSSY_SHELLSTONE_BRICK_STAIRS); + + + public static final DeferredItem MOSSY_SHELLSTONE_BRICK_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.MOSSY_SHELLSTONE_BRICK_SLAB); + + + public static final DeferredItem MOSSY_SHELLSTONE_BRICK_WALL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.MOSSY_SHELLSTONE_BRICK_WALL); + + + public static final DeferredItem SHELLSTONE_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.SHELLSTONE_STAIRS); + + + public static final DeferredItem SHELLSTONE_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.SHELLSTONE_SLAB); + + + public static final DeferredItem SHELLSTONE_WALL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.SHELLSTONE_WALL); + + + public static final DeferredItem POLISHED_SHELLSTONE_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.POLISHED_SHELLSTONE_STAIRS); + + + public static final DeferredItem POLISHED_SHELLSTONE_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.POLISHED_SHELLSTONE_SLAB); + + + public static final DeferredItem POLISHED_SHELLSTONE_WALL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.POLISHED_SHELLSTONE_WALL); + + + public static final DeferredItem SHELLSTONE_BRICK_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.SHELLSTONE_BRICK_STAIRS); + + + public static final DeferredItem SHELLSTONE_BRICK_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.SHELLSTONE_BRICK_SLAB); + + + public static final DeferredItem SHELLSTONE_BRICK_WALL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.SHELLSTONE_BRICK_WALL); + + + public static final DeferredItem TRIFFID_GOO_BLOCK_ITEM = ITEMS.register("triffid_goo_block", + () -> new com.craisinlord.antarchy.content.item.TriffidGooBlockItem(AntarchyFabricBlocks.TRIFFID_GOO_BLOCK.get(), new Item.Properties())); + + + public static final DeferredItem PALE_NYXITE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.PALE_NYXITE); + + + public static final DeferredItem NYXITE_SPIKE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.NYXITE_SPIKE); + + + public static final DeferredItem POTENT_NYXITE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.POTENT_NYXITE); + + + public static final DeferredItem UMBRAL_MOSS_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.UMBRAL_MOSS_BLOCK); + + + public static final DeferredItem UMBRAL_MOSS_CARPET_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.UMBRAL_MOSS_CARPET); + + + public static final DeferredItem BLUSH_MOSS_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.BLUSH_MOSS_BLOCK); + + + public static final DeferredItem BLUSH_MOSS_CARPET_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.BLUSH_MOSS_CARPET); + + + public static final DeferredItem DREAM_TORCH_ITEM = ITEMS.register("dream_torch", + () -> new StandingAndWallBlockItem(AntarchyFabricBlocks.DREAM_TORCH.get(), AntarchyFabricBlocks.DREAM_WALL_TORCH.get(), new Item.Properties(), Direction.UP)); + + + public static final DeferredItem DREAM_LANTERN_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.DREAM_LANTERN); + + + public static final DeferredItem DREAM_CAMPFIRE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.DREAM_CAMPFIRE); + + + public static final DeferredItem BED_BUG_EGG_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.BED_BUG_EGG); + + + public static final DeferredItem WASP_NEST_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.WASP_NEST); + + + public static final DeferredItem HUSHWEED_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.HUSHWEED); + + + public static final DeferredItem BILE_BUCKET = ITEMS.register("bile_bucket", + () -> new BucketItem(AntarchyFabricMisc.BILE.get(), new Item.Properties().craftRemainder(Items.BUCKET).stacksTo(1))); + + + public static final DeferredItem ICHOR_BUCKET = ITEMS.register("ichor_bucket", + () -> new BucketItem(AntarchyFabricMisc.ICHOR.get(), new Item.Properties().craftRemainder(Items.BUCKET).stacksTo(1))); + + + public static final DeferredItem ANTIWATER_BUCKET = ITEMS.register("antiwater_bucket", + () -> new BucketItem(AntarchyFabricMisc.ANTIWATER.get(), new Item.Properties().craftRemainder(Items.BUCKET).stacksTo(1))); + + + public static final DeferredItem LUMEN_BUCKET = ITEMS.register("lumen_bucket", + () -> new BucketItem(AntarchyFabricMisc.LUMEN.get(), new Item.Properties().craftRemainder(Items.BUCKET).stacksTo(1))); + + + public static final DeferredItem LUMEN_FROGLIGHT_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.LUMEN_FROGLIGHT); + + + public static final DeferredItem ROSEATE_FROGLIGHT_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.ROSEATE_FROGLIGHT); + + + public static final DeferredItem CLOUD_BUCKET = ITEMS.register("cloud_bucket", + () -> new com.craisinlord.antarchy.content.item.CloudBucketItem(AntarchyFabricBlocks.CLOUD_BLOCK.get(), new Item.Properties().craftRemainder(Items.BUCKET))); + + + public static final DeferredItem BLOOD_CRYSTAL_SHARD = ITEMS.register("blood_crystal_shard", + () -> new com.craisinlord.antarchy.content.item.BloodCrystalShardItem(new Item.Properties())); + + + public static final DeferredItem BLOOD_CRYSTAL_APPLE = ITEMS.register("blood_crystal_apple", + () -> new BloodCrystalAppleItem(new Item.Properties() + .rarity(Rarity.RARE) + .food(new net.minecraft.world.food.FoodProperties.Builder() + .nutrition(4) + .saturationModifier(1.2f) + .effect(new MobEffectInstance(net.minecraft.world.effect.MobEffects.REGENERATION, 100, 1), 1.0f) + .alwaysEdible() + .build()))); + + + public static final DeferredItem BLOOD_CRYSTAL_HELMET = ITEMS.register("blood_crystal_helmet", + () -> new BloodCrystalArmorItem(net.minecraft.core.Holder.direct(AntarchyFabricMisc.BLOOD_CRYSTAL_ARMOR_MATERIAL.get()), ArmorItem.Type.HELMET, new Item.Properties().rarity(Rarity.RARE))); + + + public static final DeferredItem BLOOD_CRYSTAL_CHESTPLATE = ITEMS.register("blood_crystal_chestplate", + () -> new BloodCrystalArmorItem(net.minecraft.core.Holder.direct(AntarchyFabricMisc.BLOOD_CRYSTAL_ARMOR_MATERIAL.get()), ArmorItem.Type.CHESTPLATE, new Item.Properties().rarity(Rarity.RARE))); + + + public static final DeferredItem BLOOD_CRYSTAL_LEGGINGS = ITEMS.register("blood_crystal_leggings", + () -> new BloodCrystalArmorItem(net.minecraft.core.Holder.direct(AntarchyFabricMisc.BLOOD_CRYSTAL_ARMOR_MATERIAL.get()), ArmorItem.Type.LEGGINGS, new Item.Properties().rarity(Rarity.RARE))); + + + public static final DeferredItem BLOOD_CRYSTAL_BOOTS = ITEMS.register("blood_crystal_boots", + () -> new BloodCrystalArmorItem(net.minecraft.core.Holder.direct(AntarchyFabricMisc.BLOOD_CRYSTAL_ARMOR_MATERIAL.get()), ArmorItem.Type.BOOTS, new Item.Properties().rarity(Rarity.RARE))); + + + public static final DeferredItem BLOOD_CRYSTAL_KATANA = ITEMS.register("blood_crystal_katana", + () -> new BloodCrystalKatanaItem( + BLOOD_CRYSTAL_KATANA_TIER, + new Item.Properties().stacksTo(1).durability(1200).rarity(Rarity.RARE), + AntarchySettings.bloodCrystalKatanaAttackDamage(), + -2.2F + )); + + + public static final DeferredItem MANTIS_CLAW = ITEMS.registerSimpleItem("mantis_claw", new Item.Properties().rarity(Rarity.UNCOMMON)); + + + public static final DeferredItem KING_SCALE = ITEMS.register("king_scale", + () -> new MobComingSoonTooltipItem(new Item.Properties().rarity(Rarity.RARE))); + + + public static final DeferredItem QUEEN_SCALE = ITEMS.register("queen_scale", + () -> new MobComingSoonTooltipItem(new Item.Properties().rarity(Rarity.RARE))); + + + public static final DeferredItem STINK_BUG_ITEM = ITEMS.register("stink_bug", + () -> new MobComingSoonTooltipItem(new Item.Properties().rarity(Rarity.UNCOMMON))); + + + public static final DeferredItem JUMPY_BUG_LEG = ITEMS.register("jumpy_bug_leg", + () -> new MobComingSoonTooltipItem(new Item.Properties().rarity(Rarity.UNCOMMON))); + + + public static final DeferredItem JUMPY_BOOTS = ITEMS.register("jumpy_boots", + () -> new com.craisinlord.antarchy.content.item.JumpyBootsItem( + net.minecraft.core.Holder.direct(AntarchyFabricMisc.JUMPY_BOOTS_ARMOR_MATERIAL.get()), + new Item.Properties().stacksTo(1).rarity(Rarity.UNCOMMON).fireResistant().durability(ArmorItem.Type.BOOTS.getDurability(37)) + )); + + + public static final DeferredItem BRUTALFLY_WING = ITEMS.registerSimpleItem("brutalfly_wing", new Item.Properties().rarity(Rarity.UNCOMMON)); + + + public static final DeferredItem BRUTALFLY_ELYTRA = ITEMS.register("brutalfly_elytra", + () -> new BrutalflyElytraItem(new Item.Properties().rarity(Rarity.UNCOMMON).durability(480))); + + + public static final DeferredItem CORNEA_EAR = ITEMS.register("cornea_ear", + () -> new CorneaEarItem(new Item.Properties() + .rarity(Rarity.UNCOMMON) + .food(new FoodProperties.Builder() + .nutrition(2) + .saturationModifier(0.4F) + .build()))); + + + public static final DeferredItem CORN = ITEMS.register("corn", + () -> new Item(new Item.Properties() + .food(new FoodProperties.Builder() + .nutrition(3) + .saturationModifier(0.6F) + .build()))); + + + public static final DeferredItem CORN_SEEDS = ITEMS.register("corn_seeds", + () -> new net.minecraft.world.item.ItemNameBlockItem(AntarchyFabricBlocks.CORN_CROP.get(), new Item.Properties())); + + + public static final DeferredItem RAW_VENISON = ITEMS.register("raw_venison", + () -> new Item(new Item.Properties() + .food(new FoodProperties.Builder() + .nutrition(2) + .saturationModifier(0.3F) + .build()))); + + + public static final DeferredItem COOKED_VENISON = ITEMS.register("cooked_venison", + () -> new Item(new Item.Properties() + .food(new FoodProperties.Builder() + .nutrition(6) + .saturationModifier(0.8F) + .build()))); + + + public static final DeferredItem PEACH = ITEMS.register("peach", + () -> new com.craisinlord.antarchy.content.item.PeachItem()); + + + public static final DeferredItem PEACH_PIE = ITEMS.register("peach_pie", + () -> new Item(new Item.Properties() + .stacksTo(64) + .food(new FoodProperties.Builder() + .nutrition(8) + .saturationModifier(0.3F) + .build()))); + + + public static final DeferredItem CORNBREAD = ITEMS.register("cornbread", + () -> new Item(new Item.Properties() + .stacksTo(64) + .food(new FoodProperties.Builder() + .nutrition(8) + .saturationModifier(0.9F) + .build()))); + + + public static final DeferredItem POPCORN = ITEMS.register("popcorn", + () -> new Item(new Item.Properties() + .stacksTo(64) + .food(new FoodProperties.Builder() + .nutrition(1) + .saturationModifier(0.1F) + .build()))); + + + public static final DeferredItem RAW_CORNDOG = ITEMS.register("raw_corndog", + () -> new Item(new Item.Properties() + .stacksTo(64) + .food(new FoodProperties.Builder() + .nutrition(8) + .saturationModifier(0.7F) + .build()))); + + + public static final DeferredItem COOKED_CORNDOG = ITEMS.register("cooked_corndog", + () -> new Item(new Item.Properties() + .stacksTo(64) + .food(new FoodProperties.Builder() + .nutrition(14) + .saturationModifier(1.1F) + .build()))); + + + public static final DeferredItem HIGH_FRUCTOSE_CORN_SYRUP = ITEMS.register("high_fructose_corn_syrup", + () -> new com.craisinlord.antarchy.content.item.HighFructoseCornSyrupItem(new Item.Properties() + .stacksTo(16) + .food(new FoodProperties.Builder() + .nutrition(0) + .saturationModifier(0.0F) + .alwaysEdible() + .build()))); + + + public static final DeferredItem ROOT_BEER = ITEMS.register("root_beer", + () -> new com.craisinlord.antarchy.content.item.RootBeerItem(new Item.Properties() + .stacksTo(16) + .food(new FoodProperties.Builder() + .nutrition(4) + .saturationModifier(0.4F) + .effect(new MobEffectInstance(MobEffects.REGENERATION, 100, 0), 1.0F) + .alwaysEdible() + .build()))); + + + public static final DeferredItem TRIFFID_GOO = ITEMS.registerSimpleItem("triffid_goo", + new Item.Properties().rarity(Rarity.UNCOMMON)); + + + public static final DeferredItem VORTEX_EYE = ITEMS.register("vortex_eye", + () -> new MobComingSoonTooltipItem(new Item.Properties().rarity(Rarity.RARE))); + + + public static final DeferredItem RAW_URANIUM_SCRAP = ITEMS.registerSimpleItem("raw_uranium_scrap", new Item.Properties().rarity(Rarity.UNCOMMON)); + + + public static final DeferredItem RAW_TITANIUM_SCRAP = ITEMS.registerSimpleItem("raw_titanium_scrap", new Item.Properties().rarity(Rarity.UNCOMMON)); + + + public static final DeferredItem RAW_URANIUM = ITEMS.registerSimpleItem("raw_uranium", new Item.Properties().rarity(Rarity.UNCOMMON)); + + + public static final DeferredItem RAW_TITANIUM = ITEMS.registerSimpleItem("raw_titanium", new Item.Properties().rarity(Rarity.UNCOMMON)); + + + public static final DeferredItem MUD_PIE = ITEMS.register("mud_pie", + () -> new Item(new Item.Properties() + .food(new FoodProperties.Builder() + .nutrition(10) + .saturationModifier(0.9F) + .effect(new MobEffectInstance(MobEffects.CONFUSION, 200), 1.0F) + .build()))); + + + public static final DeferredItem RAINBOW_SUGAR = ITEMS.register("rainbow_sugar", + () -> new RainbowSugarItem(new Item.Properties() + .rarity(Rarity.UNCOMMON) + .food(new FoodProperties.Builder().nutrition(1).saturationModifier(0.0F).alwaysEdible().build()))); + + + public static final DeferredItem URANIUM_NUGGET = ITEMS.registerSimpleItem("uranium_nugget", new Item.Properties().rarity(Rarity.UNCOMMON)); + + + public static final DeferredItem TITANIUM_NUGGET = ITEMS.registerSimpleItem("titanium_nugget", new Item.Properties().rarity(Rarity.UNCOMMON)); + + + public static final DeferredItem URANIUM_INGOT = ITEMS.registerSimpleItem("uranium_ingot", new Item.Properties().rarity(Rarity.UNCOMMON).fireResistant()); + + + public static final DeferredItem TITANIUM_INGOT = ITEMS.registerSimpleItem("titanium_ingot", new Item.Properties().rarity(Rarity.UNCOMMON).fireResistant()); + + + public static final DeferredItem MOLEVORE_NOSE = ITEMS.registerSimpleItem("molevore_nose", new Item.Properties().rarity(Rarity.RARE)); + + + public static final DeferredItem MOLEWORM_ITEM = ITEMS.register("moleworm", + () -> new Item(new Item.Properties() + .food(new FoodProperties.Builder() + .nutrition(1) + .saturationModifier(0.0F) + .effect(new MobEffectInstance(MobEffects.HUNGER, 600), 0.8F) + .build()))); + + + public static final DeferredItem CLOUD_SHARK_FIN = ITEMS.registerSimpleItem("cloud_shark_fin", new Item.Properties().rarity(Rarity.UNCOMMON)); + + + public static final DeferredItem CLOUD_SHARK_FIN_SOUP = ITEMS.register("cloud_shark_fin_soup", + () -> new CloudSharkFinSoupItem(new Item.Properties() + .stacksTo(1) + .craftRemainder(Items.BOWL) + .food(new FoodProperties.Builder() + .nutrition(10) + .saturationModifier(0.8F) + .effect(new MobEffectInstance(MobEffects.DAMAGE_BOOST, 600, 0), 1.0F) + .effect(new MobEffectInstance(MobEffects.SLOW_FALLING, 600, 0), 1.0F) + .build()))); + + + public static final DeferredItem KRAKEN_TOOTH = ITEMS.register("kraken_tooth", + () -> new Item(new Item.Properties().rarity(net.minecraft.world.item.Rarity.RARE))); + + + public static final DeferredItem BASILISK_FANG = ITEMS.registerSimpleItem("basilisk_fang", new Item.Properties().rarity(Rarity.RARE)); + + + public static final DeferredItem BASILISK_DAGGER = ITEMS.register("basilisk_dagger", + () -> new BasiliskDaggerItem(Tiers.IRON, new Item.Properties().rarity(Rarity.RARE), 4, -1.8F)); + + + public static final DeferredItem EMPEROR_SCORPION_STINGER = ITEMS.registerSimpleItem("emperor_scorpion_stinger", new Item.Properties().rarity(Rarity.RARE)); + + + public static final DeferredItem SCORPION_WHIP = ITEMS.register("scorpion_whip", + () -> new ScorpionWhipItem(Tiers.IRON, new Item.Properties().rarity(Rarity.RARE).durability(384))); + + + public static final DeferredItem MOGGLES = ITEMS.register("moggles", + () -> new MogglesItem(net.minecraft.core.Holder.direct(AntarchyFabricMisc.MOGGLES_ARMOR_MATERIAL.get()), new Item.Properties().rarity(Rarity.RARE).stacksTo(1))); + + + public static final DeferredItem FALLEN_KING_CROWN = ITEMS.register("fallen_king_crown", + () -> new com.craisinlord.antarchy.content.item.FallenKingCrownItem( + net.minecraft.core.Holder.direct(AntarchyFabricMisc.FALLEN_KING_CROWN_ARMOR_MATERIAL.get()), + new Item.Properties().rarity(Rarity.RARE) + )); + + + public static final DeferredItem ULTIMATE_HELMET = ITEMS.register("ultimate_helmet", + () -> new UltimateArmorItem( + net.minecraft.core.Holder.direct(AntarchyFabricMisc.ULTIMATE_ARMOR_MATERIAL.get()), + ArmorItem.Type.HELMET, + new Item.Properties() + .rarity(Rarity.EPIC) + .fireResistant() + .durability(ArmorItem.Type.HELMET.getDurability(41)) + )); + + + public static final DeferredItem ULTIMATE_CHESTPLATE = ITEMS.register("ultimate_chestplate", + () -> new UltimateArmorItem( + net.minecraft.core.Holder.direct(AntarchyFabricMisc.ULTIMATE_ARMOR_MATERIAL.get()), + ArmorItem.Type.CHESTPLATE, + new Item.Properties() + .rarity(Rarity.EPIC) + .fireResistant() + .durability(ArmorItem.Type.CHESTPLATE.getDurability(41)) + )); + + + public static final DeferredItem ULTIMATE_LEGGINGS = ITEMS.register("ultimate_leggings", + () -> new UltimateArmorItem( + net.minecraft.core.Holder.direct(AntarchyFabricMisc.ULTIMATE_ARMOR_MATERIAL.get()), + ArmorItem.Type.LEGGINGS, + new Item.Properties() + .rarity(Rarity.EPIC) + .fireResistant() + .durability(ArmorItem.Type.LEGGINGS.getDurability(41)) + )); + + + public static final DeferredItem ULTIMATE_BOOTS = ITEMS.register("ultimate_boots", + () -> new UltimateArmorItem( + net.minecraft.core.Holder.direct(AntarchyFabricMisc.ULTIMATE_ARMOR_MATERIAL.get()), + ArmorItem.Type.BOOTS, + new Item.Properties() + .rarity(Rarity.EPIC) + .fireResistant() + .durability(ArmorItem.Type.BOOTS.getDurability(41)) + )); + + + public static final DeferredItem ULTIMATE_SWORD = ITEMS.register("ultimate_sword", + () -> new UltimateSwordItem( + ULTIMATE_TIER, + new Item.Properties().stacksTo(1).rarity(Rarity.EPIC).fireResistant(), + AntarchySettings::ultimateSwordAttackDamage, + -2.4F + )); + + + public static final DeferredItem ULTIMATE_PICKAXE = ITEMS.register("ultimate_pickaxe", + () -> new UltimatePickaxeItem( + ULTIMATE_TIER, + new Item.Properties().stacksTo(1).rarity(Rarity.EPIC).fireResistant(), + AntarchySettings::ultimatePickaxeAttackDamage, + -2.8F + )); + + + public static final DeferredItem ULTIMATE_AXE = ITEMS.register("ultimate_axe", + () -> new UltimateAxeItem( + ULTIMATE_TIER, + new Item.Properties().stacksTo(1).rarity(Rarity.EPIC).fireResistant(), + AntarchySettings::ultimateAxeAttackDamage, + -3.0F + )); + + + public static final DeferredItem ULTIMATE_SHOVEL = ITEMS.register("ultimate_shovel", + () -> new UtlimateShovelItem( + ULTIMATE_TIER, + new Item.Properties().stacksTo(1).rarity(Rarity.EPIC).fireResistant(), + AntarchySettings::ultimateShovelAttackDamage, + -3.0F + )); + + + public static final DeferredItem ULTIMATE_HOE = ITEMS.register("ultimate_hoe", + () -> new UltimateHoeItem( + ULTIMATE_TIER, + new Item.Properties().stacksTo(1).rarity(Rarity.EPIC).fireResistant(), + AntarchySettings::ultimateHoeAttackDamage, + 0.0F + )); + + + public static final DeferredItem ULTIMATE_BOW = ITEMS.register("ultimate_bow", + () -> new UltimateBowItem(new Item.Properties().stacksTo(1).durability(768).rarity(Rarity.EPIC).fireResistant())); + + + public static final DeferredItem ULTIMATE_CROSSBOW = ITEMS.register("ultimate_crossbow", + () -> new UltimateCrossbowItem(new Item.Properties().stacksTo(1).durability(1024).rarity(Rarity.EPIC).fireResistant())); + + + public static final DeferredItem NIGHTMARE_HELMET = ITEMS.register("nightmare_helmet", + () -> new NightmareArmorItem( + net.minecraft.core.Holder.direct(AntarchyFabricMisc.NIGHTMARE_ARMOR_MATERIAL.get()), + ArmorItem.Type.HELMET, + new Item.Properties() + .rarity(Rarity.EPIC) + .fireResistant() + .durability(ArmorItem.Type.HELMET.getDurability(41)) + )); + + + public static final DeferredItem NIGHTMARE_CHESTPLATE = ITEMS.register("nightmare_chestplate", + () -> new NightmareArmorItem( + net.minecraft.core.Holder.direct(AntarchyFabricMisc.NIGHTMARE_ARMOR_MATERIAL.get()), + ArmorItem.Type.CHESTPLATE, + new Item.Properties() + .rarity(Rarity.EPIC) + .fireResistant() + .durability(ArmorItem.Type.CHESTPLATE.getDurability(41)) + )); + + + public static final DeferredItem NIGHTMARE_LEGGINGS = ITEMS.register("nightmare_leggings", + () -> new NightmareArmorItem( + net.minecraft.core.Holder.direct(AntarchyFabricMisc.NIGHTMARE_ARMOR_MATERIAL.get()), + ArmorItem.Type.LEGGINGS, + new Item.Properties() + .rarity(Rarity.EPIC) + .fireResistant() + .durability(ArmorItem.Type.LEGGINGS.getDurability(41)) + )); + + + public static final DeferredItem NIGHTMARE_BOOTS = ITEMS.register("nightmare_boots", + () -> new NightmareArmorItem( + net.minecraft.core.Holder.direct(AntarchyFabricMisc.NIGHTMARE_ARMOR_MATERIAL.get()), + ArmorItem.Type.BOOTS, + new Item.Properties() + .rarity(Rarity.EPIC) + .fireResistant() + .durability(ArmorItem.Type.BOOTS.getDurability(41)) + )); + + + public static final DeferredItem NIGHTMARE_SWORD = ITEMS.register("nightmare_sword", + () -> new NightmareSwordItem( + ULTIMATE_TIER, + new Item.Properties().stacksTo(1).rarity(Rarity.EPIC).fireResistant(), + -2.4F + )); + + + public static final DeferredItem SHRINK_RAY = ITEMS.register("shrink_ray", + () -> new SizeRayItem( + new Item.Properties().stacksTo(1).durability(512).rarity(Rarity.RARE).fireResistant(), + AntarchyFabricEntities.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"), + "shrink_ray_active" + )); + + + public static final DeferredItem GROWTH_RAY = ITEMS.register("growth_ray", + () -> new SizeRayItem( + new Item.Properties().stacksTo(1).durability(512).rarity(Rarity.RARE).fireResistant(), + AntarchyFabricEntities.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"), + "growth_ray_active" + )); + + + public static final DeferredItem GRAVITY_GUN = ITEMS.register("gravity_gun", + () -> new GravityGunItem(new Item.Properties().stacksTo(1).durability(512).rarity(Rarity.RARE).fireResistant())); + + + // Temporarily disabled: keeping the code but not registering the item for now. + // public static final DeferredItem MINERS_DREAM = ITEMS.register("miners_dream", + // () -> new MinersDreamItem(new Item.Properties().stacksTo(1).rarity(Rarity.RARE))); + + + public static final DeferredItem SQUIDZOOKA = ITEMS.register("squidzooka", + () -> new SquidzookaItem(new Item.Properties().stacksTo(1).durability(384).rarity(Rarity.RARE))); + + public static final DeferredItem RPO_LAUNCHER = ITEMS.register("rpo_launcher", + () -> new RpoLauncherItem(new Item.Properties().stacksTo(1).durability(384).rarity(Rarity.RARE))); + + + public static final DeferredItem BATTLE_AXE = ITEMS.register("battle_axe", + () -> new BattleAxeItem( + Tiers.NETHERITE, + new Item.Properties().stacksTo(1).rarity(Rarity.RARE).fireResistant(), + AntarchySettings::battleAxeAttackDamage, + -3.1F + )); + + + public static final DeferredItem DIAMOND_MINECART_ITEM = ITEMS.register("diamond_minecart", + () -> new DiamondMinecartItem(AntarchyFabricEntities.DIAMOND_MINECART, new Item.Properties().stacksTo(1).rarity(Rarity.RARE))); + + + public static final DeferredItem REVERIE_BOTTLE = ITEMS.register("reverie_bottle", + () -> new ReverieBottleItem(new Item.Properties().stacksTo(1).rarity(Rarity.RARE))); + + + public static final DeferredItem BIG_BERTHA_BLADE = ITEMS.registerSimpleItem( + "big_bertha_blade", + new Item.Properties().rarity(Rarity.EPIC).fireResistant() + ); + + + public static final DeferredItem BIG_BERTHA_HANDLE = ITEMS.registerSimpleItem( + "big_bertha_handle", + new Item.Properties().rarity(Rarity.EPIC).fireResistant() + ); + + + public static final DeferredItem BIG_BERTHA_HILT = ITEMS.registerSimpleItem( + "big_bertha_hilt", + new Item.Properties().rarity(Rarity.EPIC).fireResistant() + ); + + + public static final DeferredItem BIG_BERTHA = ITEMS.register("big_bertha", + () -> new BigBerthaItem( + Tiers.NETHERITE, + new Item.Properties() + .stacksTo(1) + .rarity(Rarity.EPIC) + .fireResistant() + )); + + public static final DeferredItem KRAKEN_TENTACLE = ITEMS.registerSimpleItem( + "kraken_tentacle", + new Item.Properties().rarity(Rarity.RARE) + ); + + public static final DeferredItem KRAKENS_GRASP = ITEMS.register("krakens_grasp", + () -> new KrakensGraspItem( + new Item.Properties() + .stacksTo(1) + .durability(250) + .rarity(Rarity.EPIC) + .fireResistant() + )); + + + + public static final DeferredItem EASTER_BUNNY_SPAWN_EGG = ITEMS.register("easter_bunny_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyFabricEntities.EASTER_BUNNY, 0xFFF2B2, 0xFF85B5, new Item.Properties())); + + + public static final DeferredItem FLYING_SQUIRREL_SPAWN_EGG = ITEMS.register("flying_squirrel_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyFabricEntities.FLYING_SQUIRREL, 0x7D6649, 0xDCC59C, new Item.Properties())); + + + public static final DeferredItem CATERPILLAR_SPAWN_EGG = ITEMS.register("caterpillar_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyFabricEntities.CATERPILLAR, 0xA8D96A, 0xF4E04D, new Item.Properties())); + + + public static final DeferredItem BUTTERFLY_SPAWN_EGG = ITEMS.register("butterfly_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyFabricEntities.BUTTERFLY, 0x7A4A1E, 0xFF7A00, new Item.Properties())); + + + public static final DeferredItem REVERIE_SPAWN_EGG = ITEMS.register("reverie_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyFabricEntities.REVERIE, 0xF2F2F2, 0xBFC3C7, new Item.Properties())); + + + public static final DeferredItem BRUTALFLY_SPAWN_EGG = ITEMS.register("brutalfly_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyFabricEntities.BRUTALFLY, 0x4A2214, 0xFF8A1D, new Item.Properties().rarity(Rarity.EPIC))); + + + public static final DeferredItem RED_ANT_SPAWN_EGG = ITEMS.register("red_ant_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyFabricEntities.RED_ANT, 0xA31818, 0x2B0909, new Item.Properties())); + + + public static final DeferredItem BROWN_ANT_SPAWN_EGG = ITEMS.register("brown_ant_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyFabricEntities.BROWN_ANT, 0x6A4320, 0x26160A, new Item.Properties())); + + + public static final DeferredItem RAINBOW_ANT_SPAWN_EGG = ITEMS.register("rainbow_ant_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyFabricEntities.RAINBOW_ANT, 0x56D4F0, 0xF66DBB, new Item.Properties())); + + + public static final DeferredItem MOLEWORM_SPAWN_EGG = ITEMS.register("moleworm_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyFabricEntities.MOLEWORM, 0xB8B8B8, 0x8A623A, new Item.Properties())); + + + public static final DeferredItem MANTIS_SPAWN_EGG = ITEMS.register("mantis_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyFabricEntities.MANTIS, 0xF8F8F2, 0x63B44A, new Item.Properties())); + + + public static final DeferredItem ALPHA_MANTIS_SPAWN_EGG = ITEMS.register("alpha_mantis_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyFabricEntities.ALPHA_MANTIS, 0x8FDD6C, 0x2F5D22, new Item.Properties())); + + + public static final DeferredItem MOLEVORE_SPAWN_EGG = ITEMS.register("molevore_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyFabricEntities.MOLEVORE, 0x4A4A4A, 0x6B4A2B, new Item.Properties().rarity(Rarity.UNCOMMON))); + + + public static final DeferredItem TRIFFID_SPAWN_EGG = ITEMS.register("triffid_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyFabricEntities.TRIFFID, 0x4C8F3A, 0xFF2FB3, new Item.Properties().rarity(Rarity.UNCOMMON))); + + + public static final DeferredItem APPLE_COW_SPAWN_EGG = ITEMS.register("apple_cow_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyFabricEntities.APPLE_COW, 0xFF1A1A, 0x32FF32, new Item.Properties())); + + + public static final DeferredItem GOLDEN_APPLE_COW_SPAWN_EGG = ITEMS.register("golden_apple_cow_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyFabricEntities.GOLDEN_APPLE_COW, 0xFFE14A, 0x32FF32, new Item.Properties())); + + + public static final DeferredItem ENCHANTED_GOLDEN_APPLE_COW_SPAWN_EGG = ITEMS.register("enchanted_golden_apple_cow_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyFabricEntities.ENCHANTED_GOLDEN_APPLE_COW, 0x7040B6, 0xFFE14A, new Item.Properties())); + + + public static final DeferredItem DR_TRAYAURUS_SPAWN_EGG = ITEMS.register("dr_trayaurus_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyFabricEntities.DR_TRAYAURUS, 0xB7A27B, 0x4A3D29, new Item.Properties())); + + + public static final DeferredItem WASP_SPAWN_EGG = ITEMS.register("wasp_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyFabricEntities.WASP, 0x111111, 0xF1D800, new Item.Properties())); + + + public static final DeferredItem BOMBER_SPAWN_EGG = ITEMS.register("bomber_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyFabricEntities.BOMBER, 0x7A7A7A, 0xB32020, new Item.Properties())); + + + public static final DeferredItem CLOUD_SHARK_SPAWN_EGG = ITEMS.register("cloud_shark_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyFabricEntities.CLOUD_SHARK, 0xDDEAF4, 0x7F96A8, new Item.Properties())); + + + public static final DeferredItem KRAKEN_SPAWN_EGG = ITEMS.register("kraken_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyFabricEntities.KRAKEN, 0x163C53, 0x4F8E99, new Item.Properties().rarity(Rarity.EPIC))); + + + public static final DeferredItem MISSILE_SQUID_SPAWN_EGG = ITEMS.register("missile_squid_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyFabricEntities.MISSILE_SQUID, 0xD88FA7, 0x8D5269, new Item.Properties().rarity(Rarity.UNCOMMON))); + + + public static final DeferredItem OCTOPUS_BOMB_SPAWN_EGG = ITEMS.register("octopus_bomb_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyFabricEntities.OCTOPUS_BOMB, 0xC882C8, 0x5C1A7A, new Item.Properties().rarity(Rarity.UNCOMMON))); + + + public static final DeferredItem NIGHTMARE_SPAWN_EGG = ITEMS.register("nightmare_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyFabricEntities.NIGHTMARE, 0x22121C, 0xB51B2D, new Item.Properties().rarity(Rarity.RARE))); + + + public static final DeferredItem BED_BUG_SPAWN_EGG = ITEMS.register("bed_bug_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyFabricEntities.BED_BUG, 0x3B2218, 0x611111, new Item.Properties())); + + + public static final DeferredItem LUCID_SPAWN_EGG = ITEMS.register("lucid_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyFabricEntities.LUCID, 0xE53935, 0xF4D03F, new Item.Properties().rarity(Rarity.RARE))); + + + public static final DeferredItem SCORPION_SPAWN_EGG = ITEMS.register("scorpion_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyFabricEntities.SCORPION, 0xA8D8FF, 0xE04B5A, new Item.Properties())); + + + public static final DeferredItem BASILISK_SPAWN_EGG = ITEMS.register("basilisk_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyFabricEntities.BASILISK, 0x4A7C40, 0xD4A040, new Item.Properties())); + + + public static final DeferredItem EMPEROR_SCORPION_SPAWN_EGG = ITEMS.register("emperor_scorpion_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyFabricEntities.EMPEROR_SCORPION, 0x3A3242, 0xD8CDB4, new Item.Properties())); + + + public static final DeferredItem LUCID_EYE = ITEMS.register("lucid_eye", + () -> new LucidEyeItem(new Item.Properties().stacksTo(16).rarity(Rarity.UNCOMMON))); + + + public static final DeferredItem LUCID_PEARL = ITEMS.register("lucid_pearl", + () -> new LucidPearlItem( + new Item.Properties().stacksTo(16).rarity(Rarity.UNCOMMON), + AntarchyFabricEntities.LUCID_PEARL_PROJECTILE + )); + + + public static final DeferredItem WATER_CANNON = ITEMS.register("water_cannon", + () -> new WaterCannonItem(new Item.Properties().stacksTo(1).durability(192).rarity(Rarity.RARE))); + + + public static final DeferredItem PRIMORDIAL_HELMET = ITEMS.register("primordial_helmet", + () -> new PrimordialArmorItem(net.minecraft.core.Holder.direct(AntarchyFabricMisc.PRIMORDIAL_ARMOR_MATERIAL.get()), ArmorItem.Type.HELMET, + new Item.Properties().stacksTo(1).rarity(Rarity.RARE).fireResistant().durability(ArmorItem.Type.HELMET.getDurability(37)))); + + + public static final DeferredItem PRIMORDIAL_CHESTPLATE = ITEMS.register("primordial_chestplate", + () -> new PrimordialArmorItem(net.minecraft.core.Holder.direct(AntarchyFabricMisc.PRIMORDIAL_ARMOR_MATERIAL.get()), ArmorItem.Type.CHESTPLATE, + new Item.Properties().stacksTo(1).rarity(Rarity.RARE).fireResistant().durability(ArmorItem.Type.CHESTPLATE.getDurability(37)))); + + + public static final DeferredItem PRIMORDIAL_LEGGINGS = ITEMS.register("primordial_leggings", + () -> new PrimordialArmorItem(net.minecraft.core.Holder.direct(AntarchyFabricMisc.PRIMORDIAL_ARMOR_MATERIAL.get()), ArmorItem.Type.LEGGINGS, + new Item.Properties().stacksTo(1).rarity(Rarity.RARE).fireResistant().durability(ArmorItem.Type.LEGGINGS.getDurability(37)))); + + + public static final DeferredItem PRIMORDIAL_BOOTS = ITEMS.register("primordial_boots", + () -> new PrimordialArmorItem(net.minecraft.core.Holder.direct(AntarchyFabricMisc.PRIMORDIAL_ARMOR_MATERIAL.get()), ArmorItem.Type.BOOTS, + new Item.Properties().stacksTo(1).rarity(Rarity.RARE).fireResistant().durability(ArmorItem.Type.BOOTS.getDurability(37)))); + + + public static final DeferredItem TORETERROR_SPAWN_EGG = ITEMS.register("toreterror_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyFabricEntities.TORETERROR, 0x90EE90, 0x5C4033, new Item.Properties().rarity(Rarity.EPIC))); + + + public static final DeferredItem CHEEP_SPAWN_EGG = ITEMS.register("cheep_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyFabricEntities.CHEEP, 0xFF00AA, 0x00FF44, new Item.Properties())); + + + // Dorrie is not part of this update yet. + // public static final DeferredItem DORRIE_SPAWN_EGG = ITEMS.register("dorrie_spawn_egg", + // () -> new DeferredSpawnEggItem(AntarchyFabricEntities.DORRIE, 0x6F8CFF, 0xD2F2FF, new Item.Properties())); + + + public static final DeferredItem OURANWOOD_DEER_SPAWN_EGG = ITEMS.register("ouranwood_deer_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyFabricEntities.OURANWOOD_DEER, 0x8A6D4B, 0xE8D9B5, new Item.Properties())); + + + public static final DeferredItem GLIMMER_SPAWN_EGG = ITEMS.register("glimmer_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyFabricEntities.GLIMMER, 0x7DFFFF, 0x2AC7D0, new Item.Properties())); + + + public static final DeferredItem ELKA_SPAWN_EGG = ITEMS.register("elka_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyFabricEntities.ELKA, 0x6B2FA0, 0xFFFFFF, new Item.Properties())); + + + public static final DeferredItem SPIRIT_APPLE = ITEMS.register("spirit_apple", + () -> new com.craisinlord.antarchy.content.item.SpiritAppleItem(new Item.Properties() + .food(new FoodProperties.Builder() + .nutrition(4) + .saturationModifier(0.3F) + .build()))); + + + public static final DeferredItem GLIMMER_BOTTLE = ITEMS.register("glimmer_bottle", + com.craisinlord.antarchy.content.item.GlimmerBottleItem::new); + + + + public static Item cloudBucketItem() { + return CLOUD_BUCKET.get(); + } + + + + public static Item diamondMinecartItem() { + return DIAMOND_MINECART_ITEM.get(); + } + + + + public static Ingredient bloodCrystalRepairIngredient() { + return Ingredient.of(BuiltInRegistries.ITEM.getOptional(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "blood_crystal_shard")) + .orElse(Items.AIR)); + } + + + + public static Ingredient ultimateRepairIngredient() { + return Ingredient.of(TITANIUM_INGOT.get()); + } + + + public static void register() { + ITEMS.register(); + } + +} diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricMisc.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricMisc.java new file mode 100644 index 00000000..c6b3bf88 --- /dev/null +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricMisc.java @@ -0,0 +1,998 @@ +package com.craisinlord.antarchy.fabric.registry; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.compat.infinity.InfinityCompat; +import com.craisinlord.antarchy.compat.infinity.InfinityCompatVersion; +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.CreativeTabOrder; +import com.craisinlord.antarchy.content.block.*; +import com.craisinlord.antarchy.content.AntarchySoundEvents; +import com.craisinlord.antarchy.content.item.BloodCrystalArmorItem; +import com.craisinlord.antarchy.content.item.BloodCrystalAppleItem; +import com.craisinlord.antarchy.content.item.BloodCrystalKatanaItem; +import com.craisinlord.antarchy.content.block.entity.AntNestBlockEntity; +import com.craisinlord.antarchy.content.block.entity.DreamCampfireBlockEntity; +import com.craisinlord.antarchy.content.block.entity.HushweedBlockEntity; +import com.craisinlord.antarchy.content.block.entity.PotentNyxiteBlockEntity; +import com.craisinlord.antarchy.content.block.entity.WaspNestBlockEntity; +import com.craisinlord.antarchy.content.fluid.BileLiquidBlock; +import com.craisinlord.antarchy.content.fluid.LumenLiquidBlock; +import com.craisinlord.antarchy.content.worldgen.ants.BrownAntNestFeature; +import com.craisinlord.antarchy.content.worldgen.ants.RainbowAntNestFeature; +import com.craisinlord.antarchy.content.worldgen.ants.RedAntNestFeature; +import com.craisinlord.antarchy.content.worldgen.ants.TermiteNestFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynBileCystFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynBileVeinFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynCreepvineFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynWallAmberMossFeature; +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.NyxiteSpikeFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.PotentNyxiteFeature; +import com.craisinlord.antarchy.fabric.content.fluid.AntiwaterFluid; +import com.craisinlord.antarchy.fabric.content.fluid.AntiwaterLiquidBlock; +import com.craisinlord.antarchy.fabric.item.DeferredSpawnEggItem; +import com.craisinlord.antarchy.fabric.network.AntarchyFabricNetworking; +import com.craisinlord.antarchy.fabric.registry.DeferredBlock; +import com.craisinlord.antarchy.fabric.registry.DeferredHolder; +import com.craisinlord.antarchy.fabric.registry.DeferredItem; +import com.craisinlord.antarchy.fabric.registry.DeferredRegister; +import com.craisinlord.antarchy.content.effect.DreadMobEffect; +import com.craisinlord.antarchy.content.effect.GrowthMobEffect; +import com.craisinlord.antarchy.content.effect.InvertedMobEffect; +import com.craisinlord.antarchy.content.effect.ParalyzedMobEffect; +import com.craisinlord.antarchy.content.effect.ShrinkMobEffect; +import com.craisinlord.antarchy.content.effect.StinkyMobEffect; +import com.craisinlord.antarchy.content.entity.AppleCowEntityVariants.AppleCow; +import com.craisinlord.antarchy.content.entity.AppleCowEntityVariants.EnchantedGoldenAppleCow; +import com.craisinlord.antarchy.content.entity.AppleCowEntityVariants.GoldenAppleCow; +import com.craisinlord.antarchy.content.entity.cloud_shark.CloudSharkEntity; +import com.craisinlord.antarchy.content.entity.BedBugEntity; +import com.craisinlord.antarchy.content.entity.ButterflyEntity; +import com.craisinlord.antarchy.content.entity.CaterpillarEntity; +import com.craisinlord.antarchy.content.entity.DiamondMinecartEntity; +import com.craisinlord.antarchy.content.entity.DrTrayaurusEntity; +import com.craisinlord.antarchy.content.entity.brutalfly.BrutalflyEntity; +import com.craisinlord.antarchy.content.entity.brutalfly.BrutalflyOrbEntity; +import com.craisinlord.antarchy.content.entity.EasterBunnyEntity; +import com.craisinlord.antarchy.content.entity.flying_squirrel.FlyingSquirrelEntity; +import com.craisinlord.antarchy.content.entity.ReverieEntity; +import com.craisinlord.antarchy.content.entity.MissileSquidEntity; +import com.craisinlord.antarchy.content.entity.lucid.LucidEntity; +import com.craisinlord.antarchy.content.entity.lucid.LucidBoltEntity; +import com.craisinlord.antarchy.content.entity.lucid.LucidEyeProjectileEntity; +import com.craisinlord.antarchy.content.entity.HushProjectileEntity; +import com.craisinlord.antarchy.content.entity.JumpyBugEntity; +import com.craisinlord.antarchy.content.entity.StinkBugEntity; +import com.craisinlord.antarchy.content.entity.OuranwoodBoatEntity; +import com.craisinlord.antarchy.content.entity.OuranwoodChestBoatEntity; +import com.craisinlord.antarchy.content.entity.AlphaMantisEntity; +import com.craisinlord.antarchy.content.entity.MantisEntity; +import com.craisinlord.antarchy.content.entity.RollyPollyEntity; +import com.craisinlord.antarchy.content.entity.basilisk.BasiliskEntity; +import com.craisinlord.antarchy.content.entity.EmperorScorpionEntity; +import com.craisinlord.antarchy.content.entity.ScorpionEntity; +import com.craisinlord.antarchy.content.item.LucidEyeItem; +import com.craisinlord.antarchy.content.item.LucidPearlItem; +import com.craisinlord.antarchy.content.entity.nightmare.NightmareEntity; +import com.craisinlord.antarchy.content.entity.ToreterrorEntity; +import com.craisinlord.antarchy.content.entity.WaterBombEntity; +import com.craisinlord.antarchy.content.item.PrimordialArmorItem; +import com.craisinlord.antarchy.content.item.WaterCannonItem; +import com.craisinlord.antarchy.content.entity.kraken.KrakenEntity; +import com.craisinlord.antarchy.content.entity.OctopusBombEntity; +import com.craisinlord.antarchy.content.entity.MolevoreEntity; +import com.craisinlord.antarchy.content.entity.MolewormEntity; +import com.craisinlord.antarchy.content.entity.BomberEntity; +import com.craisinlord.antarchy.content.entity.SizeRayProjectileEntity; +import com.craisinlord.antarchy.content.entity.TriffidEntity; +import com.craisinlord.antarchy.content.entity.WaspEntity; +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 com.craisinlord.antarchy.content.item.BattleAxeItem; +import com.craisinlord.antarchy.content.item.BasiliskDaggerItem; +import com.craisinlord.antarchy.content.item.BigBerthaItem; +import com.craisinlord.antarchy.content.item.AntimetalBlockItem; +import com.craisinlord.antarchy.fabric.item.AntimetalScaffoldingItem; +import com.craisinlord.antarchy.content.item.CloudSharkFinSoupItem; +import com.craisinlord.antarchy.content.item.CorneaEarItem; +import com.craisinlord.antarchy.content.item.GravityGunItem; +import com.craisinlord.antarchy.content.item.MinersDreamItem; +import com.craisinlord.antarchy.content.item.DuctTapeBlockItem; +import com.craisinlord.antarchy.content.item.BrutalflyElytraItem; +import com.craisinlord.antarchy.content.item.MobComingSoonTooltipItem; +import com.craisinlord.antarchy.content.item.MogglesItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimateAxeItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimateHoeItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimatePickaxeItem; +import com.craisinlord.antarchy.content.item.ultimate.UtlimateShovelItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimateSwordItem; +import com.craisinlord.antarchy.content.item.DiamondMinecartItem; +import com.craisinlord.antarchy.content.item.ReverieBottleItem; +import com.craisinlord.antarchy.content.item.ScorpionWhipItem; +import com.craisinlord.antarchy.content.item.ScorpionWhipTetherSync; +import com.craisinlord.antarchy.content.network.HerculesBeetleImpactShakeSync; +import com.craisinlord.antarchy.content.item.SizeRayItem; +import com.craisinlord.antarchy.content.item.SquidzookaItem; +import com.craisinlord.antarchy.content.item.SimpleToolTier; +import com.craisinlord.antarchy.content.item.ultimate.UltimateArmorItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimateBowItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimateCrossbowItem; +import com.craisinlord.antarchy.content.item.NightmareArmorItem; +import com.craisinlord.antarchy.content.item.NightmareSwordItem; +import com.craisinlord.antarchy.content.item.OuranwoodBoatOnlyItem; +import com.craisinlord.antarchy.content.item.OuranwoodChestBoatItem; +import com.craisinlord.antarchy.content.item.RainbowSugarItem; +import com.craisinlord.antarchy.content.worldgen.elythia.CoralSpikeFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaBiomeSource; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaRiverCarveFunction; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaFloraFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaLargeTuffBoulderFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.PeachForestMossyBoulderFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.PeachForestPondConfiguration; +import com.craisinlord.antarchy.content.worldgen.elythia.PeachForestPondFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaPondFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaSurfaceCoverFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaTuffBoulderFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaUndergroundFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.MolewormCaveEntranceFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.MolewormSurfaceMoundsFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.BrutalflyCocoonFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.LumenPoolFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.LumenLilyPadFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.LumenStreamFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.LumenSpireFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.MolewormTunnelsFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.MolewormWarrensFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.OuranwoodCocoonTreeFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.OuranwoodTreeConfiguration; +import com.craisinlord.antarchy.content.worldgen.elythia.OuranwoodTreeFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.PeachTreeConfiguration; +import com.craisinlord.antarchy.content.worldgen.elythia.PeachTreeFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.TriffidPatchFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynEggPatchFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.ChitenSpikeConfiguration; +import com.craisinlord.antarchy.content.worldgen.cavaryn.ChitenSpikeFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.BedBugNestFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.BedBugSurfaceClusterFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.CloudSeaCalciteFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.LucidAntiwaterPoolFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisBiomeSource; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisDuneConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisDuneFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisFissureConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisFissureFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisBloodCrystalConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisBloodCrystalFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisAntiwaterPoolConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisAntiwaterPoolFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisRibColumnsConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisRibColumnsFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisSpikeConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisSpikeFeature; +import com.craisinlord.antarchy.content.client.particle.InvertedGeyserBaseParticleOptions; +import com.craisinlord.antarchy.content.client.particle.InvertedGeyserParticleOptions; +import com.craisinlord.antarchy.content.portal.PermanentPortalType; +import java.util.List; +import java.util.ArrayList; +import java.util.Comparator; +import com.mojang.serialization.MapCodec; +import net.fabricmc.fabric.api.object.builder.v1.entity.FabricDefaultAttributeRegistry; +import net.fabricmc.fabric.api.registry.FabricBrewingRecipeRegistryBuilder; +import net.minecraft.advancements.critereon.EntitySubPredicate; +import net.minecraft.core.Holder; +import net.minecraft.core.registries.Registries; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.world.item.alchemy.Potion; +import net.minecraft.world.item.alchemy.PotionContents; +import net.minecraft.world.effect.MobEffect; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.tags.TagKey; +import net.minecraft.world.damagesource.DamageType; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.MobCategory; +import net.minecraft.world.entity.ai.attributes.Attribute; +import net.minecraft.world.entity.ai.attributes.AttributeSupplier; +import net.minecraft.world.entity.ai.attributes.Attributes; +import net.minecraft.world.entity.animal.Cow; +import net.minecraft.world.entity.animal.Rabbit; +import net.minecraft.world.entity.SpawnPlacementTypes; +import net.minecraft.world.entity.SpawnPlacements; +import net.minecraft.world.entity.npc.Villager; +import net.minecraft.world.entity.monster.Monster; +import net.minecraft.world.item.ArmorItem; +import net.minecraft.world.item.ArmorMaterial; +import net.minecraft.world.item.BucketItem; +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.Rarity; +import net.minecraft.world.item.StandingAndWallBlockItem; +import net.minecraft.world.food.FoodProperties; +import net.minecraft.world.item.Tier; +import net.minecraft.world.item.Tiers; +import net.minecraft.world.item.alchemy.Potions; +import net.minecraft.world.item.crafting.Ingredient; +import net.minecraft.world.flag.FeatureFlags; +import net.minecraft.core.Direction; +import net.minecraft.core.particles.ParticleType; +import net.minecraft.core.particles.SimpleParticleType; +import net.minecraft.util.valueproviders.UniformInt; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.AmethystClusterBlock; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.DropExperienceBlock; +import net.minecraft.world.level.block.GlowLichenBlock; +import net.minecraft.world.level.block.HorizontalDirectionalBlock; +import net.minecraft.world.level.block.LiquidBlock; +import net.minecraft.world.level.block.RotatedPillarBlock; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.block.VineBlock; +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.biome.BiomeSource; +import net.minecraft.world.level.levelgen.DensityFunction; +import net.minecraft.world.level.levelgen.feature.Feature; +import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; +import net.minecraft.world.level.levelgen.feature.configurations.SimpleBlockConfiguration; +import net.minecraft.world.level.levelgen.Heightmap; +import net.fabricmc.loader.api.FabricLoader; +import net.minecraft.world.level.material.Fluid; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.block.Mirror; +import net.minecraft.world.level.block.Rotation; +import com.craisinlord.antarchy.fabric.AntarchyFabricContent; + +public final class AntarchyFabricMisc { + + public static final DeferredRegister ARMOR_MATERIALS = DeferredRegister.create(Registries.ARMOR_MATERIAL, Antarchy.MODID); + + + public static final DeferredRegister> PARTICLE_TYPES = DeferredRegister.create(Registries.PARTICLE_TYPE, Antarchy.MODID); + + + public static final DeferredRegister> FEATURES = DeferredRegister.create(Registries.FEATURE, Antarchy.MODID); + + + public static final DeferredRegister> BIOME_SOURCES = DeferredRegister.create(Registries.BIOME_SOURCE, Antarchy.MODID); + + + public static final DeferredRegister> DENSITY_FUNCTION_TYPES = DeferredRegister.create(Registries.DENSITY_FUNCTION_TYPE, Antarchy.MODID); + + + public static final DeferredRegister> ENTITY_SUB_PREDICATES = DeferredRegister.create(Registries.ENTITY_SUB_PREDICATE_TYPE, Antarchy.MODID); + + + public static final DeferredRegister ATTRIBUTES = DeferredRegister.create(Registries.ATTRIBUTE, Antarchy.MODID); + + + private static final TagKey BYPASSES_BLOODGLASS = + TagKey.create(net.minecraft.core.registries.Registries.DAMAGE_TYPE, ResourceLocation.fromNamespaceAndPath("antarchy", "bypasses_bloodglass")); + + + public static final DeferredHolder DOUBLE_DAMAGE_CHANCE = ATTRIBUTES.register( + "double_damage_chance", + () -> new net.minecraft.world.entity.ai.attributes.RangedAttribute("attribute.antarchy.double_damage_chance", 0.0, 0.0, 1.0).setSyncable(true) + ); + + + public static final DeferredRegister MOB_EFFECTS = DeferredRegister.create(Registries.MOB_EFFECT, Antarchy.MODID); + + + public static final DeferredRegister POTIONS = DeferredRegister.create(Registries.POTION, Antarchy.MODID); + + + public static final DeferredRegister FLUIDS = DeferredRegister.create(Registries.FLUID, Antarchy.MODID); + + + public static final DeferredRegister> MENUS = DeferredRegister.create(Registries.MENU, Antarchy.MODID); + + + public static final DeferredHolder, net.minecraft.world.inventory.MenuType> DORRIE_INVENTORY_MENU = + MENUS.register("dorrie_inventory", () -> new net.minecraft.world.inventory.MenuType<>(com.craisinlord.antarchy.content.menu.DorrieInventoryMenu::new, FeatureFlags.DEFAULT_FLAGS)); + + + public static final DeferredRegister> DATA_COMPONENT_TYPES = + DeferredRegister.create(Registries.DATA_COMPONENT_TYPE, Antarchy.MODID); + + + public static final DeferredRegister> RECIPE_SERIALIZERS = + DeferredRegister.create(Registries.RECIPE_SERIALIZER, Antarchy.MODID); + + + public static final DeferredHolder, net.minecraft.core.component.DataComponentType> GLIMMER_VARIANT = + DATA_COMPONENT_TYPES.register("glimmer_variant", + () -> net.minecraft.core.component.DataComponentType.builder() + .persistent(com.craisinlord.antarchy.content.entity.glimmer.GlimmerVariant.CODEC) + .networkSynchronized(com.craisinlord.antarchy.content.entity.glimmer.GlimmerVariant.STREAM_CODEC) + .build()); + + + public static final DeferredHolder, net.minecraft.core.component.DataComponentType> AMERICAN = + DATA_COMPONENT_TYPES.register("american", + () -> net.minecraft.core.component.DataComponentType.builder() + .persistent(net.minecraft.util.Unit.CODEC) + .networkSynchronized(net.minecraft.network.codec.StreamCodec.unit(net.minecraft.util.Unit.INSTANCE)) + .build()); + + + public static final DeferredHolder, net.minecraft.world.item.crafting.RecipeSerializer> AMERICANIZE_SERIALIZER = + RECIPE_SERIALIZERS.register("americanize", () -> com.craisinlord.antarchy.content.AmericanizeRecipe.SERIALIZER); + + + public static final DeferredHolder ULTIMATE_ARMOR_MATERIAL = ARMOR_MATERIALS.register("ultimate", + () -> new ArmorMaterial( + createUltimateArmorDefense(), + 10, + SoundEvents.ARMOR_EQUIP_DIAMOND, + AntarchyFabricItems::ultimateRepairIngredient, + List.of(new ArmorMaterial.Layer(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "ultimate_armor"))), + 2.0F, + (float) AntarchySettings.ultimateArmorKnockbackResistance() + )); + + + public static final DeferredHolder NIGHTMARE_ARMOR_MATERIAL = ARMOR_MATERIALS.register("nightmare", + () -> new ArmorMaterial( + createNightmareArmorDefense(), + 10, + SoundEvents.ARMOR_EQUIP_NETHERITE, + () -> Ingredient.of(AntarchyFabricItems.NIGHTMARE_SCALE.get()), + List.of(new ArmorMaterial.Layer(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "nightmare_armor"))), + 3.0F, + (float) AntarchySettings.nightmareArmorKnockbackResistance() + )); + + + public static final DeferredHolder PRIMORDIAL_ARMOR_MATERIAL = ARMOR_MATERIALS.register("primordial", + () -> new ArmorMaterial( + createPrimordialArmorDefense(), + 15, + SoundEvents.ARMOR_EQUIP_NETHERITE, + () -> Ingredient.of(AntarchyFabricItems.PRIMORDIAL_SCUTE.get()), + List.of(new ArmorMaterial.Layer(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "primordial"))), + 3.0F, + 0.1F + )); + + + public static final DeferredHolder BLOOD_CRYSTAL_ARMOR_MATERIAL = ARMOR_MATERIALS.register("blood_crystal", + () -> new ArmorMaterial( + createBloodCrystalArmorDefense(), + 30, + SoundEvents.ARMOR_EQUIP_DIAMOND, + AntarchyFabricItems::bloodCrystalRepairIngredient, + List.of(new ArmorMaterial.Layer(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "blood_crystal"))), + 0.0F, + 0.0F + )); + + + public static final DeferredHolder MOGGLES_ARMOR_MATERIAL = ARMOR_MATERIALS.register("moggles", + () -> new ArmorMaterial( + createMogglesArmorDefense(), + 12, + SoundEvents.ARMOR_EQUIP_GOLD, + () -> Ingredient.of(Items.GOLD_INGOT), + List.of(new ArmorMaterial.Layer(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "moggles"))), + 0.0F, + 0.0F + )); + + + public static final DeferredHolder FALLEN_KING_CROWN_ARMOR_MATERIAL = ARMOR_MATERIALS.register("fallen_king_crown", + () -> new ArmorMaterial( + createFallenKingCrownDefense(), + 25, + SoundEvents.ARMOR_EQUIP_GOLD, + () -> Ingredient.of(Items.GOLD_INGOT), + List.of(new ArmorMaterial.Layer(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "fallen_king_crown"))), + 0.0F, + 0.0F + )); + + + public static final DeferredHolder, SimpleParticleType> DREAM_FIRE_FLAME = PARTICLE_TYPES.register("dream_fire_flame", + () -> simpleParticleType()); + + + public static final DeferredHolder, SimpleParticleType> STINKY_GAS = PARTICLE_TYPES.register("stinky_gas", + () -> simpleParticleType()); + + + public static final DeferredHolder, SimpleParticleType> STINKY_FLY = PARTICLE_TYPES.register("stinky_fly", + () -> simpleParticleType()); + + + public static final DeferredHolder, SimpleParticleType> PEACH_LEAVES_PARTICLE = PARTICLE_TYPES.register("peach_leaves_particle", + () -> simpleParticleType()); + + + public static final DeferredHolder, SimpleParticleType> HYPNOTIC_GAS = PARTICLE_TYPES.register("hypnotic_gas", + () -> simpleParticleType()); + + + public static final DeferredHolder, SimpleParticleType> HYPNOTIC_GAS_CLOUD = PARTICLE_TYPES.register("hypnotic_gas_cloud", + () -> simpleParticleType()); + + + public static final DeferredHolder, SimpleParticleType> HYPNOTIC_GAS_DOWN = PARTICLE_TYPES.register("hypnotic_gas_down", + () -> simpleParticleType()); + + + public static final DeferredHolder, SimpleParticleType> HYPNOTIC_GAS_CLOUD_DOWN = PARTICLE_TYPES.register("hypnotic_gas_cloud_down", + () -> simpleParticleType()); + + + public static final DeferredHolder, SimpleParticleType> FIREFLY = PARTICLE_TYPES.register("firefly", + () -> simpleParticleType()); + + + public static final DeferredHolder, SimpleParticleType> ORANGE_ASH = PARTICLE_TYPES.register("orange_ash", + () -> simpleParticleType()); + + + public static final DeferredHolder, ParticleType> INVERTED_GEYSER_BASE = PARTICLE_TYPES.register("inverted_geyser_base", + () -> particleType(InvertedGeyserBaseParticleOptions::codec, InvertedGeyserBaseParticleOptions::streamCodec)); + + + public static final DeferredHolder, ParticleType> INVERTED_GEYSER_PLUME = PARTICLE_TYPES.register("inverted_geyser_plume", + () -> particleType(InvertedGeyserParticleOptions::codec, InvertedGeyserParticleOptions::streamCodec)); + + + public static final DeferredHolder, ParticleType> INVERTED_GEYSER_POOF = PARTICLE_TYPES.register("inverted_geyser_poof", + () -> particleType(InvertedGeyserBaseParticleOptions::codec, InvertedGeyserBaseParticleOptions::streamCodec)); + + + public static final DeferredHolder, ParticleType> INVERTED_GEYSER_ERUPTION = PARTICLE_TYPES.register("inverted_geyser_eruption", + () -> particleType(InvertedGeyserParticleOptions::codec, InvertedGeyserParticleOptions::streamCodec)); + + + public static final DeferredHolder DREAD = MOB_EFFECTS.register("dread", DreadMobEffect::new); + + + public static final DeferredHolder PARALYZED = MOB_EFFECTS.register("paralyzed", ParalyzedMobEffect::new); + + + public static final DeferredHolder INVERTED = MOB_EFFECTS.register("inverted", InvertedMobEffect::new); + + + public static final DeferredHolder STINKY = MOB_EFFECTS.register("stinky", StinkyMobEffect::new); + + + public static final DeferredHolder BLOODGLASS_WARD = MOB_EFFECTS.register("bloodglass_ward", com.craisinlord.antarchy.content.effect.BloodglassWardEffect::new); + + + public static final DeferredHolder BLOODGLASS_MAX_HEARTS = ATTRIBUTES.register( + "bloodglass_max_hearts", + () -> new net.minecraft.world.entity.ai.attributes.RangedAttribute("attribute.antarchy.bloodglass_max_hearts", 0.0, 0.0, 8.0).setSyncable(true) + ); + + + public static final DeferredHolder DREAD_POTION = POTIONS.register("dread", + () -> new Potion(new MobEffectInstance(mobEffectHolder(DREAD), 600))); + + + public static final DeferredHolder LONG_DREAD = POTIONS.register("long_dread", + () -> new Potion("dread", new MobEffectInstance(mobEffectHolder(DREAD), 2400))); + + + public static final DeferredHolder INVERSION = POTIONS.register("inversion", + () -> new Potion(new MobEffectInstance(mobEffectHolder(INVERTED), 600))); + + + public static final DeferredHolder LONG_INVERSION = POTIONS.register("long_inversion", + () -> new Potion("inversion", new MobEffectInstance(mobEffectHolder(INVERTED), 2400))); + + + public static final DeferredHolder STINKY_POTION = POTIONS.register("stinky", + () -> new Potion(new MobEffectInstance(mobEffectHolder(STINKY), 1200))); + + + public static final DeferredHolder LONG_STINKY = POTIONS.register("long_stinky", + () -> new Potion("stinky", new MobEffectInstance(mobEffectHolder(STINKY), 2400))); + + + public static final DeferredHolder SHRINKING_EFFECT = MOB_EFFECTS.register("shrinking", ShrinkMobEffect::new); + + + public static final DeferredHolder GROWTH_EFFECT = MOB_EFFECTS.register("growth", GrowthMobEffect::new); + + + public static final DeferredHolder PARALYSIS = POTIONS.register("paralysis", + () -> new Potion(new MobEffectInstance(mobEffectHolder(PARALYZED), 200))); + + + public static final DeferredHolder LONG_PARALYSIS = POTIONS.register("long_paralysis", + () -> new Potion("paralysis", new MobEffectInstance(mobEffectHolder(PARALYZED), 400))); + + + public static final DeferredHolder HASTE = POTIONS.register("haste", + () -> new Potion(new MobEffectInstance(MobEffects.DIG_SPEED, 1200, 0))); + + + public static final DeferredHolder STRONG_HASTE = POTIONS.register("strong_haste", + () -> new Potion("haste", new MobEffectInstance(MobEffects.DIG_SPEED, 600, 1))); + + + public static final DeferredHolder SHRINKING = POTIONS.register("shrinking", + () -> new Potion(new MobEffectInstance(mobEffectHolder(SHRINKING_EFFECT), 1200, 0))); + + + public static final DeferredHolder STRONG_SHRINKING = POTIONS.register("strong_shrinking", + () -> new Potion("shrinking", new MobEffectInstance(mobEffectHolder(SHRINKING_EFFECT), 900, 1))); + + + public static final DeferredHolder EXTREME_SHRINKING = POTIONS.register("extreme_shrinking", + () -> new Potion("shrinking", new MobEffectInstance(mobEffectHolder(SHRINKING_EFFECT), 600, 2))); + + + public static final DeferredHolder GROWING = POTIONS.register("growing", + () -> new Potion(new MobEffectInstance(mobEffectHolder(GROWTH_EFFECT), 1200, 0))); + + + public static final DeferredHolder STRONG_GROWING = POTIONS.register("strong_growing", + () -> new Potion("growing", new MobEffectInstance(mobEffectHolder(GROWTH_EFFECT), 900, 1))); + + + public static final DeferredHolder EXTREME_GROWING = POTIONS.register("extreme_growing", + () -> new Potion("growing", new MobEffectInstance(mobEffectHolder(GROWTH_EFFECT), 600, 2))); + + + public static final DeferredHolder BILE = FLUIDS.register("bile", + () -> new com.craisinlord.antarchy.fabric.content.fluid.SimpleFluid.Source( + () -> AntarchyFabricContent.lookupFlowingFluid("bile"), + () -> AntarchyFabricContent.lookupFlowingFluid("flowing_bile"), + () -> AntarchyFabricContent.lookupItem("bile_bucket"), + "bile", + 4, + 1, + 5 + )); + + + public static final DeferredHolder FLOWING_BILE = FLUIDS.register("flowing_bile", + () -> new com.craisinlord.antarchy.fabric.content.fluid.SimpleFluid.Flowing( + () -> AntarchyFabricContent.lookupFlowingFluid("bile"), + () -> AntarchyFabricContent.lookupFlowingFluid("flowing_bile"), + () -> AntarchyFabricContent.lookupItem("bile_bucket"), + "bile", + 4, + 1, + 5 + )); + + + + public static final DeferredHolder ICHOR = FLUIDS.register("ichor", + () -> new com.craisinlord.antarchy.fabric.content.fluid.SimpleFluid.Source( + () -> AntarchyFabricContent.lookupFlowingFluid("ichor"), + () -> AntarchyFabricContent.lookupFlowingFluid("flowing_ichor"), + () -> AntarchyFabricContent.lookupItem("ichor_bucket"), + "ichor", + 4, + 1, + 5 + )); + + + public static final DeferredHolder FLOWING_ICHOR = FLUIDS.register("flowing_ichor", + () -> new com.craisinlord.antarchy.fabric.content.fluid.SimpleFluid.Flowing( + () -> AntarchyFabricContent.lookupFlowingFluid("ichor"), + () -> AntarchyFabricContent.lookupFlowingFluid("flowing_ichor"), + () -> AntarchyFabricContent.lookupItem("ichor_bucket"), + "ichor", + 4, + 1, + 5 + )); + + + + public static final DeferredHolder ANTIWATER = FLUIDS.register("antiwater", + AntiwaterFluid.Source::new); + + + public static final DeferredHolder FLOWING_ANTIWATER = FLUIDS.register("flowing_antiwater", + AntiwaterFluid.Flowing::new); + + + public static final DeferredHolder LUMEN = FLUIDS.register("lumen", + () -> new com.craisinlord.antarchy.fabric.content.fluid.SimpleFluid.Source( + () -> AntarchyFabricContent.lookupFlowingFluid("lumen"), + () -> AntarchyFabricContent.lookupFlowingFluid("flowing_lumen"), + () -> AntarchyFabricContent.lookupItem("lumen_bucket"), + "lumen", + 4, + 1, + 5 + )); + + + public static final DeferredHolder FLOWING_LUMEN = FLUIDS.register("flowing_lumen", + () -> new com.craisinlord.antarchy.fabric.content.fluid.SimpleFluid.Flowing( + () -> AntarchyFabricContent.lookupFlowingFluid("lumen"), + () -> AntarchyFabricContent.lookupFlowingFluid("flowing_lumen"), + () -> AntarchyFabricContent.lookupItem("lumen_bucket"), + "lumen", + 4, + 1, + 5 + )); + + + public static final DeferredHolder, RedAntNestFeature> RED_ANT_NEST_FEATURE = FEATURES.register("red_ant_nest", + () -> new RedAntNestFeature(SimpleBlockConfiguration.CODEC)); + + + public static final DeferredHolder, BrownAntNestFeature> BROWN_ANT_NEST_FEATURE = FEATURES.register("brown_ant_nest", + () -> new BrownAntNestFeature(SimpleBlockConfiguration.CODEC)); + + + public static final DeferredHolder, RainbowAntNestFeature> RAINBOW_ANT_NEST_FEATURE = FEATURES.register("rainbow_ant_nest", + () -> new RainbowAntNestFeature(SimpleBlockConfiguration.CODEC)); + + + public static final DeferredHolder, OuranwoodTreeFeature> OURANWOOD_LARGE_TREE = FEATURES.register("ouranwood_large_tree", + () -> new OuranwoodTreeFeature(OuranwoodTreeConfiguration.CODEC)); + + + public static final DeferredHolder, OuranwoodTreeFeature> OURANWOOD_YOUNG_TREE = FEATURES.register("ouranwood_young_tree", + () -> new OuranwoodTreeFeature(OuranwoodTreeConfiguration.CODEC)); + + + public static final DeferredHolder, OuranwoodTreeFeature> OURANWOOD_MEDIUM_TREE = FEATURES.register("ouranwood_medium_tree", + () -> new OuranwoodTreeFeature(OuranwoodTreeConfiguration.CODEC)); + + + public static final DeferredHolder, OuranwoodCocoonTreeFeature> OURANWOOD_COCOON_TREE = FEATURES.register("ouranwood_cocoon_tree", + () -> new OuranwoodCocoonTreeFeature(OuranwoodTreeConfiguration.CODEC)); + + + public static final DeferredHolder, PeachTreeFeature> PEACH_TREE_FEATURE = FEATURES.register("peach_tree", + () -> new PeachTreeFeature(PeachTreeConfiguration.CODEC)); + + + public static final DeferredHolder, PeachTreeFeature> PEACH_LARGE_TREE_FEATURE = FEATURES.register("peach_large_tree", + () -> new PeachTreeFeature(PeachTreeConfiguration.CODEC)); + + + public static final DeferredHolder, ElythiaFloraFeature> ELYTHIA_FOREST_FLORA = FEATURES.register("elythia_forest_flora", + () -> new ElythiaFloraFeature(NoneFeatureConfiguration.CODEC, ElythiaFloraFeature.Variant.FOREST)); + + + public static final DeferredHolder, ElythiaFloraFeature> ELYTHIA_MEADOW_FLORA = FEATURES.register("elythia_meadow_flora", + () -> new ElythiaFloraFeature(NoneFeatureConfiguration.CODEC, ElythiaFloraFeature.Variant.MEADOW)); + + + public static final DeferredHolder, ElythiaFloraFeature> PEACH_FOREST_FLORA = FEATURES.register("peach_forest_flora", + () -> new ElythiaFloraFeature(NoneFeatureConfiguration.CODEC, ElythiaFloraFeature.Variant.PEACH_FOREST)); + + + public static final DeferredHolder, ElythiaFloraFeature> FLOWER_FOREST_MILKWEED = FEATURES.register("flower_forest_milkweed", + () -> new ElythiaFloraFeature(NoneFeatureConfiguration.CODEC, ElythiaFloraFeature.Variant.FLOWER_FOREST_MILKWEED)); + + + public static final DeferredHolder, CornPatchFeature> CORN_PATCH = FEATURES.register("corn_patch", + () -> new CornPatchFeature(NoneFeatureConfiguration.CODEC)); + + + public static final DeferredHolder, com.craisinlord.antarchy.content.worldgen.ocean.StarCoralPatchFeature> STAR_CORAL_PATCH = FEATURES.register("star_coral_patch", + () -> new com.craisinlord.antarchy.content.worldgen.ocean.StarCoralPatchFeature(NoneFeatureConfiguration.CODEC)); + + + public static final DeferredHolder, ElythiaFloraFeature> ELYTHIA_BUTTERFLY_FIELDS_FLORA = FEATURES.register("butterfly_fields_flora", + () -> new ElythiaFloraFeature(NoneFeatureConfiguration.CODEC, ElythiaFloraFeature.Variant.BUTTERFLY_FIELDS)); + + + public static final DeferredHolder, ElythiaSurfaceCoverFeature> ELYTHIA_SURFACE_COVER = FEATURES.register("elythia_surface_cover", + () -> new ElythiaSurfaceCoverFeature(NoneFeatureConfiguration.CODEC)); + + + public static final DeferredHolder, ElythiaUndergroundFeature> ELYTHIA_UNDERGROUND = FEATURES.register("elythia_underground", + () -> new ElythiaUndergroundFeature(NoneFeatureConfiguration.CODEC)); + + + public static final DeferredHolder, BrutalflyCocoonFeature> BRUTALFLY_COCOON = FEATURES.register("brutalfly_cocoon", + () -> new BrutalflyCocoonFeature(NoneFeatureConfiguration.CODEC)); + + + public static final DeferredHolder, MolewormTunnelsFeature> ELYTHIA_MOLEWORM_TUNNELS = FEATURES.register("elythia_moleworm_tunnels", + () -> new MolewormTunnelsFeature(NoneFeatureConfiguration.CODEC)); + + + public static final DeferredHolder, MolewormCaveEntranceFeature> ELYTHIA_MOLEWORM_CAVE_ENTRANCES = FEATURES.register("elythia_moleworm_cave_entrances", + () -> new MolewormCaveEntranceFeature(NoneFeatureConfiguration.CODEC)); + + + public static final DeferredHolder, MolewormWarrensFeature> ELYTHIA_MOLEWORM_WARRENS = FEATURES.register("elythia_moleworm_warrens", + () -> new MolewormWarrensFeature(NoneFeatureConfiguration.CODEC)); + + + public static final DeferredHolder, MolewormSurfaceMoundsFeature> ELYTHIA_MOLEWORM_SURFACE_MOUNDS = FEATURES.register("elythia_moleworm_surface_mounds", + () -> new MolewormSurfaceMoundsFeature(NoneFeatureConfiguration.CODEC)); + + + public static final DeferredHolder, TriffidPatchFeature> TRIFFID_PATCH = FEATURES.register("triffid_patch", + () -> new TriffidPatchFeature(NoneFeatureConfiguration.CODEC)); + + + public static final DeferredHolder, MapCodec> ELYTHIA_BIOME_SOURCE = BIOME_SOURCES.register("elythia_biome_source", + () -> ElythiaBiomeSource.CODEC); + + + public static final DeferredHolder, MapCodec> ELYTHIA_RIVER_CARVE = DENSITY_FUNCTION_TYPES.register("elythia_river_carve", + () -> ElythiaRiverCarveFunction.CODEC); + + + public static final DeferredHolder, ElythiaPondFeature> ELYTHIA_POND = FEATURES.register("elythia_pond", + () -> new ElythiaPondFeature(NoneFeatureConfiguration.CODEC)); + + + public static final DeferredHolder, LumenPoolFeature> LUMEN_POOL = FEATURES.register("lumen_pools", + () -> new LumenPoolFeature(NoneFeatureConfiguration.CODEC)); + + + public static final DeferredHolder, LumenLilyPadFeature> LUMEN_LILY_PADS = FEATURES.register("lumen_lily_pads", + () -> new LumenLilyPadFeature(NoneFeatureConfiguration.CODEC)); + + + public static final DeferredHolder, LumenStreamFeature> LUMEN_STREAM = FEATURES.register("lumen_streams", + () -> new LumenStreamFeature(NoneFeatureConfiguration.CODEC)); + public static final DeferredHolder, LumenSpireFeature> LUMEN_SPIRE = FEATURES.register("lumen_spires", + () -> new LumenSpireFeature(NoneFeatureConfiguration.CODEC)); + + + public static final DeferredHolder, ElythiaTuffBoulderFeature> ELYTHIA_TUFF_BOULDER = FEATURES.register("elythia_tuff_boulder", + () -> new ElythiaTuffBoulderFeature(NoneFeatureConfiguration.CODEC)); + + + public static final DeferredHolder, ElythiaLargeTuffBoulderFeature> ELYTHIA_LARGE_TUFF_BOULDER = FEATURES.register("elythia_large_tuff_boulder", + () -> new ElythiaLargeTuffBoulderFeature(NoneFeatureConfiguration.CODEC)); + + + public static final DeferredHolder, PeachForestMossyBoulderFeature> PEACH_FOREST_MOSSY_BOULDER = FEATURES.register("peach_forest_mossy_boulder", + () -> new PeachForestMossyBoulderFeature(NoneFeatureConfiguration.CODEC)); + + + public static final DeferredHolder, PeachForestPondFeature> PEACH_FOREST_POND = FEATURES.register("peach_forest_pond", + () -> new PeachForestPondFeature(PeachForestPondConfiguration.CODEC)); + + + public static final DeferredHolder, ThoraxisFissureFeature> THORAXIS_FISSURE = FEATURES.register("thoraxis_fissure", + () -> new ThoraxisFissureFeature(ThoraxisFissureConfiguration.CODEC)); + + + public static final DeferredHolder, ThoraxisRibColumnsFeature> THORAXIS_RIB_COLUMNS = FEATURES.register("thoraxis_rib_columns", + () -> new ThoraxisRibColumnsFeature(ThoraxisRibColumnsConfiguration.CODEC)); + + + public static final DeferredHolder, ThoraxisSpikeFeature> THORAXIS_SPIKE = FEATURES.register("thoraxis_spike", + () -> new ThoraxisSpikeFeature(ThoraxisSpikeConfiguration.CODEC)); + + + public static final DeferredHolder, NyxiteSpikeFeature> NYXITE_SPIKES = FEATURES.register("nyxite_spikes", + () -> new NyxiteSpikeFeature(NyxiteSpikeConfiguration.CODEC)); + + + public static final DeferredHolder, AntiwaterSpringsFeature> ANTIWATER_SPRINGS = FEATURES.register("antiwater_springs", + () -> new AntiwaterSpringsFeature(AntiwaterSpringsConfiguration.CODEC)); + + + public static final DeferredHolder, PotentNyxiteFeature> POTENT_NYXITE_FEATURE = FEATURES.register("potent_nyxite", + () -> new PotentNyxiteFeature(NoneFeatureConfiguration.CODEC)); + + + public static final DeferredHolder, ThoraxisBloodCrystalFeature> THORAXIS_BLOOD_CRYSTAL_SPIRES = FEATURES.register("thoraxis_blood_crystal_spires", + () -> new ThoraxisBloodCrystalFeature(ThoraxisBloodCrystalConfiguration.CODEC)); + + + public static final DeferredHolder, CloudSeaCalciteFeature> CLOUD_SEA_CALCITE_BANKS = FEATURES.register("cloud_sea_calcite_banks", + () -> new CloudSeaCalciteFeature(NoneFeatureConfiguration.CODEC)); + + + public static final DeferredHolder, BedBugNestFeature> BED_BUG_NEST = FEATURES.register("bed_bug_nest", + () -> new BedBugNestFeature(NoneFeatureConfiguration.CODEC)); + + + public static final DeferredHolder, BedBugSurfaceClusterFeature> BED_BUG_SURFACE_CLUSTER = FEATURES.register("bed_bug_surface_cluster", + () -> new BedBugSurfaceClusterFeature(NoneFeatureConfiguration.CODEC)); + + + public static final DeferredHolder, ThoraxisAntiwaterPoolFeature> THORAXIS_ANTIWATER_POOL = FEATURES.register("thoraxis_antiwater_pool", + () -> new ThoraxisAntiwaterPoolFeature(ThoraxisAntiwaterPoolConfiguration.CODEC)); + + + public static final DeferredHolder, LucidAntiwaterPoolFeature> LUCID_ANTIWATER_POOL = FEATURES.register("lucid_antiwater_pool", + () -> new LucidAntiwaterPoolFeature(ThoraxisAntiwaterPoolConfiguration.CODEC)); + + + public static final DeferredHolder, ThoraxisDuneFeature> THORAXIS_DUNE = FEATURES.register("thoraxis_dune", + () -> new ThoraxisDuneFeature(ThoraxisDuneConfiguration.CODEC)); + + + public static final DeferredHolder, CoralSpikeFeature> ELYTHIA_CORAL_SPIKE = FEATURES.register("elythia_coral_spike", + () -> new CoralSpikeFeature(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)); + + + public static final DeferredHolder, com.craisinlord.antarchy.content.worldgen.elythia.FungalMushroomFeature> FUNGAL_MUSHROOM = FEATURES.register("fungal_mushroom", + () -> new com.craisinlord.antarchy.content.worldgen.elythia.FungalMushroomFeature(NoneFeatureConfiguration.CODEC)); + + + public static final DeferredHolder, MapCodec> THORAXIS_BIOME_SOURCE = BIOME_SOURCES.register("thoraxis_biome_source", + () -> ThoraxisBiomeSource.CODEC); + + + public static final DeferredHolder JUMPY_BOOTS_ARMOR_MATERIAL = ARMOR_MATERIALS.register("jumpy_boots", + () -> new ArmorMaterial( + createJumpyBootsDefense(), + 15, + net.minecraft.sounds.SoundEvents.ARMOR_EQUIP_NETHERITE, + () -> Ingredient.of(net.minecraft.world.item.Items.NETHERITE_BOOTS), + java.util.List.of(new ArmorMaterial.Layer(net.minecraft.resources.ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "jumpy_boots"))), + 3.0F, + 0.1F + )); + + + + public static Holder mobEffectHolder(DeferredHolder effect) { + return BuiltInRegistries.MOB_EFFECT.wrapAsHolder(effect.get()); + } + + + + public static Holder attributeHolder(DeferredHolder attribute) { + return BuiltInRegistries.ATTRIBUTE.wrapAsHolder(attribute.get()); + } + + + + private static Holder armorMaterialHolder(DeferredHolder material) { + return BuiltInRegistries.ARMOR_MATERIAL.wrapAsHolder(material.get()); + } + + + + private static java.util.EnumMap createUltimateArmorDefense() { + java.util.EnumMap defense = new java.util.EnumMap<>(ArmorItem.Type.class); + defense.put(ArmorItem.Type.BOOTS, 6); + defense.put(ArmorItem.Type.LEGGINGS, 12); + defense.put(ArmorItem.Type.CHESTPLATE, 16); + defense.put(ArmorItem.Type.HELMET, 6); + defense.put(ArmorItem.Type.BODY, 16); + return defense; + } + + + + private static java.util.EnumMap createNightmareArmorDefense() { + java.util.EnumMap defense = new java.util.EnumMap<>(ArmorItem.Type.class); + defense.put(ArmorItem.Type.BOOTS, 4); + defense.put(ArmorItem.Type.LEGGINGS, 9); + defense.put(ArmorItem.Type.CHESTPLATE, 11); + defense.put(ArmorItem.Type.HELMET, 4); + defense.put(ArmorItem.Type.BODY, 11); + return defense; + } + + + + private static java.util.EnumMap createJumpyBootsDefense() { + java.util.EnumMap defense = new java.util.EnumMap<>(ArmorItem.Type.class); + defense.put(ArmorItem.Type.BOOTS, 3); + defense.put(ArmorItem.Type.LEGGINGS, 0); + defense.put(ArmorItem.Type.CHESTPLATE, 0); + defense.put(ArmorItem.Type.HELMET, 0); + defense.put(ArmorItem.Type.BODY, 0); + return defense; + } + + + + private static java.util.EnumMap createBloodCrystalArmorDefense() { + java.util.EnumMap defense = new java.util.EnumMap<>(ArmorItem.Type.class); + defense.put(ArmorItem.Type.BOOTS, 2); + defense.put(ArmorItem.Type.LEGGINGS, 5); + defense.put(ArmorItem.Type.CHESTPLATE, 6); + defense.put(ArmorItem.Type.HELMET, 2); + defense.put(ArmorItem.Type.BODY, 6); + return defense; + } + + + + private static java.util.EnumMap createMogglesArmorDefense() { + java.util.EnumMap defense = new java.util.EnumMap<>(ArmorItem.Type.class); + defense.put(ArmorItem.Type.BOOTS, 0); + defense.put(ArmorItem.Type.LEGGINGS, 0); + defense.put(ArmorItem.Type.CHESTPLATE, 0); + defense.put(ArmorItem.Type.HELMET, 2); + defense.put(ArmorItem.Type.BODY, 2); + return defense; + } + + + + private static java.util.EnumMap createPrimordialArmorDefense() { + java.util.EnumMap defense = new java.util.EnumMap<>(ArmorItem.Type.class); + defense.put(ArmorItem.Type.BOOTS, 3); + defense.put(ArmorItem.Type.LEGGINGS, 6); + defense.put(ArmorItem.Type.CHESTPLATE, 8); + defense.put(ArmorItem.Type.HELMET, 3); + defense.put(ArmorItem.Type.BODY, 8); + return defense; + } + + + + private static java.util.EnumMap createFallenKingCrownDefense() { + java.util.EnumMap defense = new java.util.EnumMap<>(ArmorItem.Type.class); + defense.put(ArmorItem.Type.BOOTS, 0); + defense.put(ArmorItem.Type.LEGGINGS, 0); + defense.put(ArmorItem.Type.CHESTPLATE, 0); + defense.put(ArmorItem.Type.HELMET, 2); + defense.put(ArmorItem.Type.BODY, 2); + return defense; + } + + + + private static SimpleParticleType simpleParticleType() { + return new SimpleParticleType(true) { + }; + } + + + + private static ParticleType particleType( + java.util.function.Function, com.mojang.serialization.MapCodec> codecFactory, + java.util.function.Function, net.minecraft.network.codec.StreamCodec> streamCodecFactory + ) { + return new ParticleType<>(false) { + @Override + public com.mojang.serialization.MapCodec codec() { + return codecFactory.apply(this); + } + + @Override + public net.minecraft.network.codec.StreamCodec streamCodec() { + return streamCodecFactory.apply(this); + } + }; + } + + + public static void register() { + ARMOR_MATERIALS.register(); + FLUIDS.register(); + ATTRIBUTES.register(); + PARTICLE_TYPES.register(); + FEATURES.register(); + BIOME_SOURCES.register(); + DENSITY_FUNCTION_TYPES.register(); + ENTITY_SUB_PREDICATES.register(); + MOB_EFFECTS.register(); + POTIONS.register(); + MENUS.register(); + DATA_COMPONENT_TYPES.register(); + RECIPE_SERIALIZERS.register(); + } + +} diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricSounds.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricSounds.java new file mode 100644 index 00000000..1da468b2 --- /dev/null +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricSounds.java @@ -0,0 +1,682 @@ +package com.craisinlord.antarchy.fabric.registry; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.compat.infinity.InfinityCompat; +import com.craisinlord.antarchy.compat.infinity.InfinityCompatVersion; +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.CreativeTabOrder; +import com.craisinlord.antarchy.content.block.*; +import com.craisinlord.antarchy.content.AntarchySoundEvents; +import com.craisinlord.antarchy.content.item.BloodCrystalArmorItem; +import com.craisinlord.antarchy.content.item.BloodCrystalAppleItem; +import com.craisinlord.antarchy.content.item.BloodCrystalKatanaItem; +import com.craisinlord.antarchy.content.block.entity.AntNestBlockEntity; +import com.craisinlord.antarchy.content.block.entity.DreamCampfireBlockEntity; +import com.craisinlord.antarchy.content.block.entity.HushweedBlockEntity; +import com.craisinlord.antarchy.content.block.entity.PotentNyxiteBlockEntity; +import com.craisinlord.antarchy.content.block.entity.WaspNestBlockEntity; +import com.craisinlord.antarchy.content.fluid.BileLiquidBlock; +import com.craisinlord.antarchy.content.fluid.LumenLiquidBlock; +import com.craisinlord.antarchy.content.worldgen.ants.BrownAntNestFeature; +import com.craisinlord.antarchy.content.worldgen.ants.RainbowAntNestFeature; +import com.craisinlord.antarchy.content.worldgen.ants.RedAntNestFeature; +import com.craisinlord.antarchy.content.worldgen.ants.TermiteNestFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynBileCystFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynBileVeinFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynCreepvineFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynWallAmberMossFeature; +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.NyxiteSpikeFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.PotentNyxiteFeature; +import com.craisinlord.antarchy.fabric.content.fluid.AntiwaterFluid; +import com.craisinlord.antarchy.fabric.content.fluid.AntiwaterLiquidBlock; +import com.craisinlord.antarchy.fabric.item.DeferredSpawnEggItem; +import com.craisinlord.antarchy.fabric.network.AntarchyFabricNetworking; +import com.craisinlord.antarchy.fabric.registry.DeferredBlock; +import com.craisinlord.antarchy.fabric.registry.DeferredHolder; +import com.craisinlord.antarchy.fabric.registry.DeferredItem; +import com.craisinlord.antarchy.fabric.registry.DeferredRegister; +import com.craisinlord.antarchy.content.effect.DreadMobEffect; +import com.craisinlord.antarchy.content.effect.GrowthMobEffect; +import com.craisinlord.antarchy.content.effect.InvertedMobEffect; +import com.craisinlord.antarchy.content.effect.ParalyzedMobEffect; +import com.craisinlord.antarchy.content.effect.ShrinkMobEffect; +import com.craisinlord.antarchy.content.effect.StinkyMobEffect; +import com.craisinlord.antarchy.content.entity.AppleCowEntityVariants.AppleCow; +import com.craisinlord.antarchy.content.entity.AppleCowEntityVariants.EnchantedGoldenAppleCow; +import com.craisinlord.antarchy.content.entity.AppleCowEntityVariants.GoldenAppleCow; +import com.craisinlord.antarchy.content.entity.cloud_shark.CloudSharkEntity; +import com.craisinlord.antarchy.content.entity.BedBugEntity; +import com.craisinlord.antarchy.content.entity.ButterflyEntity; +import com.craisinlord.antarchy.content.entity.CaterpillarEntity; +import com.craisinlord.antarchy.content.entity.DiamondMinecartEntity; +import com.craisinlord.antarchy.content.entity.DrTrayaurusEntity; +import com.craisinlord.antarchy.content.entity.brutalfly.BrutalflyEntity; +import com.craisinlord.antarchy.content.entity.brutalfly.BrutalflyOrbEntity; +import com.craisinlord.antarchy.content.entity.EasterBunnyEntity; +import com.craisinlord.antarchy.content.entity.flying_squirrel.FlyingSquirrelEntity; +import com.craisinlord.antarchy.content.entity.ReverieEntity; +import com.craisinlord.antarchy.content.entity.MissileSquidEntity; +import com.craisinlord.antarchy.content.entity.lucid.LucidEntity; +import com.craisinlord.antarchy.content.entity.lucid.LucidBoltEntity; +import com.craisinlord.antarchy.content.entity.lucid.LucidEyeProjectileEntity; +import com.craisinlord.antarchy.content.entity.HushProjectileEntity; +import com.craisinlord.antarchy.content.entity.JumpyBugEntity; +import com.craisinlord.antarchy.content.entity.StinkBugEntity; +import com.craisinlord.antarchy.content.entity.OuranwoodBoatEntity; +import com.craisinlord.antarchy.content.entity.OuranwoodChestBoatEntity; +import com.craisinlord.antarchy.content.entity.AlphaMantisEntity; +import com.craisinlord.antarchy.content.entity.MantisEntity; +import com.craisinlord.antarchy.content.entity.RollyPollyEntity; +import com.craisinlord.antarchy.content.entity.basilisk.BasiliskEntity; +import com.craisinlord.antarchy.content.entity.EmperorScorpionEntity; +import com.craisinlord.antarchy.content.entity.ScorpionEntity; +import com.craisinlord.antarchy.content.item.LucidEyeItem; +import com.craisinlord.antarchy.content.item.LucidPearlItem; +import com.craisinlord.antarchy.content.entity.nightmare.NightmareEntity; +import com.craisinlord.antarchy.content.entity.ToreterrorEntity; +import com.craisinlord.antarchy.content.entity.WaterBombEntity; +import com.craisinlord.antarchy.content.item.PrimordialArmorItem; +import com.craisinlord.antarchy.content.item.WaterCannonItem; +import com.craisinlord.antarchy.content.entity.kraken.KrakenEntity; +import com.craisinlord.antarchy.content.entity.OctopusBombEntity; +import com.craisinlord.antarchy.content.entity.MolevoreEntity; +import com.craisinlord.antarchy.content.entity.MolewormEntity; +import com.craisinlord.antarchy.content.entity.BomberEntity; +import com.craisinlord.antarchy.content.entity.SizeRayProjectileEntity; +import com.craisinlord.antarchy.content.entity.TriffidEntity; +import com.craisinlord.antarchy.content.entity.WaspEntity; +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 com.craisinlord.antarchy.content.item.BattleAxeItem; +import com.craisinlord.antarchy.content.item.BasiliskDaggerItem; +import com.craisinlord.antarchy.content.item.BigBerthaItem; +import com.craisinlord.antarchy.content.item.AntimetalBlockItem; +import com.craisinlord.antarchy.fabric.item.AntimetalScaffoldingItem; +import com.craisinlord.antarchy.content.item.CloudSharkFinSoupItem; +import com.craisinlord.antarchy.content.item.CorneaEarItem; +import com.craisinlord.antarchy.content.item.GravityGunItem; +import com.craisinlord.antarchy.content.item.MinersDreamItem; +import com.craisinlord.antarchy.content.item.DuctTapeBlockItem; +import com.craisinlord.antarchy.content.item.BrutalflyElytraItem; +import com.craisinlord.antarchy.content.item.MobComingSoonTooltipItem; +import com.craisinlord.antarchy.content.item.MogglesItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimateAxeItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimateHoeItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimatePickaxeItem; +import com.craisinlord.antarchy.content.item.ultimate.UtlimateShovelItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimateSwordItem; +import com.craisinlord.antarchy.content.item.DiamondMinecartItem; +import com.craisinlord.antarchy.content.item.ReverieBottleItem; +import com.craisinlord.antarchy.content.item.ScorpionWhipItem; +import com.craisinlord.antarchy.content.item.ScorpionWhipTetherSync; +import com.craisinlord.antarchy.content.network.HerculesBeetleImpactShakeSync; +import com.craisinlord.antarchy.content.item.SizeRayItem; +import com.craisinlord.antarchy.content.item.SquidzookaItem; +import com.craisinlord.antarchy.content.item.SimpleToolTier; +import com.craisinlord.antarchy.content.item.ultimate.UltimateArmorItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimateBowItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimateCrossbowItem; +import com.craisinlord.antarchy.content.item.NightmareArmorItem; +import com.craisinlord.antarchy.content.item.NightmareSwordItem; +import com.craisinlord.antarchy.content.item.OuranwoodBoatOnlyItem; +import com.craisinlord.antarchy.content.item.OuranwoodChestBoatItem; +import com.craisinlord.antarchy.content.item.RainbowSugarItem; +import com.craisinlord.antarchy.content.worldgen.elythia.CoralSpikeFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaBiomeSource; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaRiverCarveFunction; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaFloraFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaLargeTuffBoulderFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.PeachForestMossyBoulderFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.PeachForestPondConfiguration; +import com.craisinlord.antarchy.content.worldgen.elythia.PeachForestPondFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaPondFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaSurfaceCoverFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaTuffBoulderFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaUndergroundFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.MolewormCaveEntranceFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.MolewormSurfaceMoundsFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.BrutalflyCocoonFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.LumenPoolFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.LumenLilyPadFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.LumenStreamFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.MolewormTunnelsFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.MolewormWarrensFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.OuranwoodCocoonTreeFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.OuranwoodTreeConfiguration; +import com.craisinlord.antarchy.content.worldgen.elythia.OuranwoodTreeFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.PeachTreeConfiguration; +import com.craisinlord.antarchy.content.worldgen.elythia.PeachTreeFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.TriffidPatchFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynEggPatchFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.ChitenSpikeConfiguration; +import com.craisinlord.antarchy.content.worldgen.cavaryn.ChitenSpikeFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.BedBugNestFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.BedBugSurfaceClusterFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.CloudSeaCalciteFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.LucidAntiwaterPoolFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisBiomeSource; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisDuneConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisDuneFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisFissureConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisFissureFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisBloodCrystalConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisBloodCrystalFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisAntiwaterPoolConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisAntiwaterPoolFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisRibColumnsConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisRibColumnsFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisSpikeConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisSpikeFeature; +import com.craisinlord.antarchy.content.client.particle.InvertedGeyserBaseParticleOptions; +import com.craisinlord.antarchy.content.client.particle.InvertedGeyserParticleOptions; +import com.craisinlord.antarchy.content.portal.PermanentPortalType; +import java.util.List; +import java.util.ArrayList; +import java.util.Comparator; +import com.mojang.serialization.MapCodec; +import net.fabricmc.fabric.api.object.builder.v1.entity.FabricDefaultAttributeRegistry; +import net.fabricmc.fabric.api.registry.FabricBrewingRecipeRegistryBuilder; +import net.minecraft.advancements.critereon.EntitySubPredicate; +import net.minecraft.core.Holder; +import net.minecraft.core.registries.Registries; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.world.item.alchemy.Potion; +import net.minecraft.world.item.alchemy.PotionContents; +import net.minecraft.world.effect.MobEffect; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.tags.TagKey; +import net.minecraft.world.damagesource.DamageType; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.MobCategory; +import net.minecraft.world.entity.ai.attributes.Attribute; +import net.minecraft.world.entity.ai.attributes.AttributeSupplier; +import net.minecraft.world.entity.ai.attributes.Attributes; +import net.minecraft.world.entity.animal.Cow; +import net.minecraft.world.entity.animal.Rabbit; +import net.minecraft.world.entity.SpawnPlacementTypes; +import net.minecraft.world.entity.SpawnPlacements; +import net.minecraft.world.entity.npc.Villager; +import net.minecraft.world.entity.monster.Monster; +import net.minecraft.world.item.ArmorItem; +import net.minecraft.world.item.ArmorMaterial; +import net.minecraft.world.item.BucketItem; +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.Rarity; +import net.minecraft.world.item.StandingAndWallBlockItem; +import net.minecraft.world.food.FoodProperties; +import net.minecraft.world.item.Tier; +import net.minecraft.world.item.Tiers; +import net.minecraft.world.item.alchemy.Potions; +import net.minecraft.world.item.crafting.Ingredient; +import net.minecraft.world.flag.FeatureFlags; +import net.minecraft.core.Direction; +import net.minecraft.core.particles.ParticleType; +import net.minecraft.core.particles.SimpleParticleType; +import net.minecraft.util.valueproviders.UniformInt; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.AmethystClusterBlock; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.DropExperienceBlock; +import net.minecraft.world.level.block.GlowLichenBlock; +import net.minecraft.world.level.block.HorizontalDirectionalBlock; +import net.minecraft.world.level.block.LiquidBlock; +import net.minecraft.world.level.block.RotatedPillarBlock; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.block.VineBlock; +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.biome.BiomeSource; +import net.minecraft.world.level.levelgen.DensityFunction; +import net.minecraft.world.level.levelgen.feature.Feature; +import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; +import net.minecraft.world.level.levelgen.feature.configurations.SimpleBlockConfiguration; +import net.minecraft.world.level.levelgen.Heightmap; +import net.fabricmc.loader.api.FabricLoader; +import net.minecraft.world.level.material.Fluid; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.block.Mirror; +import net.minecraft.world.level.block.Rotation; +import com.craisinlord.antarchy.fabric.AntarchyFabricContent; + +public final class AntarchyFabricSounds { + + public static final DeferredRegister SOUND_EVENTS = DeferredRegister.create(Registries.SOUND_EVENT, Antarchy.MODID); + + + public static final DeferredHolder SQUIDZOOKA_FIRE = registerSoundEvent("squidzooka_fire"); + + + public static final DeferredHolder SHRINK_RAY_SOUND = registerSoundEvent("shrink_ray"); + + + public static final DeferredHolder GROWTH_RAY_SOUND = registerSoundEvent("growth_ray"); + + + public static final DeferredHolder SIZE_RAY_CHARGE = registerSoundEvent("size_ray_charge"); + + + public static final DeferredHolder ANT_AMBIENT = registerSoundEvent("ant_ambient"); + + + public static final DeferredHolder ANT_IDLE = registerSoundEvent("ant_idle"); + + + public static final DeferredHolder ANT_HURT = registerSoundEvent("ant_hurt"); + + + public static final DeferredHolder ANT_BITE = registerSoundEvent("ant_bite"); + + + public static final DeferredHolder ANT_GATHER = registerSoundEvent("ant_gather"); + + + public static final DeferredHolder ANT_NEST = registerSoundEvent("ant_nest"); + + + public static final DeferredHolder CLOUD_SHARK_BITE = registerSoundEvent("cloud_shark_bite"); + + + public static final DeferredHolder CLOUD_SHARK_IDLE = registerSoundEvent("cloud_shark_idle"); + + + public static final DeferredHolder CLOUD_SHARK_HURT = registerSoundEvent("cloud_shark_hurt"); + + + public static final DeferredHolder CLOUD_SHARK_DEATH = registerSoundEvent("cloud_shark_death"); + + + public static final DeferredHolder CLOUD_SHARK_FLY = registerSoundEvent("cloud_shark_fly"); + + + public static final DeferredHolder CATERPILLAR_IDLE = registerSoundEvent("caterpillar_idle"); + + + public static final DeferredHolder CATERPILLAR_HURT = registerSoundEvent("caterpillar_hurt"); + + + public static final DeferredHolder CATERPILLAR_CRAWL = registerSoundEvent("caterpillar_crawl"); + + + public static final DeferredHolder BUTTERFLY_HURT = registerSoundEvent("butterfly_hurt"); + + + public static final DeferredHolder BRUTALFLY_IDLE = registerSoundEvent("brutalfly_idle"); + + + public static final DeferredHolder BRUTALFLY_DEATH = registerSoundEvent("brutalfly_death"); + + + public static final DeferredHolder ELYTHIA_FIREFLY_AMBIENT = registerSoundEvent("ambient.elythia.firefly"); + + + public static final DeferredHolder MISSILE_SQUID_AMBIENT = registerSoundEvent("missile_squid_ambient"); + + + public static final DeferredHolder MISSILE_SQUID_HURT = registerSoundEvent("missile_squid_hurt"); + + + public static final DeferredHolder MISSILE_SQUID_DEATH = registerSoundEvent("missile_squid_death"); + + + public static final DeferredHolder MISSILE_SQUID_ATTACK = registerSoundEvent("missile_squid_attack"); + + + public static final DeferredHolder KRAKEN_FLYING_LOOP = registerSoundEvent("kraken_flying_loop"); + + + public static final DeferredHolder KRAKEN_FLYING_SIDEWAYS_LOOP = registerSoundEvent("kraken_flying_sideways_loop"); + + + public static final DeferredHolder KRAKEN_ATTACK = registerSoundEvent("kraken_attack"); + + + public static final DeferredHolder KRAKEN_SPIN = registerSoundEvent("kraken_spin"); + + + public static final DeferredHolder KRAKEN_ROAR = registerSoundEvent("kraken_roar"); + + + public static final DeferredHolder KRAKEN_SUMMON = registerSoundEvent("kraken_summon"); + + + public static final DeferredHolder KRAKEN_HURT = registerSoundEvent("kraken_hurt"); + + + public static final DeferredHolder KRAKEN_DEATH = registerSoundEvent("kraken_death"); + + + public static final DeferredHolder BASILISK_IDLE_LOOP = registerSoundEvent("basilisk_idle_loop"); + + + public static final DeferredHolder BASILISK_SLITHER_LOOP = registerSoundEvent("basilisk_slither_loop"); + + + public static final DeferredHolder BASILISK_BITE = registerSoundEvent("basilisk_bite"); + + + public static final DeferredHolder BASILISK_HISS = registerSoundEvent("basilisk_hiss"); + + + public static final DeferredHolder BASILISK_HURT = registerSoundEvent("basilisk_hurt"); + + + public static final DeferredHolder BASILISK_DEATH = registerSoundEvent("basilisk_death"); + + + public static final DeferredHolder THORAXIS_NIGHTMARE_WASTES_AMBIENT = registerSoundEvent("thoraxis_nightmare_wastes_ambient"); + + + public static final DeferredHolder THORAXIS_NIGHTMARE_WASTES_ADDITIONS = registerSoundEvent("thoraxis_nightmare_wastes_additions"); + + + public static final DeferredHolder THORAXIS_NIGHTMARE_WASTES_MOOD = registerSoundEvent("thoraxis_nightmare_wastes_mood"); + + + public static final DeferredHolder THORAXIS_DREAM_DUNES_AMBIENT = registerSoundEvent("thoraxis_dream_dunes_ambient"); + + + public static final DeferredHolder THORAXIS_DREAM_DUNES_ADDITIONS = registerSoundEvent("thoraxis_dream_dunes_additions"); + + + public static final DeferredHolder THORAXIS_DREAM_DUNES_MOOD = registerSoundEvent("thoraxis_dream_dunes_mood"); + + + public static final DeferredHolder THORAXIS_LUCID_POOLS_AMBIENT = registerSoundEvent("thoraxis_lucid_pools_ambient"); + + + public static final DeferredHolder THORAXIS_LUCID_POOLS_ADDITIONS = registerSoundEvent("thoraxis_lucid_pools_additions"); + + + public static final DeferredHolder THORAXIS_LUCID_POOLS_MOOD = registerSoundEvent("thoraxis_lucid_pools_mood"); + + + public static final DeferredHolder LUCID_AMBIENT = registerSoundEvent("lucid_ambient"); + + + public static final DeferredHolder LUCID_FLYING = registerSoundEvent("lucid_flying"); + + + public static final DeferredHolder LUCID_ATTACK = registerSoundEvent("lucid_attack"); + + + public static final DeferredHolder LUCID_BOLT_SOUND = registerSoundEvent("lucid_bolt"); + + + public static final DeferredHolder LUCID_HURT = registerSoundEvent("lucid_hurt"); + + + public static final DeferredHolder LUCID_DEATH = registerSoundEvent("lucid_death"); + + + public static final DeferredHolder REVERIE_IDLE = registerSoundEvent("reverie_idle"); + + + public static final DeferredHolder REVERIE_HURT = registerSoundEvent("reverie_hurt"); + + + public static final DeferredHolder REVERIE_WORRY = registerSoundEvent("reverie_worry"); + + + public static final DeferredHolder REVERIE_SAVE = registerSoundEvent("reverie_save"); + + + public static final DeferredHolder REVERIE_JOIN_PLAYER = registerSoundEvent("reverie_join_player"); + + + public static final DeferredHolder REVERIE_ALERT = registerSoundEvent("reverie_alert"); + + + public static final DeferredHolder FLYING_SQUIRREL_IDLE = registerSoundEvent("flying_squirrel_idle"); + + + public static final DeferredHolder FLYING_SQUIRREL_BEG = registerSoundEvent("flying_squirrel_beg"); + + + public static final DeferredHolder FLYING_SQUIRREL_NUT = registerSoundEvent("flying_squirrel_nut"); + + + public static final DeferredHolder FLYING_SQUIRREL_GLIDE_LOOP = registerSoundEvent("flying_squirrel_glide_loop"); + + + public static final DeferredHolder FLYING_SQUIRREL_HURT = registerSoundEvent("flying_squirrel_hurt"); + + + public static final DeferredHolder FLYING_SQUIRREL_DEATH = registerSoundEvent("flying_squirrel_death"); + + + public static final DeferredHolder NIGHTMARE_IDLE = registerSoundEvent("nightmare_idle"); + + + public static final DeferredHolder NIGHTMARE_HURT = registerSoundEvent("nightmare_hurt"); + + + public static final DeferredHolder NIGHTMARE_ROAR = registerSoundEvent("nightmare_roar"); + + + public static final DeferredHolder NIGHTMARE_DEATH = registerSoundEvent("nightmare_death"); + + + public static final DeferredHolder NIGHTMARE_BITE = registerSoundEvent("nightmare_bite"); + + + public static final DeferredHolder NIGHTMARE_FLAP = registerSoundEvent("nightmare_flap"); + + + public static final DeferredHolder TRIFFID_ATTACK = registerSoundEvent("triffid_attack"); + + + public static final DeferredHolder TRIFFID_GRAB = registerSoundEvent("triffid_grab"); + + + public static final DeferredHolder TRIFFID_HURT = registerSoundEvent("triffid_hurt"); + + + public static final DeferredHolder TRIFFID_DEATH = registerSoundEvent("triffid_death"); + + + public static final DeferredHolder TRIFFID_HISS = registerSoundEvent("triffid_hiss"); + + + public static final DeferredHolder TRIFFID_GROWL = registerSoundEvent("triffid_growl"); + + + public static final DeferredHolder MANTIS_AMBIENT = registerSoundEvent("mantis_ambient"); + + + public static final DeferredHolder MANTIS_HURT = registerSoundEvent("mantis_hurt"); + + + public static final DeferredHolder MANTIS_ATTACK = registerSoundEvent("mantis_attack"); + + + public static final DeferredHolder MANTIS_FLY_LOOP = registerSoundEvent("mantis_fly_loop"); + + + public static final DeferredHolder GRAVITY_GUN_PICKUP = registerSoundEvent("gravity_gun_pickup"); + + + public static final DeferredHolder GRAVITY_GUN_DROP = registerSoundEvent("gravity_gun_drop"); + + + public static final DeferredHolder GRAVITY_GUN_HOLD_LOOP = registerSoundEvent("gravity_gun_hold_loop"); + + + public static final DeferredHolder GRAVITY_GUN_LAUNCH = registerSoundEvent("gravity_gun_launch"); + + + public static final DeferredHolder GRAVITY_GUN_DRYFIRE = registerSoundEvent("gravity_gun_dryfire"); + + + public static final DeferredHolder BED_BUG_AMBIENT = registerSoundEvent("bed_bug_ambient"); + + + public static final DeferredHolder BED_BUG_HURT = registerSoundEvent("bed_bug_hurt"); + + + public static final DeferredHolder BED_BUG_ATTACK = registerSoundEvent("bed_bug_attack"); + + + public static final DeferredHolder WASP_IDLE = registerSoundEvent("wasp_idle"); + + + public static final DeferredHolder WASP_HURT = registerSoundEvent("wasp_hurt"); + + + public static final DeferredHolder WASP_ATTACK = registerSoundEvent("wasp_attack"); + + + public static final DeferredHolder WASP_DEATH = registerSoundEvent("wasp_death"); + + + public static final DeferredHolder SCORPION_AMBIENT = registerSoundEvent("scorpion_ambient"); + + + public static final DeferredHolder SCORPION_HURT = registerSoundEvent("scorpion_hurt"); + + + public static final DeferredHolder SCORPION_ATTACK = registerSoundEvent("scorpion_attack"); + + + public static final DeferredHolder EMPEROR_SCORPION_AMBIENT = registerSoundEvent("emperor_scorpion_ambient"); + + + public static final DeferredHolder EMPEROR_SCORPION_HURT = registerSoundEvent("emperor_scorpion_hurt"); + + + public static final DeferredHolder EMPEROR_SCORPION_ATTACK = registerSoundEvent("emperor_scorpion_attack"); + + + public static final DeferredHolder EMPEROR_SCORPION_ROAR = registerSoundEvent("emperor_scorpion_roar"); + + + public static final DeferredHolder MOLEWORM_AMBIENT = registerSoundEvent("moleworm_ambient"); + + + public static final DeferredHolder MOLEWORM_HURT = registerSoundEvent("moleworm_hurt"); + + + public static final DeferredHolder MOLEWORM_ATTACK = registerSoundEvent("moleworm_attack"); + + + public static final DeferredHolder MOLEWORM_DIG = registerSoundEvent("moleworm_dig"); + + + public static final DeferredHolder MOLEVORE_AMBIENT = registerSoundEvent("molevore_ambient"); + + + public static final DeferredHolder MOLEVORE_HURT = registerSoundEvent("molevore_hurt"); + + + public static final DeferredHolder MOLEVORE_ATTACK = registerSoundEvent("molevore_attack"); + + + public static final DeferredHolder MOLEVORE_DIG = registerSoundEvent("molevore_dig"); + + + public static final DeferredHolder BOMBER_WALK = registerSoundEvent("bomber_walk"); + + + public static final DeferredHolder BOMBER_KNOCK = registerSoundEvent("bomber_knock"); + + + public static final DeferredHolder BOMBER_EXPLODE = registerSoundEvent("bomber_explode"); + + + public static final DeferredHolder TORETERROR_IDLE = registerSoundEvent("toreterror_idle"); + + + public static final DeferredHolder TORETERROR_HURT = registerSoundEvent("toreterror_hurt"); + + + public static final DeferredHolder TORETERROR_DEATH = registerSoundEvent("toreterror_death"); + + + public static final DeferredHolder TORETERROR_BOMBER_FIRE = registerSoundEvent("toreterror_bomber_fire"); + + + public static final DeferredHolder TORETERROR_SPIN = registerSoundEvent("toreterror_spin"); + + + public static final DeferredHolder TORETERROR_RICOCHET = registerSoundEvent("toreterror_ricochet"); + + + public static final DeferredHolder WATER_CANNON_FIRE = registerSoundEvent("water_cannon_fire"); + + + public static final DeferredHolder TORETERROR_JUMP_UP = registerSoundEvent("toreterror_jump_up"); + + + public static final DeferredHolder TORETERROR_JUMP_LAND = registerSoundEvent("toreterror_jump_land"); + + + public static final DeferredHolder STINKY_FLY_SOUND = registerSoundEvent("stinky_fly"); + + + public static final DeferredHolder CREEPING_HORROR_GROWL = registerSoundEvent("creeping_horror_growl"); + + + public static final DeferredHolder CREEPING_HORROR_HURT = registerSoundEvent("creeping_horror_hurt"); + + + public static final DeferredHolder CREEPING_HORROR_BITE = registerSoundEvent("creeping_horror_bite"); + + + public static final DeferredHolder LURKING_TERROR_SNARL = registerSoundEvent("lurking_terror_snarl"); + + + public static final DeferredHolder LURKING_TERROR_HURT = registerSoundEvent("lurking_terror_hurt"); + + + public static final DeferredHolder LURKING_TERROR_BITE = registerSoundEvent("lurking_terror_bite"); + + + public static final DeferredHolder LURKING_TERROR_FLY_LOOP = registerSoundEvent("lurking_terror_fly_loop"); + + + public static final DeferredHolder DUCT_TAPE_USE = registerSoundEvent("duct_tape_use"); + + + public static final DeferredHolder POTENT_NYXITE_HYPNOTIC_GAS = registerSoundEvent("potent_nyxite_hypnotic_gas"); + + + public static final DeferredHolder POTENT_NYXITE_GEYSER_ERUPTION_START = registerSoundEvent("potent_nyxite_geyser_eruption_start"); + + + public static final DeferredHolder POTENT_NYXITE_GEYSER_ERUPTION_ACTIVE = registerSoundEvent("potent_nyxite_geyser_eruption_active"); + + + public static final DeferredHolder POTENT_NYXITE_GEYSER_CONTINUOUS_START = registerSoundEvent("potent_nyxite_geyser_continuous_start"); + + + public static final DeferredHolder POTENT_NYXITE_GEYSER_CONTINUOUS_ACTIVE = registerSoundEvent("potent_nyxite_geyser_continuous_active"); + + + + + private static DeferredHolder registerSoundEvent(String path) { + return SOUND_EVENTS.register(path, + () -> SoundEvent.createVariableRangeEvent(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, path))); + } + + + public static void register() { + SOUND_EVENTS.register(); + } + +} diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricSpawnPlacements.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricSpawnPlacements.java new file mode 100644 index 00000000..9a1c4d32 --- /dev/null +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricSpawnPlacements.java @@ -0,0 +1,294 @@ +package com.craisinlord.antarchy.fabric.registry; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.compat.infinity.InfinityCompat; +import com.craisinlord.antarchy.compat.infinity.InfinityCompatVersion; +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.CreativeTabOrder; +import com.craisinlord.antarchy.content.block.*; +import com.craisinlord.antarchy.content.AntarchySoundEvents; +import com.craisinlord.antarchy.content.item.BloodCrystalArmorItem; +import com.craisinlord.antarchy.content.item.BloodCrystalAppleItem; +import com.craisinlord.antarchy.content.item.BloodCrystalKatanaItem; +import com.craisinlord.antarchy.content.block.entity.AntNestBlockEntity; +import com.craisinlord.antarchy.content.block.entity.DreamCampfireBlockEntity; +import com.craisinlord.antarchy.content.block.entity.HushweedBlockEntity; +import com.craisinlord.antarchy.content.block.entity.PotentNyxiteBlockEntity; +import com.craisinlord.antarchy.content.block.entity.WaspNestBlockEntity; +import com.craisinlord.antarchy.content.fluid.BileLiquidBlock; +import com.craisinlord.antarchy.content.fluid.LumenLiquidBlock; +import com.craisinlord.antarchy.content.worldgen.ants.BrownAntNestFeature; +import com.craisinlord.antarchy.content.worldgen.ants.RainbowAntNestFeature; +import com.craisinlord.antarchy.content.worldgen.ants.RedAntNestFeature; +import com.craisinlord.antarchy.content.worldgen.ants.TermiteNestFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynBileCystFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynBileVeinFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynCreepvineFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynWallAmberMossFeature; +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.NyxiteSpikeFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.PotentNyxiteFeature; +import com.craisinlord.antarchy.fabric.content.fluid.AntiwaterFluid; +import com.craisinlord.antarchy.fabric.content.fluid.AntiwaterLiquidBlock; +import com.craisinlord.antarchy.fabric.item.DeferredSpawnEggItem; +import com.craisinlord.antarchy.fabric.network.AntarchyFabricNetworking; +import com.craisinlord.antarchy.fabric.registry.DeferredBlock; +import com.craisinlord.antarchy.fabric.registry.DeferredHolder; +import com.craisinlord.antarchy.fabric.registry.DeferredItem; +import com.craisinlord.antarchy.fabric.registry.DeferredRegister; +import com.craisinlord.antarchy.content.effect.DreadMobEffect; +import com.craisinlord.antarchy.content.effect.GrowthMobEffect; +import com.craisinlord.antarchy.content.effect.InvertedMobEffect; +import com.craisinlord.antarchy.content.effect.ParalyzedMobEffect; +import com.craisinlord.antarchy.content.effect.ShrinkMobEffect; +import com.craisinlord.antarchy.content.effect.StinkyMobEffect; +import com.craisinlord.antarchy.content.entity.AppleCowEntityVariants.AppleCow; +import com.craisinlord.antarchy.content.entity.AppleCowEntityVariants.EnchantedGoldenAppleCow; +import com.craisinlord.antarchy.content.entity.AppleCowEntityVariants.GoldenAppleCow; +import com.craisinlord.antarchy.content.entity.cloud_shark.CloudSharkEntity; +import com.craisinlord.antarchy.content.entity.BedBugEntity; +import com.craisinlord.antarchy.content.entity.ButterflyEntity; +import com.craisinlord.antarchy.content.entity.CaterpillarEntity; +import com.craisinlord.antarchy.content.entity.DiamondMinecartEntity; +import com.craisinlord.antarchy.content.entity.DrTrayaurusEntity; +import com.craisinlord.antarchy.content.entity.brutalfly.BrutalflyEntity; +import com.craisinlord.antarchy.content.entity.brutalfly.BrutalflyOrbEntity; +import com.craisinlord.antarchy.content.entity.EasterBunnyEntity; +import com.craisinlord.antarchy.content.entity.flying_squirrel.FlyingSquirrelEntity; +import com.craisinlord.antarchy.content.entity.ReverieEntity; +import com.craisinlord.antarchy.content.entity.MissileSquidEntity; +import com.craisinlord.antarchy.content.entity.lucid.LucidEntity; +import com.craisinlord.antarchy.content.entity.lucid.LucidBoltEntity; +import com.craisinlord.antarchy.content.entity.lucid.LucidEyeProjectileEntity; +import com.craisinlord.antarchy.content.entity.HushProjectileEntity; +import com.craisinlord.antarchy.content.entity.JumpyBugEntity; +import com.craisinlord.antarchy.content.entity.StinkBugEntity; +import com.craisinlord.antarchy.content.entity.OuranwoodBoatEntity; +import com.craisinlord.antarchy.content.entity.OuranwoodChestBoatEntity; +import com.craisinlord.antarchy.content.entity.AlphaMantisEntity; +import com.craisinlord.antarchy.content.entity.MantisEntity; +import com.craisinlord.antarchy.content.entity.RollyPollyEntity; +import com.craisinlord.antarchy.content.entity.basilisk.BasiliskEntity; +import com.craisinlord.antarchy.content.entity.EmperorScorpionEntity; +import com.craisinlord.antarchy.content.entity.ScorpionEntity; +import com.craisinlord.antarchy.content.item.LucidEyeItem; +import com.craisinlord.antarchy.content.item.LucidPearlItem; +import com.craisinlord.antarchy.content.entity.nightmare.NightmareEntity; +import com.craisinlord.antarchy.content.entity.ToreterrorEntity; +import com.craisinlord.antarchy.content.entity.WaterBombEntity; +import com.craisinlord.antarchy.content.item.PrimordialArmorItem; +import com.craisinlord.antarchy.content.item.WaterCannonItem; +import com.craisinlord.antarchy.content.entity.kraken.KrakenEntity; +import com.craisinlord.antarchy.content.entity.OctopusBombEntity; +import com.craisinlord.antarchy.content.entity.MolevoreEntity; +import com.craisinlord.antarchy.content.entity.MolewormEntity; +import com.craisinlord.antarchy.content.entity.BomberEntity; +import com.craisinlord.antarchy.content.entity.SizeRayProjectileEntity; +import com.craisinlord.antarchy.content.entity.TriffidEntity; +import com.craisinlord.antarchy.content.entity.WaspEntity; +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 com.craisinlord.antarchy.content.item.BattleAxeItem; +import com.craisinlord.antarchy.content.item.BasiliskDaggerItem; +import com.craisinlord.antarchy.content.item.BigBerthaItem; +import com.craisinlord.antarchy.content.item.AntimetalBlockItem; +import com.craisinlord.antarchy.fabric.item.AntimetalScaffoldingItem; +import com.craisinlord.antarchy.content.item.CloudSharkFinSoupItem; +import com.craisinlord.antarchy.content.item.CorneaEarItem; +import com.craisinlord.antarchy.content.item.GravityGunItem; +import com.craisinlord.antarchy.content.item.MinersDreamItem; +import com.craisinlord.antarchy.content.item.DuctTapeBlockItem; +import com.craisinlord.antarchy.content.item.BrutalflyElytraItem; +import com.craisinlord.antarchy.content.item.MobComingSoonTooltipItem; +import com.craisinlord.antarchy.content.item.MogglesItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimateAxeItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimateHoeItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimatePickaxeItem; +import com.craisinlord.antarchy.content.item.ultimate.UtlimateShovelItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimateSwordItem; +import com.craisinlord.antarchy.content.item.DiamondMinecartItem; +import com.craisinlord.antarchy.content.item.ReverieBottleItem; +import com.craisinlord.antarchy.content.item.ScorpionWhipItem; +import com.craisinlord.antarchy.content.item.ScorpionWhipTetherSync; +import com.craisinlord.antarchy.content.network.HerculesBeetleImpactShakeSync; +import com.craisinlord.antarchy.content.item.SizeRayItem; +import com.craisinlord.antarchy.content.item.SquidzookaItem; +import com.craisinlord.antarchy.content.item.SimpleToolTier; +import com.craisinlord.antarchy.content.item.ultimate.UltimateArmorItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimateBowItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimateCrossbowItem; +import com.craisinlord.antarchy.content.item.NightmareArmorItem; +import com.craisinlord.antarchy.content.item.NightmareSwordItem; +import com.craisinlord.antarchy.content.item.OuranwoodBoatOnlyItem; +import com.craisinlord.antarchy.content.item.OuranwoodChestBoatItem; +import com.craisinlord.antarchy.content.item.RainbowSugarItem; +import com.craisinlord.antarchy.content.worldgen.elythia.CoralSpikeFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaBiomeSource; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaRiverCarveFunction; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaFloraFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaLargeTuffBoulderFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.PeachForestMossyBoulderFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.PeachForestPondConfiguration; +import com.craisinlord.antarchy.content.worldgen.elythia.PeachForestPondFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaPondFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaSurfaceCoverFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaTuffBoulderFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaUndergroundFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.MolewormCaveEntranceFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.MolewormSurfaceMoundsFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.BrutalflyCocoonFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.LumenPoolFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.LumenLilyPadFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.LumenStreamFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.MolewormTunnelsFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.MolewormWarrensFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.OuranwoodCocoonTreeFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.OuranwoodTreeConfiguration; +import com.craisinlord.antarchy.content.worldgen.elythia.OuranwoodTreeFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.PeachTreeConfiguration; +import com.craisinlord.antarchy.content.worldgen.elythia.PeachTreeFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.TriffidPatchFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynEggPatchFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.ChitenSpikeConfiguration; +import com.craisinlord.antarchy.content.worldgen.cavaryn.ChitenSpikeFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.BedBugNestFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.BedBugSurfaceClusterFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.CloudSeaCalciteFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.LucidAntiwaterPoolFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisBiomeSource; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisDuneConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisDuneFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisFissureConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisFissureFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisBloodCrystalConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisBloodCrystalFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisAntiwaterPoolConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisAntiwaterPoolFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisRibColumnsConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisRibColumnsFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisSpikeConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisSpikeFeature; +import com.craisinlord.antarchy.content.client.particle.InvertedGeyserBaseParticleOptions; +import com.craisinlord.antarchy.content.client.particle.InvertedGeyserParticleOptions; +import com.craisinlord.antarchy.content.portal.PermanentPortalType; +import java.util.List; +import java.util.ArrayList; +import java.util.Comparator; +import com.mojang.serialization.MapCodec; +import net.fabricmc.fabric.api.object.builder.v1.entity.FabricDefaultAttributeRegistry; +import net.fabricmc.fabric.api.registry.FabricBrewingRecipeRegistryBuilder; +import net.minecraft.advancements.critereon.EntitySubPredicate; +import net.minecraft.core.Holder; +import net.minecraft.core.registries.Registries; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.world.item.alchemy.Potion; +import net.minecraft.world.item.alchemy.PotionContents; +import net.minecraft.world.effect.MobEffect; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.tags.TagKey; +import net.minecraft.world.damagesource.DamageType; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.MobCategory; +import net.minecraft.world.entity.ai.attributes.Attribute; +import net.minecraft.world.entity.ai.attributes.AttributeSupplier; +import net.minecraft.world.entity.ai.attributes.Attributes; +import net.minecraft.world.entity.animal.Cow; +import net.minecraft.world.entity.animal.Rabbit; +import net.minecraft.world.entity.SpawnPlacementTypes; +import net.minecraft.world.entity.SpawnPlacements; +import net.minecraft.world.entity.npc.Villager; +import net.minecraft.world.entity.monster.Monster; +import net.minecraft.world.item.ArmorItem; +import net.minecraft.world.item.ArmorMaterial; +import net.minecraft.world.item.BucketItem; +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.Rarity; +import net.minecraft.world.item.StandingAndWallBlockItem; +import net.minecraft.world.food.FoodProperties; +import net.minecraft.world.item.Tier; +import net.minecraft.world.item.Tiers; +import net.minecraft.world.item.alchemy.Potions; +import net.minecraft.world.item.crafting.Ingredient; +import net.minecraft.world.flag.FeatureFlags; +import net.minecraft.core.Direction; +import net.minecraft.core.particles.ParticleType; +import net.minecraft.core.particles.SimpleParticleType; +import net.minecraft.util.valueproviders.UniformInt; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.AmethystClusterBlock; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.DropExperienceBlock; +import net.minecraft.world.level.block.GlowLichenBlock; +import net.minecraft.world.level.block.HorizontalDirectionalBlock; +import net.minecraft.world.level.block.LiquidBlock; +import net.minecraft.world.level.block.RotatedPillarBlock; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.block.VineBlock; +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.biome.BiomeSource; +import net.minecraft.world.level.levelgen.DensityFunction; +import net.minecraft.world.level.levelgen.feature.Feature; +import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; +import net.minecraft.world.level.levelgen.feature.configurations.SimpleBlockConfiguration; +import net.minecraft.world.level.levelgen.Heightmap; +import net.fabricmc.loader.api.FabricLoader; +import net.minecraft.world.level.material.Fluid; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.block.Mirror; +import net.minecraft.world.level.block.Rotation; +import com.craisinlord.antarchy.fabric.AntarchyFabricContent; + +public final class AntarchyFabricSpawnPlacements { + + + public static void register() { + SpawnPlacements.register(AntarchyFabricEntities.FLYING_SQUIRREL.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING, FlyingSquirrelEntity::canSpawn); + SpawnPlacements.register(AntarchyFabricEntities.CATERPILLAR.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, CaterpillarEntity::canSpawn); + SpawnPlacements.register(AntarchyFabricEntities.BUTTERFLY.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, ButterflyEntity::canSpawn); + SpawnPlacements.register(AntarchyFabricEntities.REVERIE.get(), SpawnPlacementTypes.NO_RESTRICTIONS, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, ReverieEntity::canSpawn); + SpawnPlacements.register(AntarchyFabricEntities.BRUTALFLY.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, Monster::checkMonsterSpawnRules); + SpawnPlacements.register(AntarchyFabricEntities.APPLE_COW.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, Cow::checkAnimalSpawnRules); + SpawnPlacements.register(AntarchyFabricEntities.GOLDEN_APPLE_COW.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, Cow::checkAnimalSpawnRules); + SpawnPlacements.register(AntarchyFabricEntities.ENCHANTED_GOLDEN_APPLE_COW.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, Cow::checkAnimalSpawnRules); + SpawnPlacements.register(AntarchyFabricEntities.CLOUD_SHARK.get(), SpawnPlacementTypes.NO_RESTRICTIONS, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, CloudSharkEntity::canSpawn); + SpawnPlacements.register(AntarchyFabricEntities.WASP.get(), SpawnPlacementTypes.NO_RESTRICTIONS, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, WaspEntity::canSpawn); + SpawnPlacements.register(AntarchyFabricEntities.BOMBER.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, BomberEntity::canSpawn); + SpawnPlacements.register(AntarchyFabricEntities.KRAKEN.get(), SpawnPlacementTypes.IN_WATER, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, KrakenEntity::canSpawn); + SpawnPlacements.register(AntarchyFabricEntities.MISSILE_SQUID.get(), SpawnPlacementTypes.IN_WATER, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, MissileSquidEntity::canSpawn); + SpawnPlacements.register(AntarchyFabricEntities.OCTOPUS_BOMB.get(), SpawnPlacementTypes.IN_WATER, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, OctopusBombEntity::canSpawn); + SpawnPlacements.register(AntarchyFabricEntities.CHEEP.get(), SpawnPlacementTypes.IN_WATER, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, net.minecraft.world.entity.animal.AbstractFish::checkSurfaceWaterAnimalSpawnRules); + // Dorrie is not part of this update yet. + // SpawnPlacements.register(AntarchyFabricEntities.DORRIE.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, net.minecraft.world.entity.animal.Animal::checkAnimalSpawnRules); + SpawnPlacements.register(AntarchyFabricEntities.OURANWOOD_DEER.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, net.minecraft.world.entity.animal.Animal::checkAnimalSpawnRules); + SpawnPlacements.register(AntarchyFabricEntities.GLIMMER.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, com.craisinlord.antarchy.content.entity.glimmer.GlimmerEntity::checkGlimmerSpawnRules); + SpawnPlacements.register(AntarchyFabricEntities.ELKA.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, net.minecraft.world.entity.animal.Animal::checkAnimalSpawnRules); + SpawnPlacements.register(AntarchyFabricEntities.NIGHTMARE.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, NightmareEntity::canSpawn); + SpawnPlacements.register(AntarchyFabricEntities.MOLEWORM.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, MolewormEntity::canSpawn); + SpawnPlacements.register(AntarchyFabricEntities.MANTIS.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, MantisEntity::canSpawn); + SpawnPlacements.register(AntarchyFabricEntities.ALPHA_MANTIS.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, AlphaMantisEntity::checkAlphaMantisSpawnRules); + SpawnPlacements.register(AntarchyFabricEntities.MOLEVORE.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, MolevoreEntity::canSpawn); + SpawnPlacements.register(AntarchyFabricEntities.BED_BUG.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, BedBugEntity::canSpawn); + SpawnPlacements.register(AntarchyFabricEntities.LUCID.get(), SpawnPlacementTypes.NO_RESTRICTIONS, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, LucidEntity::canSpawn); + SpawnPlacements.register(AntarchyFabricEntities.SCORPION.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, ScorpionEntity::canSpawn); + SpawnPlacements.register(AntarchyFabricEntities.BASILISK.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, BasiliskEntity::canSpawn); + SpawnPlacements.register(AntarchyFabricEntities.EMPEROR_SCORPION.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, EmperorScorpionEntity::canSpawn); + SpawnPlacements.register(AntarchyFabricEntities.TORETERROR.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, ToreterrorEntity::canSpawn); + } + +} diff --git a/fabric/src/main/resources/antarchy-fabric.mixins.json b/fabric/src/main/resources/antarchy-fabric.mixins.json index e3f62732..2a161455 100644 --- a/fabric/src/main/resources/antarchy-fabric.mixins.json +++ b/fabric/src/main/resources/antarchy-fabric.mixins.json @@ -17,7 +17,6 @@ "JumpyBootsFallDamageMixin", "entity.MultipartEntityLevelRegistryMixin", "WoodTypeInvoker", - "infinity.RandomSpringMixin", "infinity.PortalCreatorMixin" ], "client": [ diff --git a/fabric/src/main/resources/assets/antarchy/models/item/krakens_grasp.json b/fabric/src/main/resources/assets/antarchy/models/item/krakens_grasp.json new file mode 100644 index 00000000..9a00568c --- /dev/null +++ b/fabric/src/main/resources/assets/antarchy/models/item/krakens_grasp.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:item/krakens_grasp_held" +} diff --git a/fabric/src/main/resources/assets/antarchy/models/item/lumen_bucket.json b/fabric/src/main/resources/assets/antarchy/models/item/lumen_bucket.json new file mode 100644 index 00000000..5b384dbc --- /dev/null +++ b/fabric/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/src/main/resources/assets/antarchy/models/item/rpo_launcher.json b/fabric/src/main/resources/assets/antarchy/models/item/rpo_launcher.json new file mode 100644 index 00000000..9d445ed8 --- /dev/null +++ b/fabric/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/src/main/resources/data/minecraft/tags/fluid/water.json b/fabric/src/main/resources/data/minecraft/tags/fluid/water.json index 6d00bd9c..eef10539 100644 --- a/fabric/src/main/resources/data/minecraft/tags/fluid/water.json +++ b/fabric/src/main/resources/data/minecraft/tags/fluid/water.json @@ -1,6 +1,10 @@ { "values": [ "antarchy:ichor", - "antarchy:flowing_ichor" + "antarchy:flowing_ichor", + "antarchy:lumen", + "antarchy:flowing_lumen", + "antarchy:bile", + "antarchy:flowing_bile" ] } diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index 639fc562..eeb00897 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -35,5 +35,8 @@ "integrated_api": "*", "geckolib": "*", "sizeable_foliage": "*" + }, + "breaks": { + "infinity": "<2.7.2" } } diff --git a/gradle.properties b/gradle.properties index f8bee8a8..cfce331e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -38,6 +38,7 @@ structurevoidtoggle_neoforge=4.4.1+1.21 structurevoidtoggle_fabric=4.4.1+1.21 geckolib_version=4.8.4 +jei_version=19.27.0.336 intapi_curseforge_id = 817709 diff --git a/neoforge/build.gradle b/neoforge/build.gradle index 5fabcb04..739602f2 100644 --- a/neoforge/build.gradle +++ b/neoforge/build.gradle @@ -34,8 +34,8 @@ dependencies { neoForge "net.neoforged:neoforge:${rootProject.neoforge_version}" modLocalRuntime("curse.maven:intapi-${project.intapi_curseforge_id}:${project.intapi_curseforge_file_id_neoforge}") implementation "software.bernie.geckolib:geckolib-neoforge-${minecraft_version}:${geckolib_version}" - compileOnly(files(rootProject.file("infinite_dimensions_jars/infinity-2.7.1+1.21.1-neoforge.jar"))) - modLocalRuntime(files(rootProject.file("infinite_dimensions_jars/infinity-2.7.1+1.21.1-neoforge.jar"))) + compileOnly(files(rootProject.file("infinite_dimensions_jars/infinity-2.7.2+1.21.1-neoforge.jar"))) + modLocalRuntime(files(rootProject.file("infinite_dimensions_jars/infinity-2.7.2+1.21.1-neoforge.jar"))) 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"))) @@ -44,7 +44,8 @@ dependencies { modLocalRuntime("com.telepathicgrunt:StructureVoidToggle-Neoforge:${project.structurevoidtoggle_neoforge}") // modLocalRuntime("curse.maven:idas-${idas_curseforge_id}:${idas_curseforge_file_id}") -// modLocalRuntime("curse.maven:jei-${jei_curseforge_id}:${jei_curseforge_file_id}") + compileOnly "mezz.jei:jei-${minecraft_version}-common-api:${jei_version}" + compileOnly "mezz.jei:jei-${minecraft_version}-neoforge-api:${jei_version}" // modLocalRuntime("curse.maven:create-${create_curseforge_id}:${create_curseforge_file_id}") // modLocalRuntime("curse.maven:theoneprobe-${top_curseforge_id}:${top_curseforge_file_id}") // modLocalRuntime("curse.maven:worldedit-${worldedit_curseforge_id}:${worldedit_curseforge_file_id}") diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyConfigModuleNeoforge.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyConfigModuleNeoforge.java index 0d3153a3..d8e1c709 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyConfigModuleNeoforge.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyConfigModuleNeoforge.java @@ -199,6 +199,7 @@ public final class AntarchyConfigModuleNeoforge { AntarchySettings.setHerculesBeetleHealth(AntarchyMobsConfig.herculesBeetleHealth()); AntarchySettings.setHerculesBeetleAttackDamage(AntarchyMobsConfig.herculesBeetleAttackDamage()); AntarchySettings.setHerculesBeetleChargeDamage(AntarchyMobsConfig.herculesBeetleChargeDamage()); + AntarchySettings.setOuranwoodDeerHealth(AntarchyMobsConfig.ouranwoodDeerHealth()); AntarchySettings.setGlimmerHealth(AntarchyMobsConfig.glimmerHealth()); } @@ -258,6 +259,16 @@ public final class AntarchyConfigModuleNeoforge { AntarchySettings.setBigBerthaBasiliskCooldownSeconds(AntarchyToolsConfig.bigBerthaBasiliskCooldownSeconds()); AntarchySettings.setBigBerthaLucidInvertedDurationSeconds(AntarchyToolsConfig.bigBerthaLucidInvertedDurationSeconds()); AntarchySettings.setBigBerthaLucidInvertedDamageBonusPercent(AntarchyToolsConfig.bigBerthaLucidInvertedDamageBonusPercent()); + AntarchySettings.setKrakensGraspAttackDamage(AntarchyToolsConfig.krakensGraspAttackDamage()); + AntarchySettings.setKrakensGraspAttackSpeed(AntarchyToolsConfig.krakensGraspAttackSpeed()); + AntarchySettings.setKrakensGraspThrownDamage(AntarchyToolsConfig.krakensGraspThrownDamage()); + AntarchySettings.setKrakensGraspLightningDamage(AntarchyToolsConfig.krakensGraspLightningDamage()); + AntarchySettings.setKrakensGraspInnateLoyalty(AntarchyToolsConfig.krakensGraspInnateLoyalty()); + AntarchySettings.setKrakensGraspInnateLoyaltyLevel(AntarchyToolsConfig.krakensGraspInnateLoyaltyLevel()); + AntarchySettings.setKrakensGraspTentacleDurationTicks(AntarchyToolsConfig.krakensGraspTentacleDurationTicks()); + AntarchySettings.setKrakensGraspTentacleDamage(AntarchyToolsConfig.krakensGraspTentacleDamage()); + AntarchySettings.setKrakensGraspTentacleRadius(AntarchyToolsConfig.krakensGraspTentacleRadius()); + AntarchySettings.setKrakensGraspTentacleDamageIntervalTicks(AntarchyToolsConfig.krakensGraspTentacleDamageIntervalTicks()); AntarchySettings.setScorpionWhipBaseDamage(AntarchyToolsConfig.scorpionWhipBaseDamage()); AntarchySettings.setScorpionWhipReachBonus(AntarchyToolsConfig.scorpionWhipReachBonus()); AntarchySettings.setScorpionWhipPoisonDurationTicks(AntarchyToolsConfig.scorpionWhipPoisonDurationTicks()); @@ -291,6 +302,10 @@ public final class AntarchyConfigModuleNeoforge { AntarchySettings.setSquidzookaCooldownSeconds(AntarchyToolsConfig.squidzookaCooldownSeconds()); AntarchySettings.setSquidzookaLaunchVelocity(AntarchyToolsConfig.squidzookaLaunchVelocity()); + AntarchySettings.setRpoLauncherCooldownSeconds(AntarchyToolsConfig.rpoLauncherCooldownSeconds()); + AntarchySettings.setRpoLauncherLaunchVelocity(AntarchyToolsConfig.rpoLauncherLaunchVelocity()); + AntarchySettings.setRpoLauncherExplosionDamage(AntarchyToolsConfig.rpoLauncherExplosionDamage()); + AntarchySettings.setRpoLauncherExplosionRadius(AntarchyToolsConfig.rpoLauncherExplosionRadius()); AntarchySettings.setSizeChangingRaysEnabled(AntarchyToolsConfig.sizeChangingRaysEnabled()); AntarchySettings.setSizeRayCooldownSeconds(AntarchyToolsConfig.sizeRayCooldownSeconds()); @@ -311,9 +326,20 @@ public final class AntarchyConfigModuleNeoforge { AntarchySettings.setGravityGunCooldownSeconds(AntarchyToolsConfig.gravityGunCooldownSeconds()); AntarchySettings.setGravityGunMaxHoldDistance(AntarchyToolsConfig.gravityGunMaxHoldDistance()); + AntarchySettings.setMinersDreamEnabled(AntarchyToolsConfig.minersDreamEnabled()); + AntarchySettings.setMinersDreamMinimumRange(AntarchyToolsConfig.minersDreamMinimumRange()); + AntarchySettings.setMinersDreamMaximumRange(AntarchyToolsConfig.minersDreamMaximumRange()); + AntarchySettings.setMinersDreamTorchSpacing(AntarchyToolsConfig.minersDreamTorchSpacing()); + AntarchySettings.setMinersDreamBlocksPerTick(AntarchyToolsConfig.minersDreamBlocksPerTick()); + AntarchySettings.setDuctTapeRepairPercentPerUse(AntarchyToolsConfig.ductTapeRepairPercentPerUse()); AntarchySettings.setPotentNyxiteInvertedDurationSeconds(AntarchyToolsConfig.potentNyxiteInvertedDurationSeconds()); AntarchySettings.setCorneaEarNightVisionSeconds(AntarchyToolsConfig.corneaEarNightVisionSeconds()); + AntarchySettings.setAmericanizingEnabled(AntarchyToolsConfig.americanizingEnabled()); + AntarchySettings.setAmericanBonusNutrition(AntarchyToolsConfig.americanBonusNutrition()); + AntarchySettings.setAmericanBonusSaturation(AntarchyToolsConfig.americanBonusSaturation()); + AntarchySettings.setAmericanRegenerationDurationTicks(AntarchyToolsConfig.americanRegenerationDurationTicks()); + AntarchySettings.setAmericanRegenerationAmplifier(AntarchyToolsConfig.americanRegenerationAmplifier()); AntarchySettings.setAntDanceRadius(AntarchyMobsConfig.antDanceRadius()); AntarchySettings.setMogglesVisionRadius(AntarchyToolsConfig.mogglesVisionRadius()); diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyMobsConfig.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyMobsConfig.java index 849cce3b..3def0fb9 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyMobsConfig.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyMobsConfig.java @@ -212,6 +212,11 @@ public final class AntarchyMobsConfig { private static final ModConfigSpec.DoubleValue DORRIE_HEALTH; + // Ouranwood Deer + + private static final ModConfigSpec.DoubleValue OURANWOOD_DEER_HEALTH; + + // Glimmer private static final ModConfigSpec.DoubleValue GLIMMER_HEALTH; @@ -547,6 +552,10 @@ public final class AntarchyMobsConfig { DORRIE_HEALTH = b.comment("Base max health.").defineInRange("health", 60.0D, 1.0D, 32768.0D); b.pop(); + b.push("ouranwood_deer"); + OURANWOOD_DEER_HEALTH = b.comment("Base max health.").defineInRange("health", 20.0D, 1.0D, 32768.0D); + b.pop(); + b.push("glimmer"); GLIMMER_HEALTH = b.comment("Base max health.").defineInRange("health", 20.0D, 1.0D, 32768.0D); b.pop(); @@ -727,6 +736,7 @@ public final class AntarchyMobsConfig { static double cheepHealth() { return CHEEP_HEALTH.get(); } static double cheepAttackDamage() { return CHEEP_ATTACK_DAMAGE.get(); } static double dorrieHealth() { return DORRIE_HEALTH.get(); } + static double ouranwoodDeerHealth() { return OURANWOOD_DEER_HEALTH.get(); } static double glimmerHealth() { return GLIMMER_HEALTH.get(); } static double herculesBeetleHealth() { return HERCULES_BEETLE_HEALTH.get(); } static double herculesBeetleAttackDamage() { return HERCULES_BEETLE_ATTACK_DAMAGE.get(); } diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoForgeFluidTypes.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoForgeFluidTypes.java index d66a0714..b3be4333 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoForgeFluidTypes.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoForgeFluidTypes.java @@ -45,6 +45,17 @@ public final class AntarchyNeoForgeFluidTypes { .density(1200) .viscosity(1400))); + public static final DeferredHolder LUMEN_TYPE = FLUID_TYPES.register("lumen", + () -> new FluidType(FluidType.Properties.create() + .descriptionId("block.antarchy.lumen") + .fallDistanceModifier(0.0F) + .canSwim(true) + .supportsBoating(true) + .sound(SoundActions.BUCKET_FILL, SoundEvents.BUCKET_FILL) + .sound(SoundActions.BUCKET_EMPTY, SoundEvents.BUCKET_EMPTY) + .density(1000) + .viscosity(1000))); + private AntarchyNeoForgeFluidTypes() { } diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforge.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforge.java index 70a1cc92..240c61c7 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforge.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforge.java @@ -2,6 +2,7 @@ package com.craisinlord.antarchy.neoforge; import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.compat.infinity.InfinityCompat; +import com.craisinlord.antarchy.compat.infinity.InfinityCompatVersion; import com.craisinlord.antarchy.content.AntarchyObjects; import com.craisinlord.antarchy.content.AntarchySoundEvents; import com.craisinlord.antarchy.content.item.BloodCrystalKatanaItem; @@ -168,7 +169,7 @@ public class AntarchyNeoforge { new BloodCrystalKatanaTrailPayload(player.getId(), durationTicks) )); com.craisinlord.antarchy.content.gravity.AntarchyGravityApi.setSyncDispatcher(AntarchyGravityNetworking::syncEntity); - if (isModLoaded("infinity")) { + if (isSupportedInfinityLoaded()) { InfinityCompat.bind(new NeoForgeInfinityCompat()); } AntarchyNeoForgeEvents.register(modEventBus); @@ -176,6 +177,7 @@ public class AntarchyNeoforge { AntarchyNeoforgeEntites.register(modEventBus); AntarchyNeoforgeBlocks.register(modEventBus); AntarchyNeoforgeItems.register(modEventBus); + AntarchyNeoForgeFluidTypes.register(modEventBus); AntarchyNeoforgeMisc.register(modEventBus); AntarchyNeoforgeSpawnPlacements.register(modEventBus); AntarchyNeoforgeCreativeModeTabs.register(modEventBus); @@ -217,7 +219,7 @@ public class AntarchyNeoforge { (java.util.function.Supplier) AntarchyNeoforgeEntites.BOMBER, (java.util.function.Supplier) AntarchyNeoforgeEntites.BED_BUG, AntarchyNeoforgeEntites.CHEEP, - (java.util.function.Supplier) AntarchyNeoforgeEntites.CHEEP, + () -> { throw new IllegalStateException("Dorrie is not part of this update yet."); }, () -> AntarchyNeoforgeBlocks.DUPLICATOR_LOG.get(), () -> AntarchyNeoforgeBlocks.DUPLICATOR_SAPLING.get(), () -> AntarchyNeoforgeBlocks.DUCT_TAPE.get(), @@ -268,6 +270,10 @@ public class AntarchyNeoforge { () -> AntarchyNeoforgeBlocks.OURANWOOD_ACORN_BLOCK.get(), () -> AntarchyNeoforgeBlocks.MOSSY_OURANWOOD_LOG.get(), () -> AntarchyNeoforgeBlocks.MOSSY_OURANWOOD_WOOD.get(), + () -> AntarchyNeoforgeBlocks.UMBRAL_MOSS_BLOCK.get(), + () -> AntarchyNeoforgeBlocks.UMBRAL_MOSS_CARPET.get(), + () -> AntarchyNeoforgeBlocks.BLUSH_MOSS_BLOCK.get(), + () -> AntarchyNeoforgeBlocks.BLUSH_MOSS_CARPET.get(), () -> AntarchyNeoforgeBlocks.ORANGE_MILKWEED.get(), () -> AntarchyNeoforgeBlocks.PINK_MILKWEED.get(), () -> AntarchyNeoforgeBlocks.BED_BUG_EGG.get(), @@ -277,19 +283,45 @@ public class AntarchyNeoforge { () -> AntarchyNeoforgeBlocks.HUSHWEED.get(), () -> AntarchyNeoforgeBlocks.OURANWOOD_SQUIRREL_NEST.get(), () -> AntarchyNeoforgeBlocks.BRUTALFLY_COCOON_SPAWNER.get(), + () -> AntarchyNeoforgeBlocks.GIANT_LILY_PAD.get(), () -> AntarchyNeoforgeBlocks.ANT_NEST_BLOCK_ENTITY.get(), () -> AntarchyNeoforgeBlocks.DREAM_CAMPFIRE_BLOCK_ENTITY.get(), () -> AntarchyNeoforgeBlocks.WASP_NEST_BLOCK_ENTITY.get(), () -> AntarchyNeoforgeBlocks.HUSHWEED_BLOCK_ENTITY.get(), () -> AntarchyNeoforgeMisc.STINKY_GAS.get(), () -> AntarchyNeoforgeMisc.STINKY_FLY.get(), + () -> AntarchyNeoforgeMisc.PEACH_LEAVES_PARTICLE.get(), () -> AntarchyNeoforgeMisc.DOUBLE_DAMAGE_CHANCE, () -> AntarchyNeoforgeMisc.BLOODGLASS_MAX_HEARTS, () -> AntarchyNeoforgeMisc.BLOODGLASS_WARD ); AntarchyObjects.setOctopusBomb(AntarchyNeoforgeEntites.OCTOPUS_BOMB); - // AntarchyObjects.setGlimmer(AntarchyNeoforgeEntites.GLIMMER); - // AntarchyObjects.setGlimmersGrace(() -> AntarchyNeoforgeMisc.GLIMMERS_GRACE); + AntarchyObjects.setTentacle(AntarchyNeoforgeEntites.TENTACLE); + AntarchyObjects.setKrakensGraspTrident(AntarchyNeoforgeEntites.KRAKENS_GRASP_TRIDENT); + AntarchyObjects.setKrakenTentacle(() -> AntarchyNeoforgeItems.KRAKEN_TENTACLE.get()); + AntarchyObjects.setKrakensGrasp(() -> AntarchyNeoforgeItems.KRAKENS_GRASP.get()); + AntarchyObjects.setOuranwoodDeer(AntarchyNeoforgeEntites.OURANWOOD_DEER); + AntarchyObjects.setGlimmer(AntarchyNeoforgeEntites.GLIMMER); + AntarchyObjects.setSpiritApple(() -> AntarchyNeoforgeItems.SPIRIT_APPLE.get()); + AntarchyObjects.setElka(AntarchyNeoforgeEntites.ELKA); + AntarchyObjects.setPeach(() -> AntarchyNeoforgeItems.PEACH.get()); + AntarchyObjects.setCorn(() -> AntarchyNeoforgeItems.CORN.get()); + AntarchyObjects.setCornSeeds(() -> AntarchyNeoforgeItems.CORN_SEEDS.get()); + AntarchyObjects.setStarCoralBlock(() -> AntarchyNeoforgeBlocks.STAR_CORAL_BLOCK.get()); + AntarchyObjects.setStarCoral(() -> AntarchyNeoforgeBlocks.STAR_CORAL.get()); + AntarchyObjects.setStarCoralFan(() -> AntarchyNeoforgeBlocks.STAR_CORAL_FAN.get()); + AntarchyObjects.setCookedCorndog(() -> AntarchyNeoforgeItems.COOKED_CORNDOG.get()); + AntarchyObjects.setGlimmerBottle(() -> AntarchyNeoforgeItems.GLIMMER_BOTTLE.get()); + AntarchyObjects.setGlimmerVariantComponent(() -> AntarchyNeoforgeMisc.GLIMMER_VARIANT.get()); + AntarchyObjects.setAmericanComponent(() -> AntarchyNeoforgeMisc.AMERICAN.get()); + AntarchyObjects.setLumen(() -> AntarchyNeoforgeMisc.LUMEN.get()); + AntarchyObjects.setFlowingLumen(() -> AntarchyNeoforgeMisc.FLOWING_LUMEN.get()); + AntarchyObjects.setLumenBucket(() -> AntarchyNeoforgeItems.LUMEN_BUCKET.get()); + AntarchyObjects.setLumenBlock(() -> AntarchyNeoforgeBlocks.LUMEN_BLOCK.get()); + AntarchyObjects.setLumenFroglight(() -> AntarchyNeoforgeBlocks.LUMEN_FROGLIGHT.get()); + AntarchyObjects.setPeachLeavesParticle(() -> AntarchyNeoforgeMisc.PEACH_LEAVES_PARTICLE.get()); + // Dorrie is not part of this update yet. + // AntarchyObjects.setDorrieInventoryMenu(AntarchyNeoforgeMisc.DORRIE_INVENTORY_MENU); } private static boolean isModLoaded(String modId) { @@ -299,4 +331,29 @@ public class AntarchyNeoforge { return false; } } + + private static boolean isSupportedInfinityLoaded() { + if (!isModLoaded("infinity")) { + return false; + } + + try { + String version = ModList.get() + .getModContainerById("infinity") + .map(container -> container.getModInfo().getVersion().toString()) + .orElse(null); + if (InfinityCompatVersion.isSupported(version)) { + return true; + } + + Antarchy.LOGGER.warn( + "Skipping Infinity integration because version {} is below the supported minimum {}", + version, + InfinityCompatVersion.requiredVersion() + ); + } catch (Throwable throwable) { + Antarchy.LOGGER.warn("Skipping Infinity integration because the installed Infinity version could not be verified", throwable); + } + return false; + } } diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyToolsConfig.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyToolsConfig.java index 5fe047eb..c8db2817 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyToolsConfig.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyToolsConfig.java @@ -79,6 +79,16 @@ public final class AntarchyToolsConfig { private static final ModConfigSpec.DoubleValue BIG_BERTHA_ATTACK_DAMAGE; private static final ModConfigSpec.DoubleValue BIG_BERTHA_REACH_BONUS; private static final ModConfigSpec.DoubleValue BIG_BERTHA_ATTACK_SPEED; + private static final ModConfigSpec.DoubleValue KRAKENS_GRASP_ATTACK_DAMAGE; + private static final ModConfigSpec.DoubleValue KRAKENS_GRASP_ATTACK_SPEED; + private static final ModConfigSpec.DoubleValue KRAKENS_GRASP_THROWN_DAMAGE; + private static final ModConfigSpec.DoubleValue KRAKENS_GRASP_LIGHTNING_DAMAGE; + private static final ModConfigSpec.BooleanValue KRAKENS_GRASP_INNATE_LOYALTY; + private static final ModConfigSpec.IntValue KRAKENS_GRASP_INNATE_LOYALTY_LEVEL; + private static final ModConfigSpec.IntValue KRAKENS_GRASP_TENTACLE_DURATION_TICKS; + private static final ModConfigSpec.DoubleValue KRAKENS_GRASP_TENTACLE_DAMAGE; + private static final ModConfigSpec.DoubleValue KRAKENS_GRASP_TENTACLE_RADIUS; + private static final ModConfigSpec.IntValue KRAKENS_GRASP_TENTACLE_DAMAGE_INTERVAL_TICKS; private static final ModConfigSpec.IntValue BIG_BERTHA_BASILISK_PARALYZE_DURATION_TICKS; private static final ModConfigSpec.IntValue BIG_BERTHA_KRAKEN_SLOW_TICKS; private static final ModConfigSpec.DoubleValue BIG_BERTHA_BASILISK_COOLDOWN_SECONDS; @@ -145,6 +155,10 @@ public final class AntarchyToolsConfig { private static final ModConfigSpec.DoubleValue SQUIDZOOKA_COOLDOWN_SECONDS; private static final ModConfigSpec.DoubleValue SQUIDZOOKA_LAUNCH_VELOCITY; + private static final ModConfigSpec.DoubleValue RPO_LAUNCHER_COOLDOWN_SECONDS; + private static final ModConfigSpec.DoubleValue RPO_LAUNCHER_LAUNCH_VELOCITY; + private static final ModConfigSpec.DoubleValue RPO_LAUNCHER_EXPLOSION_DAMAGE; + private static final ModConfigSpec.DoubleValue RPO_LAUNCHER_EXPLOSION_RADIUS; // Size Rays @@ -170,12 +184,26 @@ public final class AntarchyToolsConfig { private static final ModConfigSpec.DoubleValue GRAVITY_GUN_MAX_HOLD_DISTANCE; + // Miner's Dream + + private static final ModConfigSpec.BooleanValue MINERS_DREAM_ENABLED; + private static final ModConfigSpec.IntValue MINERS_DREAM_MINIMUM_RANGE; + private static final ModConfigSpec.IntValue MINERS_DREAM_MAXIMUM_RANGE; + private static final ModConfigSpec.IntValue MINERS_DREAM_TORCH_SPACING; + private static final ModConfigSpec.IntValue MINERS_DREAM_BLOCKS_PER_TICK; + + // Miscellaneous items / consumables private static final ModConfigSpec.DoubleValue DUCT_TAPE_REPAIR_PERCENT_PER_USE; private static final ModConfigSpec.DoubleValue POTENT_NYXITE_INVERTED_DURATION_SECONDS; private static final ModConfigSpec.BooleanValue INVERT_PROJECTILES_FROM_INVERTED_PLAYERS; private static final ModConfigSpec.IntValue CORNEA_EAR_NIGHT_VISION_SECONDS; + private static final ModConfigSpec.BooleanValue AMERICAN_ENABLED; + private static final ModConfigSpec.IntValue AMERICAN_BONUS_NUTRITION; + private static final ModConfigSpec.DoubleValue AMERICAN_BONUS_SATURATION; + private static final ModConfigSpec.IntValue AMERICAN_REGENERATION_DURATION_TICKS; + private static final ModConfigSpec.IntValue AMERICAN_REGENERATION_AMPLIFIER; // Moggles @@ -289,6 +317,19 @@ public final class AntarchyToolsConfig { BIG_BERTHA_LUCID_INVERTED_DAMAGE_BONUS_PERCENT = b.comment("Bonus damage percent from Lucid mode while the wielder is inverted.") .defineInRange("lucidModeInvertedDamageBonusPercent", 25.0D, 0.0D, 1000.0D); b.pop(); + b.push("krakensGrasp"); + KRAKENS_GRASP_ATTACK_DAMAGE = b.comment("Melee attack damage of Kraken's Grasp.") .defineInRange("attackDamage", 16.0D, 0.0D, 4096.0D); + KRAKENS_GRASP_ATTACK_SPEED = b.comment("Attack speed of Kraken's Grasp.") .defineInRange("attackSpeed", -2.9D, -10.0D, 10.0D); + KRAKENS_GRASP_THROWN_DAMAGE = b.comment("Damage dealt when the thrown trident hits an entity.") .defineInRange("thrownDamage", 16.0D, 0.0D, 4096.0D); + KRAKENS_GRASP_LIGHTNING_DAMAGE = b.comment("Bonus damage from the lightning strike on every hit.") .defineInRange("lightningDamage", 6.0D, 0.0D, 4096.0D); + KRAKENS_GRASP_INNATE_LOYALTY = b.comment("Whether Kraken's Grasp automatically returns to its thrower like an enchanted Loyalty trident.").define("innateLoyalty", true); + KRAKENS_GRASP_INNATE_LOYALTY_LEVEL = b.comment("Effective Loyalty level used for the innate return, from 1 to 3.") .defineInRange("innateLoyaltyLevel", 3, 1, 3); + KRAKENS_GRASP_TENTACLE_DURATION_TICKS = b.comment("How long a summoned tentacle lasts, in ticks.") .defineInRange("tentacleDurationTicks", 100, 1, 72000); + KRAKENS_GRASP_TENTACLE_DAMAGE = b.comment("Damage a tentacle deals per damage interval to nearby entities.") .defineInRange("tentacleDamage", 3.0D, 0.0D, 4096.0D); + KRAKENS_GRASP_TENTACLE_RADIUS = b.comment("Radius in blocks around a tentacle that it can grab and damage.") .defineInRange("tentacleRadius", 3.0D, 0.0D, 32.0D); + KRAKENS_GRASP_TENTACLE_DAMAGE_INTERVAL_TICKS = b.comment("How often, in ticks, a tentacle damages nearby entities.") .defineInRange("tentacleDamageIntervalTicks", 20, 1, 2000); + b.pop(); + b.push("scorpionWhip"); SCORPION_WHIP_BASE_DAMAGE = b.comment("Base lash damage of the Scorpion Stinger Whip.").defineInRange("baseDamage", 10.0D, 0.0D, 4096.0D); SCORPION_WHIP_REACH_BONUS = b.comment("Extra entity interaction range in blocks while held in main hand.").defineInRange("reachBonus", 5.0D, 0.0D, 32.0D); @@ -379,6 +420,13 @@ public final class AntarchyToolsConfig { SQUIDZOOKA_LAUNCH_VELOCITY = b.comment("Initial launch velocity applied to the Missile Squid.") .defineInRange("launchVelocity", 2.1D, 0.1D, 20.0D); b.pop(); + b.push("rpoLauncher"); + RPO_LAUNCHER_COOLDOWN_SECONDS = b.comment("Cooldown in seconds after firing. Set to 0 to disable.").defineInRange("cooldownSeconds", 1.0D, 0.0D, 3600.0D); + RPO_LAUNCHER_LAUNCH_VELOCITY = b.comment("Initial launch velocity applied to the Octopus Bomb.") .defineInRange("launchVelocity", 2.1D, 0.1D, 20.0D); + RPO_LAUNCHER_EXPLOSION_DAMAGE = b.comment("Max damage dealt at the center of the ink explosion.") .defineInRange("explosionDamage", 14.0D, 0.0D, 4096.0D); + RPO_LAUNCHER_EXPLOSION_RADIUS = b.comment("Radius in blocks of the ink explosion.") .defineInRange("explosionRadius", 4.0D, 0.5D, 32.0D); + b.pop(); + // Size Rays @@ -424,6 +472,17 @@ public final class AntarchyToolsConfig { b.pop(); + // Miner's Dream + + b.push("minersDream"); + MINERS_DREAM_ENABLED = b.comment("Master toggle. If false, the item remains craftable but cannot be used.").define("enabled", true); + MINERS_DREAM_MINIMUM_RANGE = b.comment("Minimum cave length in blocks. Clamped to [8, 256].") .defineInRange("minimumRange", 48, 8, 256); + MINERS_DREAM_MAXIMUM_RANGE = b.comment("Maximum cave length in blocks. Clamped to [8, 256].") .defineInRange("maximumRange", 96, 8, 256); + MINERS_DREAM_TORCH_SPACING = b.comment("Approximate blocks between torch placements along the cave.") .defineInRange("torchSpacing", 10, 4, 64); + MINERS_DREAM_BLOCKS_PER_TICK = b.comment("Maximum blocks removed per server tick while excavating.") .defineInRange("blocksPerTick", 150, 1, 2000); + b.pop(); + + // Miscellaneous items / consumables b.push("ductTape"); @@ -444,6 +503,14 @@ public final class AntarchyToolsConfig { .defineInRange("nightVisionSeconds", 15, 0, 600); b.pop(); + b.push("american"); + AMERICAN_ENABLED = b.comment("If false, foods cannot be Americanized with High Fructose Corn Syrup.").define("enabled", true); + AMERICAN_BONUS_NUTRITION = b.comment("Extra hunger points restored when eating an Americanized food.").defineInRange("bonusNutrition", 2, 0, 100); + AMERICAN_BONUS_SATURATION = b.comment("Extra saturation restored when eating an Americanized food.").defineInRange("bonusSaturation", 1.0D, 0.0D, 100.0D); + AMERICAN_REGENERATION_DURATION_TICKS = b.comment("Duration of the Regeneration effect granted when eating an Americanized food, in ticks.").defineInRange("regenerationDurationTicks", 60, 0, 72000); + AMERICAN_REGENERATION_AMPLIFIER = b.comment("Amplifier of the Regeneration effect granted when eating an Americanized food (0 = I).").defineInRange("regenerationAmplifier", 0, 0, 10); + b.pop(); + b.push("moggles"); MOGGLES_VISION_RADIUS = b.comment("Radius in blocks of the see-through effect (cube side = 2r+1).").defineInRange("visionRadius", 2, 1, 16); MOGGLES_VISION_MAX_LIGHT = b.comment("Maximum block light level where Moggles vision activates.") .defineInRange("visionMaxLight", 7, 0, 15); @@ -510,6 +577,17 @@ public final class AntarchyToolsConfig { static double bigBerthaBasiliskCooldownSeconds() { return BIG_BERTHA_BASILISK_COOLDOWN_SECONDS.get(); } static double bigBerthaLucidInvertedDurationSeconds() { return BIG_BERTHA_LUCID_INVERTED_DURATION_SECONDS.get(); } static double bigBerthaLucidInvertedDamageBonusPercent(){ return BIG_BERTHA_LUCID_INVERTED_DAMAGE_BONUS_PERCENT.get(); } + + static double krakensGraspAttackDamage() { return KRAKENS_GRASP_ATTACK_DAMAGE.get(); } + static double krakensGraspAttackSpeed() { return KRAKENS_GRASP_ATTACK_SPEED.get(); } + static double krakensGraspThrownDamage() { return KRAKENS_GRASP_THROWN_DAMAGE.get(); } + static double krakensGraspLightningDamage() { return KRAKENS_GRASP_LIGHTNING_DAMAGE.get(); } + static boolean krakensGraspInnateLoyalty() { return KRAKENS_GRASP_INNATE_LOYALTY.get(); } + static int krakensGraspInnateLoyaltyLevel() { return KRAKENS_GRASP_INNATE_LOYALTY_LEVEL.get(); } + static int krakensGraspTentacleDurationTicks() { return KRAKENS_GRASP_TENTACLE_DURATION_TICKS.get(); } + static double krakensGraspTentacleDamage() { return KRAKENS_GRASP_TENTACLE_DAMAGE.get(); } + static double krakensGraspTentacleRadius() { return KRAKENS_GRASP_TENTACLE_RADIUS.get(); } + static int krakensGraspTentacleDamageIntervalTicks() { return KRAKENS_GRASP_TENTACLE_DAMAGE_INTERVAL_TICKS.get(); } static double scorpionWhipBaseDamage() { return SCORPION_WHIP_BASE_DAMAGE.get(); } static double scorpionWhipReachBonus() { return SCORPION_WHIP_REACH_BONUS.get(); } static int scorpionWhipPoisonDurationTicks() { return SCORPION_WHIP_POISON_DURATION_TICKS.get(); } @@ -559,6 +637,10 @@ public final class AntarchyToolsConfig { static double squidzookaCooldownSeconds() { return SQUIDZOOKA_COOLDOWN_SECONDS.get(); } static double squidzookaLaunchVelocity() { return SQUIDZOOKA_LAUNCH_VELOCITY.get(); } + static double rpoLauncherCooldownSeconds() { return RPO_LAUNCHER_COOLDOWN_SECONDS.get(); } + static double rpoLauncherLaunchVelocity() { return RPO_LAUNCHER_LAUNCH_VELOCITY.get(); } + static double rpoLauncherExplosionDamage() { return RPO_LAUNCHER_EXPLOSION_DAMAGE.get(); } + static double rpoLauncherExplosionRadius() { return RPO_LAUNCHER_EXPLOSION_RADIUS.get(); } static boolean sizeChangingRaysEnabled() { return SIZE_CHANGING_RAYS_ENABLED.get(); } static double sizeRayCooldownSeconds() { return SIZE_RAY_COOLDOWN_SECONDS.get(); } @@ -579,9 +661,20 @@ public final class AntarchyToolsConfig { static double gravityGunCooldownSeconds() { return GRAVITY_GUN_COOLDOWN_SECONDS.get(); } static double gravityGunMaxHoldDistance() { return GRAVITY_GUN_MAX_HOLD_DISTANCE.get(); } + static boolean minersDreamEnabled() { return MINERS_DREAM_ENABLED.get(); } + static int minersDreamMinimumRange() { return MINERS_DREAM_MINIMUM_RANGE.get(); } + static int minersDreamMaximumRange() { return MINERS_DREAM_MAXIMUM_RANGE.get(); } + static int minersDreamTorchSpacing() { return MINERS_DREAM_TORCH_SPACING.get(); } + static int minersDreamBlocksPerTick() { return MINERS_DREAM_BLOCKS_PER_TICK.get(); } + static double ductTapeRepairPercentPerUse() { return DUCT_TAPE_REPAIR_PERCENT_PER_USE.get(); } static double potentNyxiteInvertedDurationSeconds() { return POTENT_NYXITE_INVERTED_DURATION_SECONDS.get(); } static int corneaEarNightVisionSeconds() { return CORNEA_EAR_NIGHT_VISION_SECONDS.get(); } + static boolean americanizingEnabled() { return AMERICAN_ENABLED.get(); } + static int americanBonusNutrition() { return AMERICAN_BONUS_NUTRITION.get(); } + static double americanBonusSaturation() { return AMERICAN_BONUS_SATURATION.get(); } + static int americanRegenerationDurationTicks() { return AMERICAN_REGENERATION_DURATION_TICKS.get(); } + static int americanRegenerationAmplifier() { return AMERICAN_REGENERATION_AMPLIFIER.get(); } static int mogglesVisionRadius() { return MOGGLES_VISION_RADIUS.get(); } static int mogglesVisionMaxLight() { return MOGGLES_VISION_MAX_LIGHT.get(); } diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/OuranwoodWoodTypes.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyWoodTypes.java similarity index 77% rename from neoforge/src/main/java/com/craisinlord/antarchy/neoforge/OuranwoodWoodTypes.java rename to neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyWoodTypes.java index bf085257..d361610a 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/OuranwoodWoodTypes.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyWoodTypes.java @@ -4,10 +4,11 @@ import com.craisinlord.antarchy.Antarchy; import net.minecraft.world.level.block.state.properties.BlockSetType; import net.minecraft.world.level.block.state.properties.WoodType; -public final class OuranwoodWoodTypes { +public final class AntarchyWoodTypes { public static final WoodType OURANWOOD = register("ouranwood"); + public static final WoodType PEACH = register("peach"); - private OuranwoodWoodTypes() { + private AntarchyWoodTypes() { } private static WoodType register(String name) { diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/NeoForgeInfinityCompat.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/NeoForgeInfinityCompat.java index a2f5d37a..03fa25f9 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/NeoForgeInfinityCompat.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/NeoForgeInfinityCompat.java @@ -1,5 +1,6 @@ package com.craisinlord.antarchy.neoforge; +import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.compat.infinity.InfinityCompatBridge; import net.lerariemann.infinity.util.InfinityMethods; import net.lerariemann.infinity.util.teleport.WarpLogic; @@ -18,6 +19,7 @@ public final class NeoForgeInfinityCompat implements InfinityCompatBridge { try { return InfinityMethods.getRandomId(random); } catch (Throwable throwable) { + Antarchy.LOGGER.error("[Antarchy] Failed to get a random Infinity dimension id", throwable); return null; } } @@ -28,6 +30,7 @@ public final class NeoForgeInfinityCompat implements InfinityCompatBridge { WarpLogic.requestWarp(player, dimensionId, false); return true; } catch (Throwable throwable) { + Antarchy.LOGGER.error("[Antarchy] Failed to request an Infinity warp to {}", dimensionId, throwable); return false; } } diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyNeoForgeClient.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyNeoForgeClient.java index 1e5af0fe..63396b67 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyNeoForgeClient.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyNeoForgeClient.java @@ -53,6 +53,7 @@ import net.neoforged.fml.common.EventBusSubscriber; import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent; import net.neoforged.neoforge.client.event.RegisterParticleProvidersEvent; import net.neoforged.neoforge.client.event.RegisterColorHandlersEvent; +import net.neoforged.neoforge.client.event.RegisterMenuScreensEvent; import net.neoforged.neoforge.client.event.EntityRenderersEvent; import net.neoforged.neoforge.client.event.RegisterGuiLayersEvent; import net.neoforged.neoforge.client.extensions.common.IClientItemExtensions; @@ -68,6 +69,8 @@ public final class AntarchyNeoForgeClient { 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 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"); @@ -98,6 +101,8 @@ public final class AntarchyNeoForgeClient { event.registerEntityRenderer(AntarchyNeoforgeEntites.TRIFFID.get(), context -> withParalyzedGeoLayer(new TriffidRenderer(context))); event.registerEntityRenderer(AntarchyNeoforgeEntites.OURANWOOD_BOAT_ENTITY.get(), context -> new OuranwoodBoatRenderer<>(context, OURANWOOD_BOAT_TEXTURE, false)); event.registerEntityRenderer(AntarchyNeoforgeEntites.OURANWOOD_CHEST_BOAT_ENTITY.get(), context -> new OuranwoodBoatRenderer<>(context, OURANWOOD_CHEST_BOAT_TEXTURE, true)); + event.registerEntityRenderer(AntarchyNeoforgeEntites.PEACH_BOAT_ENTITY.get(), context -> new PeachBoatRenderer<>(context, PEACH_BOAT_TEXTURE, false)); + event.registerEntityRenderer(AntarchyNeoforgeEntites.PEACH_CHEST_BOAT_ENTITY.get(), context -> new PeachBoatRenderer<>(context, PEACH_CHEST_BOAT_TEXTURE, true)); event.registerEntityRenderer(AntarchyNeoforgeEntites.APPLE_COW.get(), context -> withParalyzedGeoLayer(new AppleCowRenderer(context))); event.registerEntityRenderer(AntarchyNeoforgeEntites.GOLDEN_APPLE_COW.get(), context -> withParalyzedGeoLayer(new AppleCowRenderer(context))); event.registerEntityRenderer(AntarchyNeoforgeEntites.ENCHANTED_GOLDEN_APPLE_COW.get(), context -> withParalyzedGeoLayer(new AppleCowRenderer(context))); @@ -105,6 +110,8 @@ public final class AntarchyNeoForgeClient { event.registerEntityRenderer(AntarchyNeoforgeEntites.DR_TRAYAURUS.get(), context -> new DrTrayaurusRenderer(context, DR_TRAYAURUS_TEXTURE)); event.registerEntityRenderer(AntarchyNeoforgeEntites.CLOUD_SHARK.get(), context -> withParalyzedGeoLayer(new CloudSharkRenderer(context))); event.registerEntityRenderer(AntarchyNeoforgeEntites.KRAKEN.get(), context -> withParalyzedGeoLayer(new KrakenRenderer(context))); + event.registerEntityRenderer(AntarchyNeoforgeEntites.TENTACLE.get(), com.craisinlord.antarchy.content.client.renderer.TentacleRenderer::new); + event.registerEntityRenderer(AntarchyNeoforgeEntites.KRAKENS_GRASP_TRIDENT.get(), ThrownItemRenderer::new); event.registerEntityRenderer(AntarchyNeoforgeEntites.MISSILE_SQUID.get(), context -> withParalyzedGeoLayer(new MissileSquidRenderer(context))); event.registerEntityRenderer(AntarchyNeoforgeEntites.OCTOPUS_BOMB.get(), context -> withParalyzedGeoLayer(new OctopusBombRenderer(context))); event.registerEntityRenderer(AntarchyNeoforgeEntites.NIGHTMARE.get(), context -> withParalyzedGeoLayer(new NightmareRenderer(context))); @@ -117,6 +124,7 @@ public final class AntarchyNeoForgeClient { event.registerEntityRenderer(AntarchyNeoforgeEntites.GROWTH_RAY_PROJECTILE.get(), SizeRayProjectileRenderer::new); event.registerEntityRenderer(AntarchyNeoforgeEntites.LUCID_BOLT.get(), LucidBoltRenderer::new); event.registerEntityRenderer(AntarchyNeoforgeEntites.LUCID_PEARL_PROJECTILE.get(), ThrownItemRenderer::new); + event.registerEntityRenderer(AntarchyNeoforgeEntites.KRAKENS_GRASP_TRIDENT.get(), ThrownItemRenderer::new); event.registerEntityRenderer(AntarchyNeoforgeEntites.HUSH_PROJECTILE.get(), HushProjectileRenderer::new); event.registerEntityRenderer(AntarchyNeoforgeEntites.BRUTALFLY_ORB.get(), BrutalflyOrbRenderer::new); event.registerEntityRenderer(AntarchyNeoforgeEntites.UPWARD_FALLING_BLOCK.get(), com.craisinlord.antarchy.content.client.renderer.UpwardFallingBlockRenderer::new); @@ -125,7 +133,11 @@ public final class AntarchyNeoForgeClient { event.registerEntityRenderer(AntarchyNeoforgeEntites.TORETERROR.get(), ToreterrorRenderer::new); event.registerEntityRenderer(AntarchyNeoforgeEntites.WATER_BOMB.get(), WaterBombRenderer::new); event.registerEntityRenderer(AntarchyNeoforgeEntites.CHEEP.get(), context -> withParalyzedGeoLayer(new com.craisinlord.antarchy.content.client.renderer.CheepRenderer(context))); - // event.registerEntityRenderer(AntarchyNeoforgeEntites.GLIMMER.get(), context -> withParalyzedGeoLayer(new com.craisinlord.antarchy.content.client.renderer.GlimmerRenderer(context))); + // Dorrie is not part of this update yet. + // event.registerEntityRenderer(AntarchyNeoforgeEntites.DORRIE.get(), context -> new com.craisinlord.antarchy.content.client.renderer.DorrieRenderer(context)); + event.registerEntityRenderer(AntarchyNeoforgeEntites.OURANWOOD_DEER.get(), context -> new com.craisinlord.antarchy.content.client.renderer.OuranwoodDeerRenderer(context)); + event.registerEntityRenderer(AntarchyNeoforgeEntites.GLIMMER.get(), context -> withParalyzedGeoLayer(new com.craisinlord.antarchy.content.client.renderer.glimmer.GlimmerRenderer(context))); + event.registerEntityRenderer(AntarchyNeoforgeEntites.ELKA.get(), context -> new com.craisinlord.antarchy.content.client.renderer.ElkaRenderer(context)); } @SubscribeEvent @@ -152,6 +164,8 @@ public final class AntarchyNeoForgeClient { public static void registerLayerDefinitions(EntityRenderersEvent.RegisterLayerDefinitions event) { event.registerLayerDefinition(OuranwoodBoatRenderer.boatLayer(), BoatModel::createBodyModel); event.registerLayerDefinition(OuranwoodBoatRenderer.chestBoatLayer(), ChestBoatModel::createBodyModel); + event.registerLayerDefinition(PeachBoatRenderer.boatLayer(), BoatModel::createBodyModel); + event.registerLayerDefinition(PeachBoatRenderer.chestBoatLayer(), ChestBoatModel::createBodyModel); } @SuppressWarnings({"rawtypes", "unchecked"}) @@ -192,7 +206,8 @@ public final class AntarchyNeoForgeClient { event.register( (state, level, pos, tintIndex) -> level != null && pos != null ? BiomeColors.getAverageGrassColor(level, pos) - : net.minecraft.world.level.GrassColor.getDefaultColor() + : net.minecraft.world.level.GrassColor.getDefaultColor(), + AntarchyNeoforgeBlocks.SPIDER_LILY.get() ); } @@ -203,9 +218,11 @@ public final class AntarchyNeoForgeClient { AntarchyNeoforgeItems.OURANWOOD_LEAVES_ITEM.get() ); event.register( - (stack, tintIndex) -> net.minecraft.world.level.GrassColor.getDefaultColor() + (stack, tintIndex) -> tintIndex == 0 ? net.minecraft.world.level.GrassColor.getDefaultColor() : -1, + AntarchyNeoforgeItems.SPIDER_LILY_ITEM.get() ); event.register(new DynamicFluidContainerModel.Colors(), AntarchyNeoforgeItems.ICHOR_BUCKET.get()); + event.register(new DynamicFluidContainerModel.Colors(), AntarchyNeoforgeItems.LUMEN_BUCKET.get()); event.register(new DynamicFluidContainerModel.Colors(), AntarchyNeoforgeItems.ANTIWATER_BUCKET.get()); } @@ -214,6 +231,7 @@ public final class AntarchyNeoForgeClient { event.registerSpriteSet(AntarchyNeoforgeMisc.DREAM_FIRE_FLAME.get(), DreamFlameParticle.Provider::new); event.registerSpriteSet(AntarchyNeoforgeMisc.STINKY_GAS.get(), HypnoticGasParticle.Provider::new); event.registerSpriteSet(AntarchyNeoforgeMisc.STINKY_FLY.get(), FireflyParticle.Provider::new); + event.registerSpriteSet(AntarchyNeoforgeMisc.PEACH_LEAVES_PARTICLE.get(), PeachLeavesParticle.Provider::new); event.registerSpriteSet(AntarchyNeoforgeMisc.HYPNOTIC_GAS.get(), HypnoticGasParticle.Provider::new); event.registerSpriteSet(AntarchyNeoforgeMisc.HYPNOTIC_GAS_DOWN.get(), sprites -> new HypnoticGasParticle.Provider(sprites, true)); event.registerSpecial(AntarchyNeoforgeMisc.HYPNOTIC_GAS_CLOUD.get(), new HypnoticGasCloudParticle.Provider()); @@ -226,6 +244,11 @@ public final class AntarchyNeoForgeClient { event.registerSpriteSet(AntarchyNeoforgeMisc.ORANGE_ASH.get(), OrangeAshParticle.Provider::new); } + @SubscribeEvent + public static void registerMenuScreens(RegisterMenuScreensEvent event) { + event.register(AntarchyNeoforgeMisc.DORRIE_INVENTORY_MENU.get(), com.craisinlord.antarchy.content.client.screen.DorrieInventoryScreen::new); + } + @SubscribeEvent public static void registerGuiLayers(RegisterGuiLayersEvent event) { event.registerAboveAll( @@ -261,6 +284,50 @@ public final class AntarchyNeoForgeClient { @SubscribeEvent public static void registerClientExtensions(RegisterClientExtensionsEvent event) { Antarchy.LOGGER.info("[Antiwater] Registering antiwater client fluid textures still={} flow={}", ANTIWATER_STILL, ANTIWATER_FLOW); + event.registerFluidType(new IClientFluidTypeExtensions() { + @Override + public ResourceLocation getStillTexture() { + return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "block/lumen_still"); + } + + @Override + public ResourceLocation getFlowingTexture() { + return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "block/lumen_flow"); + } + + @Override + public ResourceLocation getOverlayTexture() { + return WATER_OVERLAY; + } + + @Override + public ResourceLocation getRenderOverlayTexture(Minecraft mc) { + return UNDERWATER_OVERLAY; + } + + @Override + public int getTintColor() { + return 0xFFFFFFFF; + } + + @Override + public int getTintColor(FluidState state, BlockAndTintGetter getter, net.minecraft.core.BlockPos pos) { + return 0xFFFFFFFF; + } + + @Override + public Vector3f modifyFogColor(Camera camera, float partialTick, ClientLevel level, int renderDistance, float darkenWorldAmount, Vector3f fluidFogColor) { + return new Vector3f(0.58F, 0.84F, 0.88F); + } + + @Override + public void modifyFogRender(Camera camera, net.minecraft.client.renderer.FogRenderer.FogMode mode, float renderDistance, float partialTick, float nearDistance, float farDistance, FogShape shape) { + RenderSystem.setShaderFogStart(0.4F); + RenderSystem.setShaderFogEnd(Math.min(farDistance, 12.0F)); + RenderSystem.setShaderFogShape(FogShape.CYLINDER); + } + }, AntarchyNeoForgeFluidTypes.LUMEN_TYPE.get()); + event.registerFluidType(new IClientFluidTypeExtensions() { @Override public ResourceLocation getStillTexture() { @@ -405,6 +472,7 @@ public final class AntarchyNeoForgeClient { registerGeoItemExtensionSizeRay(event, AntarchyNeoforgeItems.GROWTH_RAY.get()); registerGeoItemExtension(event, AntarchyNeoforgeItems.GRAVITY_GUN.get(), HumanoidModel.ArmPose.CROSSBOW_HOLD); registerGeoItemExtension(event, AntarchyNeoforgeItems.SQUIDZOOKA.get(), HumanoidModel.ArmPose.CROSSBOW_HOLD); + registerGeoItemExtension(event, AntarchyNeoforgeItems.RPO_LAUNCHER.get(), HumanoidModel.ArmPose.CROSSBOW_HOLD); registerGeoItemExtension(event, AntarchyNeoforgeItems.WATER_CANNON.get(), HumanoidModel.ArmPose.CROSSBOW_HOLD); registerGeoItemExtension(event, AntarchyNeoforgeItems.BATTLE_AXE.get()); registerGeoItemExtension(event, AntarchyNeoforgeItems.BIG_BERTHA.get()); @@ -417,16 +485,32 @@ public final class AntarchyNeoForgeClient { ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.OURANWOOD_DOOR.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.OURANWOOD_TRAPDOOR.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.OURANWOOD_ACORN_BLOCK.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.PEACH_LEAVES.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.PEACH_HANGING_PEACH.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.PEACH_DOOR.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.PEACH_TRAPDOOR.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.PEACH_SAPLING.get(), RenderType.cutout()); // ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.OURANWOOD_VINE.get(), RenderType.cutout()); // ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.OURANWOOD_VINE_PLANT.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.DUPLICATOR_SAPLING.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.ORANGE_MILKWEED.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.PINK_MILKWEED.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.CAMELLIA.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.SPIDER_LILY.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.GIANT_LILY_PAD.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.HUSHWEED.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.CORNEA_STALK.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.CORN_CROP.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.WILD_CORN.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.ANTIMETAL_SCAFFOLDING.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.UMBRAL_MOSS_CARPET.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.NYXITE_SPIKE.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.STAR_CORAL.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.STAR_CORAL_FAN.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.STAR_CORAL_WALL_FAN.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.DEAD_STAR_CORAL.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.DEAD_STAR_CORAL_FAN.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.DEAD_STAR_CORAL_WALL_FAN.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.SMALL_BLOOD_CRYSTAL_BUD.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.MEDIUM_BLOOD_CRYSTAL_BUD.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.LARGE_BLOOD_CRYSTAL_BUD.get(), RenderType.cutout()); @@ -438,6 +522,7 @@ public final class AntarchyNeoForgeClient { ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.DREAM_FIRE.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.DREAM_CEILING_FIRE.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.ANTIWATER_BLOCK.get(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.LUMEN_BLOCK.get(), RenderType.translucent()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.ELYTHIA_PORTAL.get(), RenderType.translucent()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.THORAXIS_PORTAL.get(), RenderType.translucent()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.TRIFFID_GOO_BLOCK.get(), RenderType.translucent()); diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/content/block/WildCornBlock.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/content/block/WildCornBlock.java new file mode 100644 index 00000000..e51b6534 --- /dev/null +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/content/block/WildCornBlock.java @@ -0,0 +1,64 @@ +package com.craisinlord.antarchy.neoforge.content.block; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.block.CornCropBlock; +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 static final MapCodec CODEC = Block.simpleCodec(WildCornBlock::new); + + public WildCornBlock(BlockBehaviour.Properties properties) { + super(properties); + this.registerDefaultState(this.stateDefinition.any().setValue(AGE, 3).setValue(HALF, DoubleBlockHalf.LOWER)); + } + + @Override + public MapCodec codec() { + return CODEC; + } + + @Override + protected boolean mayPlaceOn(BlockState state, BlockGetter level, BlockPos pos) { + return state.is(Blocks.GRASS_BLOCK); + } + + @Override + protected boolean isRandomlyTicking(BlockState state) { + return false; + } + + @Override + protected void randomTick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { + } + + @Override + public boolean isValidBonemealTarget(LevelReader level, BlockPos pos, BlockState state) { + 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(LevelReader level, BlockPos pos, BlockState state) { + return new ItemStack(AntarchyObjects.CORN.get()); + } +} diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/mixins/infinity/RandomSpringMixin.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/mixins/infinity/RandomSpringMixin.java deleted file mode 100644 index d80afdaf..00000000 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/mixins/infinity/RandomSpringMixin.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.craisinlord.antarchy.neoforge.mixins.infinity; - -import net.lerariemann.infinity.dimensions.features.fluid_springs.RandomSpring; -import net.lerariemann.infinity.util.core.ConfigType; -import net.lerariemann.infinity.util.core.RandomProvider; -import net.minecraft.nbt.CompoundTag; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; - -import java.util.Random; -@Mixin(value = RandomSpring.class, remap = false) -/* - * Skips bad fluid picks for Infinity random springs. - */ -public abstract class RandomSpringMixin { - @Redirect( - method = "feature()Lnet/minecraft/nbt/CompoundTag;", - at = @At( - value = "INVOKE", - target = "Lnet/lerariemann/infinity/util/core/RandomProvider;randomName(Ljava/util/Random;Lnet/lerariemann/infinity/util/core/ConfigType;)Ljava/lang/String;" - ), - remap = false - ) - private String antarchy$useFluidIdForSpring(RandomProvider provider, Random random, ConfigType configType) { - if (configType != ConfigType.FLUIDS) { - return provider.randomName(random, configType); - } - - CompoundTag fluidTag = provider.randomElement(random, configType); - String fluidId = fluidTag.getString("fluidName"); - if (!fluidId.isEmpty()) { - return fluidId; - } - return fluidTag.getString("Name"); - } -} diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoForgeEvents.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoForgeEvents.java index e12edd0a..4032a874 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoForgeEvents.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoForgeEvents.java @@ -4,6 +4,7 @@ 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.CustomBrewingRecipes; import com.craisinlord.antarchy.content.block.DuctTapeBlock; import com.craisinlord.antarchy.content.block.PotentNyxiteBlock; import com.craisinlord.antarchy.content.bloodglass.BloodglassAccess; @@ -36,6 +37,7 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.tags.FluidTags; import net.minecraft.world.item.*; import net.minecraft.world.item.alchemy.Potions; +import net.neoforged.neoforge.common.brewing.BrewingRecipe; import net.minecraft.world.level.block.ComposterBlock; import net.minecraft.world.level.block.DispenserBlock; import net.minecraft.world.level.block.RotatedPillarBlock; @@ -57,6 +59,8 @@ import net.neoforged.neoforge.event.entity.player.PlayerInteractEvent; import net.neoforged.neoforge.event.level.BlockEvent; import net.neoforged.neoforge.event.tick.EntityTickEvent; import net.neoforged.neoforge.event.tick.PlayerTickEvent; +import net.neoforged.neoforge.event.tick.ServerTickEvent; +import com.craisinlord.antarchy.content.item.MinersDreamExcavationManager; import net.neoforged.neoforge.fluids.FluidInteractionRegistry; import net.neoforged.neoforge.network.PacketDistributor; @@ -91,6 +95,7 @@ public final class AntarchyNeoForgeEvents { NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::tickDreadAndIchor); NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::tickScorpionWhips); NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::tickDreamSandLowGravity); + NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::tickMinersDreamExcavations); NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::handleAntiwaterDamage); NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::handleAntiwaterFall); NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::handleDreamSandFall); @@ -457,15 +462,19 @@ public final class AntarchyNeoForgeEvents { if (player.level().isClientSide()) return; BloodglassAccess access = (BloodglassAccess) player; - int shieldCount = Math.min( + int targetCap = Math.min( event.getEffectInstance().getAmplifier() + 1, Math.max(0, AntarchySettings.bloodCrystalHardMaxShields() - access.antarchy$getArmorShieldsActive() - access.antarchy$getArmorShieldLostCount()) ); - access.antarchy$setAppleShieldsActive(shieldCount); - access.antarchy$setAppleShieldLostCount(0); - access.antarchy$setAppleRechargeTimer(0); - syncBloodglass((ServerPlayer) player); + int currentCap = access.antarchy$getAppleShieldsActive() + access.antarchy$getAppleShieldLostCount(); + // Only grant newly-added capacity (e.g. first application, or a higher amplifier). + // A mere duration refresh of an already-active ward must not reset shields that are + // already lost, nor restart their recharge timer. + if (targetCap > currentCap) { + access.antarchy$setAppleShieldsActive(access.antarchy$getAppleShieldsActive() + (targetCap - currentCap)); + syncBloodglass((ServerPlayer) player); + } } private static void clearAppleShields(Player player) { @@ -859,6 +868,12 @@ public final class AntarchyNeoForgeEvents { } } + static void tickMinersDreamExcavations(ServerTickEvent.Post event) { + for (ServerLevel level : event.getServer().getAllLevels()) { + MinersDreamExcavationManager.tick(level); + } + } + static void tickDreamSandLowGravity(EntityTickEvent.Post event) { if (!(event.getEntity() instanceof LivingEntity livingEntity)) { return; @@ -971,6 +986,50 @@ public final class AntarchyNeoForgeEvents { } static void registerBrewingRecipes(RegisterBrewingRecipesEvent event) { + net.minecraft.tags.TagKey rootsTag = net.minecraft.tags.TagKey.create( + net.minecraft.core.registries.Registries.ITEM, + net.minecraft.resources.ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "roots") + ); + event.getBuilder().addRecipe(new BrewingRecipe( + net.minecraft.world.item.crafting.Ingredient.of(Items.POTION), + net.minecraft.world.item.crafting.Ingredient.of(AntarchyNeoforgeItems.CORN.get()), + new ItemStack(AntarchyNeoforgeItems.HIGH_FRUCTOSE_CORN_SYRUP.get()) + ) { + @Override + public boolean isInput(ItemStack stack) { + return stack.is(Items.POTION) && stack.getOrDefault(net.minecraft.core.component.DataComponents.POTION_CONTENTS, net.minecraft.world.item.alchemy.PotionContents.EMPTY).is(net.minecraft.world.item.alchemy.Potions.WATER); + } + + @Override + public boolean isIngredient(ItemStack stack) { + return stack.is(AntarchyNeoforgeItems.CORN.get()); + } + + @Override + public ItemStack getOutput(ItemStack input, ItemStack ingredient) { + return CustomBrewingRecipes.getOutput(input, ingredient); + } + }); + event.getBuilder().addRecipe(new BrewingRecipe( + net.minecraft.world.item.crafting.Ingredient.of(AntarchyNeoforgeItems.HIGH_FRUCTOSE_CORN_SYRUP.get()), + net.minecraft.world.item.crafting.Ingredient.of(rootsTag), + new ItemStack(AntarchyNeoforgeItems.ROOT_BEER.get()) + ) { + @Override + public boolean isInput(ItemStack stack) { + return stack.is(AntarchyNeoforgeItems.HIGH_FRUCTOSE_CORN_SYRUP.get()); + } + + @Override + public boolean isIngredient(ItemStack stack) { + return stack.is(rootsTag); + } + + @Override + public ItemStack getOutput(ItemStack input, ItemStack ingredient) { + return CustomBrewingRecipes.getOutput(input, ingredient); + } + }); event.getBuilder().addMix(Potions.AWKWARD, AntarchyNeoforgeItems.LUCID_EYE.get(), AntarchyNeoforgeMisc.INVERSION); event.getBuilder().addMix(AntarchyNeoforgeMisc.INVERSION, Items.REDSTONE, AntarchyNeoforgeMisc.LONG_INVERSION); event.getBuilder().addMix(Potions.AWKWARD, AntarchyNeoforgeItems.STINK_BUG.get(), AntarchyNeoforgeMisc.STINKY_POTION); @@ -1075,6 +1134,16 @@ public final class AntarchyNeoForgeEvents { if (state.is(AntarchyNeoforgeBlocks.MOSSY_OURANWOOD_WOOD.get())) { event.setFinalState(AntarchyNeoforgeBlocks.STRIPPED_OURANWOOD_WOOD.get().defaultBlockState().setValue(RotatedPillarBlock.AXIS, state.getValue(RotatedPillarBlock.AXIS))); + return; + } + + if (state.is(AntarchyNeoforgeBlocks.PEACH_LOG.get())) { + event.setFinalState(AntarchyNeoforgeBlocks.STRIPPED_PEACH_LOG.get().defaultBlockState().setValue(RotatedPillarBlock.AXIS, state.getValue(RotatedPillarBlock.AXIS))); + return; + } + + if (state.is(AntarchyNeoforgeBlocks.PEACH_WOOD.get())) { + event.setFinalState(AntarchyNeoforgeBlocks.STRIPPED_PEACH_WOOD.get().defaultBlockState().setValue(RotatedPillarBlock.AXIS, state.getValue(RotatedPillarBlock.AXIS))); } } @@ -1084,6 +1153,7 @@ public final class AntarchyNeoForgeEvents { DispenserBlock.registerBehavior(AntarchyNeoforgeItems.SHRINK_RAY.get(), new com.craisinlord.antarchy.content.SizeRayDispenseBehavior()); DispenserBlock.registerBehavior(AntarchyNeoforgeItems.GROWTH_RAY.get(), new com.craisinlord.antarchy.content.SizeRayDispenseBehavior()); DispenserBlock.registerBehavior(AntarchyNeoforgeItems.SQUIDZOOKA.get(), new com.craisinlord.antarchy.content.SquidzookaDispenseBehavior()); + DispenserBlock.registerBehavior(AntarchyNeoforgeItems.RPO_LAUNCHER.get(), new com.craisinlord.antarchy.content.RpoLauncherDispenseBehavior()); DispenserBlock.registerBehavior(AntarchyNeoforgeItems.WATER_CANNON.get(), new com.craisinlord.antarchy.content.WaterCannonDispenseBehavior()); LucidEyeProjectileEntity.defaultItemSupplier = () -> AntarchyNeoforgeItems.LUCID_PEARL.get(); LucidEntity.invertedEffectSupplier = () -> AntarchyNeoforgeMisc.INVERTED; @@ -1119,8 +1189,15 @@ public final class AntarchyNeoForgeEvents { ); ComposterBlock.COMPOSTABLES.put(AntarchyNeoforgeBlocks.UMBRAL_MOSS_BLOCK.get().asItem(), 0.65f); ComposterBlock.COMPOSTABLES.put(AntarchyNeoforgeBlocks.UMBRAL_MOSS_CARPET.get().asItem(), 0.3f); + ComposterBlock.COMPOSTABLES.put(AntarchyNeoforgeBlocks.BLUSH_MOSS_BLOCK.get().asItem(), 0.65f); + ComposterBlock.COMPOSTABLES.put(AntarchyNeoforgeBlocks.BLUSH_MOSS_CARPET.get().asItem(), 0.3f); ComposterBlock.COMPOSTABLES.put(AntarchyNeoforgeBlocks.HUSHWEED.get().asItem(), 0.65f); ComposterBlock.COMPOSTABLES.put(AntarchyNeoforgeItems.CORNEA_EAR.get(), 0.65f); + ComposterBlock.COMPOSTABLES.put(AntarchyNeoforgeBlocks.PEACH_LEAVES.get().asItem(), 0.3f); + ComposterBlock.COMPOSTABLES.put(AntarchyNeoforgeItems.PEACH_SAPLING_ITEM.get(), 0.3f); + ComposterBlock.COMPOSTABLES.put(AntarchyNeoforgeItems.CORN.get(), 0.65f); + ComposterBlock.COMPOSTABLES.put(AntarchyNeoforgeItems.CORN_SEEDS.get(), 0.3f); + ComposterBlock.COMPOSTABLES.put(AntarchyNeoforgeItems.PEACH.get(), 0.65f); }); } } diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeBlocks.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeBlocks.java index a77b7f12..1fbfc3c0 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeBlocks.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeBlocks.java @@ -10,8 +10,10 @@ import com.craisinlord.antarchy.content.block.entity.HushweedBlockEntity; import com.craisinlord.antarchy.content.block.entity.PotentNyxiteBlockEntity; import com.craisinlord.antarchy.content.block.entity.WaspNestBlockEntity; import com.craisinlord.antarchy.content.fluid.BileLiquidBlock; +import com.craisinlord.antarchy.content.fluid.LumenLiquidBlock; import com.craisinlord.antarchy.content.portal.PermanentPortalType; -import com.craisinlord.antarchy.neoforge.OuranwoodWoodTypes; +import com.craisinlord.antarchy.neoforge.content.block.WildCornBlock; +import com.craisinlord.antarchy.neoforge.AntarchyWoodTypes; import com.craisinlord.antarchy.neoforge.content.fluid.AntiwaterFluidType; import com.mojang.serialization.MapCodec; import net.minecraft.core.Direction; @@ -83,14 +85,60 @@ public final class AntarchyNeoforgeBlocks { () -> new MilkweedBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.PEONY))); public static final DeferredBlock PINK_MILKWEED = BLOCKS.register("pink_milkweed", () -> new MilkweedBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.PEONY))); + public static final DeferredBlock CAMELLIA = BLOCKS.register("camellia", + () -> new com.craisinlord.antarchy.content.block.CamelliaBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.PEONY))); + public static final DeferredBlock SPIDER_LILY = BLOCKS.register("spider_lily", + () -> new com.craisinlord.antarchy.content.block.SpiderLilyBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.POPPY))); + public static final DeferredBlock GIANT_LILY_PAD = BLOCKS.register("giant_lily_pad", + () -> new GiantLilyPadBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.LILY_PAD))); public static final DeferredBlock OURANWOOD_SIGN = BLOCKS.register("ouranwood_sign", - () -> new StandingSignBlock(OuranwoodWoodTypes.OURANWOOD, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_SIGN))); + () -> new StandingSignBlock(AntarchyWoodTypes.OURANWOOD, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_SIGN))); public static final DeferredBlock OURANWOOD_WALL_SIGN = BLOCKS.register("ouranwood_wall_sign", - () -> new WallSignBlock(OuranwoodWoodTypes.OURANWOOD, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_WALL_SIGN))); + () -> new WallSignBlock(AntarchyWoodTypes.OURANWOOD, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_WALL_SIGN))); public static final DeferredBlock OURANWOOD_HANGING_SIGN = BLOCKS.register("ouranwood_hanging_sign", - () -> new CeilingHangingSignBlock(OuranwoodWoodTypes.OURANWOOD, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_HANGING_SIGN))); + () -> new CeilingHangingSignBlock(AntarchyWoodTypes.OURANWOOD, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_HANGING_SIGN))); public static final DeferredBlock OURANWOOD_WALL_HANGING_SIGN = BLOCKS.register("ouranwood_wall_hanging_sign", - () -> new WallHangingSignBlock(OuranwoodWoodTypes.OURANWOOD, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_WALL_HANGING_SIGN))); + () -> new WallHangingSignBlock(AntarchyWoodTypes.OURANWOOD, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_WALL_HANGING_SIGN))); + public static final DeferredBlock PEACH_LOG = BLOCKS.register("peach_log", + () -> new RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_LOG))); + public static final DeferredBlock PEACH_WOOD = BLOCKS.register("peach_wood", + () -> new RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_WOOD))); + public static final DeferredBlock STRIPPED_PEACH_LOG = BLOCKS.register("stripped_peach_log", + () -> new RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.STRIPPED_JUNGLE_LOG))); + public static final DeferredBlock STRIPPED_PEACH_WOOD = BLOCKS.register("stripped_peach_wood", + () -> new RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.STRIPPED_JUNGLE_WOOD))); + public static final DeferredBlock PEACH_PLANKS = BLOCKS.register("peach_planks", + () -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_PLANKS))); + public static final DeferredBlock PEACH_STAIRS = BLOCKS.register("peach_stairs", + () -> new StairBlock(PEACH_PLANKS.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_STAIRS))); + public static final DeferredBlock PEACH_SLAB = BLOCKS.register("peach_slab", + () -> new SlabBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_SLAB))); + public static final DeferredBlock PEACH_FENCE = BLOCKS.register("peach_fence", + () -> new FenceBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_FENCE))); + public static final DeferredBlock PEACH_FENCE_GATE = BLOCKS.register("peach_fence_gate", + () -> new FenceGateBlock(WoodType.JUNGLE, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_FENCE_GATE))); + public static final DeferredBlock PEACH_DOOR = BLOCKS.register("peach_door", + () -> new DoorBlock(BlockSetType.JUNGLE, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_DOOR))); + public static final DeferredBlock PEACH_TRAPDOOR = BLOCKS.register("peach_trapdoor", + () -> new TrapDoorBlock(BlockSetType.JUNGLE, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_TRAPDOOR))); + public static final DeferredBlock PEACH_PRESSURE_PLATE = BLOCKS.register("peach_pressure_plate", + () -> new PressurePlateBlock(BlockSetType.JUNGLE, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_PRESSURE_PLATE))); + public static final DeferredBlock PEACH_BUTTON = BLOCKS.register("peach_button", + () -> new ButtonBlock(BlockSetType.JUNGLE, 30, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_BUTTON))); + public static final DeferredBlock PEACH_LEAVES = BLOCKS.register("peach_leaves", + () -> new PeachLeavesBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_LEAVES).randomTicks())); + public static final DeferredBlock PEACH_HANGING_PEACH = BLOCKS.register("hanging_peach", + () -> new HangingPeachBlock(BlockBehaviour.Properties.of().noOcclusion().instabreak())); + public static final DeferredBlock PEACH_SAPLING = BLOCKS.register("peach_sapling", + () -> new com.craisinlord.antarchy.content.block.PeachSaplingBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.OAK_SAPLING).randomTicks().noCollission())); + public static final DeferredBlock PEACH_SIGN = BLOCKS.register("peach_sign", + () -> new StandingSignBlock(AntarchyWoodTypes.PEACH, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_SIGN))); + public static final DeferredBlock PEACH_WALL_SIGN = BLOCKS.register("peach_wall_sign", + () -> new WallSignBlock(AntarchyWoodTypes.PEACH, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_WALL_SIGN))); + public static final DeferredBlock PEACH_HANGING_SIGN = BLOCKS.register("peach_hanging_sign", + () -> new CeilingHangingSignBlock(AntarchyWoodTypes.PEACH, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_HANGING_SIGN))); + public static final DeferredBlock PEACH_WALL_HANGING_SIGN = BLOCKS.register("peach_wall_hanging_sign", + () -> new WallHangingSignBlock(AntarchyWoodTypes.PEACH, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_WALL_HANGING_SIGN))); public static final DeferredBlock DUPLICATOR_SAPLING = BLOCKS.register("duplicator_sapling", () -> new DuplicatorSaplingBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.OAK_SAPLING).randomTicks().noCollission())); public static final DeferredBlock DUCT_TAPE = BLOCKS.register("duct_tape", @@ -189,6 +237,10 @@ public final class AntarchyNeoforgeBlocks { () -> new UmbralMossBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.MOSS_BLOCK))); public static final DeferredBlock UMBRAL_MOSS_CARPET = BLOCKS.register("umbral_moss_carpet", () -> new UmbralMossCarpetBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.MOSS_CARPET).noOcclusion())); + public static final DeferredBlock BLUSH_MOSS_BLOCK = BLOCKS.register("blush_moss_block", + () -> new BlushMossBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.MOSS_BLOCK))); + public static final DeferredBlock BLUSH_MOSS_CARPET = BLOCKS.register("blush_moss_carpet", + () -> new BlushMossCarpetBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.MOSS_CARPET).noOcclusion())); public static final DeferredBlock DREAM_TORCH = BLOCKS.register("dream_torch", () -> new DreamTorchBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SOUL_TORCH))); public static final DeferredBlock DREAM_WALL_TORCH = BLOCKS.register("dream_wall_torch", @@ -224,6 +276,13 @@ public final class AntarchyNeoforgeBlocks { public static final DeferredBlock ANTIWATER_BLOCK = BLOCKS.register("antiwater", () -> new com.craisinlord.antarchy.content.fluid.AntiwaterLiquidBlock((FlowingFluid) AntarchyNeoforgeMisc.ANTIWATER.get(), BlockBehaviour.Properties.ofFullCopy(Blocks.WATER).noLootTable())); + public static final DeferredBlock LUMEN_BLOCK = BLOCKS.register("lumen", + () -> new LumenLiquidBlock((FlowingFluid) AntarchyNeoforgeMisc.LUMEN.get(), + BlockBehaviour.Properties.ofFullCopy(Blocks.WATER).lightLevel(state -> 9).noLootTable())); + public static final DeferredBlock LUMEN_FROGLIGHT = BLOCKS.register("lumen_froglight", + () -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.OCHRE_FROGLIGHT))); + public static final DeferredBlock ROSEATE_FROGLIGHT = BLOCKS.register("roseate_froglight", + () -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.OCHRE_FROGLIGHT))); public static final DeferredBlock RED_ANT_NEST = BLOCKS.register("red_ant_nest", () -> new AntNestBlock( AntarchyNeoforgeEntites.RED_ANT, @@ -291,6 +350,10 @@ public final class AntarchyNeoforgeBlocks { () -> new com.craisinlord.antarchy.content.block.AntimetalScaffoldingBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SCAFFOLDING))); public static final DeferredBlock CORNEA_STALK = BLOCKS.register("cornea_stalk", () -> new CorneaStalkBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SWEET_BERRY_BUSH).randomTicks())); + public static final DeferredBlock CORN_CROP = BLOCKS.register("corn_crop", + () -> new CornCropBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.WHEAT).randomTicks().noCollission().noOcclusion())); + public static final DeferredBlock WILD_CORN = BLOCKS.register("wild_corn", + () -> new WildCornBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.WHEAT).noCollission().noOcclusion())); public static final DeferredBlock FALLEN_KING_CROWN = BLOCKS.register("fallen_king_crown", () -> new Block(BlockBehaviour.Properties.of() .strength(0.2F) @@ -338,6 +401,22 @@ public final class AntarchyNeoforgeBlocks { () -> new SlabBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SMOOTH_SANDSTONE_SLAB))); public static final DeferredBlock CUT_DREAM_SANDSTONE_SLAB = BLOCKS.register("cut_dream_sandstone_slab", () -> new SlabBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.CUT_SANDSTONE_SLAB))); + public static final DeferredBlock DEAD_STAR_CORAL_BLOCK = BLOCKS.register("dead_star_coral_block", + () -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.TUBE_CORAL_BLOCK))); + public static final DeferredBlock DEAD_STAR_CORAL = BLOCKS.register("dead_star_coral", + () -> new net.minecraft.world.level.block.BaseCoralPlantBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.TUBE_CORAL))); + public static final DeferredBlock DEAD_STAR_CORAL_FAN = BLOCKS.register("dead_star_coral_fan", + () -> new net.minecraft.world.level.block.BaseCoralFanBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.TUBE_CORAL_FAN))); + public static final DeferredBlock DEAD_STAR_CORAL_WALL_FAN = BLOCKS.register("dead_star_coral_wall_fan", + () -> new net.minecraft.world.level.block.BaseCoralWallFanBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.TUBE_CORAL_WALL_FAN))); + public static final DeferredBlock STAR_CORAL_BLOCK = BLOCKS.register("star_coral_block", + () -> new com.craisinlord.antarchy.content.block.StarCoralBlock(DEAD_STAR_CORAL_BLOCK.get(), BlockBehaviour.Properties.ofFullCopy(Blocks.TUBE_CORAL_BLOCK).lightLevel(state -> 8))); + public static final DeferredBlock STAR_CORAL = BLOCKS.register("star_coral", + () -> new com.craisinlord.antarchy.content.block.StarCoralPlantBlock(DEAD_STAR_CORAL.get(), BlockBehaviour.Properties.ofFullCopy(Blocks.TUBE_CORAL).lightLevel(state -> 8))); + public static final DeferredBlock STAR_CORAL_FAN = BLOCKS.register("star_coral_fan", + () -> new com.craisinlord.antarchy.content.block.StarCoralFanBlock(DEAD_STAR_CORAL_FAN.get(), BlockBehaviour.Properties.ofFullCopy(Blocks.TUBE_CORAL_FAN).lightLevel(state -> 8))); + public static final DeferredBlock STAR_CORAL_WALL_FAN = BLOCKS.register("star_coral_wall_fan", + () -> new com.craisinlord.antarchy.content.block.StarCoralWallFanBlock(DEAD_STAR_CORAL_WALL_FAN.get(), BlockBehaviour.Properties.ofFullCopy(Blocks.TUBE_CORAL_WALL_FAN).lightLevel(state -> 8))); // Block entity types public static final DeferredHolder, BlockEntityType> ANT_NEST_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register("ant_nest", diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeCreativeModeTabs.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeCreativeModeTabs.java index e9f2aa38..b8fc6296 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeCreativeModeTabs.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeCreativeModeTabs.java @@ -2,6 +2,7 @@ package com.craisinlord.antarchy.neoforge.registry; import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.content.item.ultimate.UltimateGearHelper; +import com.craisinlord.antarchy.content.CreativeTabOrder; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.core.registries.Registries; import net.minecraft.world.item.*; @@ -10,7 +11,6 @@ import net.neoforged.bus.api.IEventBus; import net.neoforged.neoforge.event.BuildCreativeModeTabContentsEvent; import net.neoforged.neoforge.registries.DeferredHolder; import net.neoforged.neoforge.registries.DeferredRegister; -import java.util.Comparator; public class AntarchyNeoforgeCreativeModeTabs { private AntarchyNeoforgeCreativeModeTabs() {} @@ -37,14 +37,16 @@ public class AntarchyNeoforgeCreativeModeTabs { Item item = holder.get(); if (item != Items.AIR) sortedItems.add(item); } - sortedItems.sort(Comparator - .comparingInt(AntarchyNeoforgeCreativeModeTabs::creativeTabGroup) - .thenComparing(item -> BuiltInRegistries.ITEM.getKey(item).getPath())); - int n = sortedItems.size(); - for (int i = Math.max(0, n - 20); i < n; i++) { - Item it = sortedItems.get(i); - } - sortedItems.forEach(event::accept); + sortedItems.sort(CreativeTabOrder.COMPARATOR); + sortedItems.forEach(item -> { + if (item == AntarchyNeoforgeItems.GLIMMER_BOTTLE.get()) { + for (com.craisinlord.antarchy.content.entity.glimmer.GlimmerVariant variant : com.craisinlord.antarchy.content.entity.glimmer.GlimmerVariant.values()) { + event.accept(com.craisinlord.antarchy.content.item.GlimmerBottleItem.create(variant)); + } + } else { + event.accept(item); + } + }); } if (event.getTabKey() == CreativeModeTabs.SPAWN_EGGS) { @@ -79,16 +81,26 @@ public class AntarchyNeoforgeCreativeModeTabs { event.accept(AntarchyNeoforgeItems.BASILISK_SPAWN_EGG.get()); event.accept(AntarchyNeoforgeItems.EMPEROR_SCORPION_SPAWN_EGG.get()); event.accept(AntarchyNeoforgeItems.TORETERROR_SPAWN_EGG.get()); + // Dorrie is not part of this update yet. + // event.accept(AntarchyNeoforgeItems.DORRIE_SPAWN_EGG.get()); + event.accept(AntarchyNeoforgeItems.OURANWOOD_DEER_SPAWN_EGG.get()); + event.accept(AntarchyNeoforgeItems.GLIMMER_SPAWN_EGG.get()); + event.accept(AntarchyNeoforgeItems.ELKA_SPAWN_EGG.get()); } if (event.getTabKey() == CreativeModeTabs.NATURAL_BLOCKS) { event.accept(AntarchyNeoforgeItems.OURANWOOD_LEAVES_ITEM.get()); event.accept(AntarchyNeoforgeItems.OURANWOOD_ACORN.get()); + event.accept(AntarchyNeoforgeItems.PEACH_LEAVES_ITEM.get()); + event.accept(AntarchyNeoforgeItems.PEACH_SAPLING_ITEM.get()); // event.accept(AntarchyNeoforgeItems.OURANWOOD_VINE_ITEM.get()); event.accept(AntarchyNeoforgeItems.DUPLICATOR_LOG_ITEM.get()); event.accept(AntarchyNeoforgeItems.DUPLICATOR_SAPLING_ITEM.get()); event.accept(AntarchyNeoforgeItems.ORANGE_MILKWEED_ITEM.get()); event.accept(AntarchyNeoforgeItems.PINK_MILKWEED_ITEM.get()); + event.accept(AntarchyNeoforgeItems.CAMELLIA_ITEM.get()); + event.accept(AntarchyNeoforgeItems.SPIDER_LILY_ITEM.get()); + event.accept(AntarchyNeoforgeItems.GIANT_LILY_PAD_ITEM.get()); event.accept(AntarchyNeoforgeItems.HUSHWEED_ITEM.get()); event.accept(AntarchyNeoforgeItems.INFESTED_ROOTED_DIRT_ITEM.get()); event.accept(AntarchyNeoforgeItems.INFESTED_COARSE_DIRT_ITEM.get()); @@ -102,6 +114,15 @@ public class AntarchyNeoforgeCreativeModeTabs { event.accept(AntarchyNeoforgeItems.DEEPSLATE_URANIUM_ORE_ITEM.get()); event.accept(AntarchyNeoforgeItems.TITANIUM_ORE_ITEM.get()); event.accept(AntarchyNeoforgeItems.DEEPSLATE_TITANIUM_ORE_ITEM.get()); + event.accept(AntarchyNeoforgeItems.LUMEN_FROGLIGHT_ITEM.get()); + event.accept(AntarchyNeoforgeItems.ROSEATE_FROGLIGHT_ITEM.get()); + event.accept(AntarchyNeoforgeItems.CORN_SEEDS.get()); + event.accept(AntarchyNeoforgeItems.STAR_CORAL_ITEM.get()); + event.accept(AntarchyNeoforgeItems.STAR_CORAL_FAN_ITEM.get()); + event.accept(AntarchyNeoforgeItems.STAR_CORAL_BLOCK_ITEM.get()); + event.accept(AntarchyNeoforgeItems.DEAD_STAR_CORAL_ITEM.get()); + event.accept(AntarchyNeoforgeItems.DEAD_STAR_CORAL_FAN_ITEM.get()); + event.accept(AntarchyNeoforgeItems.DEAD_STAR_CORAL_BLOCK_ITEM.get()); } if (event.getTabKey() == CreativeModeTabs.TOOLS_AND_UTILITIES) { @@ -109,6 +130,7 @@ public class AntarchyNeoforgeCreativeModeTabs { event.insertAfter(new ItemStack(Items.MINECART), new ItemStack(AntarchyNeoforgeItems.DIAMOND_MINECART_ITEM.get()), CreativeModeTab.TabVisibility.PARENT_AND_SEARCH_TABS); event.accept(AntarchyNeoforgeItems.ICHOR_BUCKET.get()); event.accept(AntarchyNeoforgeItems.ANTIWATER_BUCKET.get()); + event.accept(AntarchyNeoforgeItems.LUMEN_BUCKET.get()); event.accept(AntarchyNeoforgeItems.CLOUD_BUCKET.get()); event.accept(AntarchyNeoforgeItems.REVERIE_BOTTLE.get()); event.accept(AntarchyNeoforgeItems.ULTIMATE_PICKAXE.get()); @@ -136,6 +158,7 @@ public class AntarchyNeoforgeCreativeModeTabs { event.accept(AntarchyNeoforgeItems.LUCID_EYE.get()); event.accept(AntarchyNeoforgeItems.BLOOD_CRYSTAL_SHARD.get()); event.accept(AntarchyNeoforgeItems.BLOOD_CRYSTAL_APPLE.get()); + event.accept(AntarchyNeoforgeItems.SPIRIT_APPLE.get()); event.accept(AntarchyNeoforgeItems.MANTIS_CLAW.get()); event.accept(AntarchyNeoforgeItems.KING_SCALE.get()); event.accept(AntarchyNeoforgeItems.QUEEN_SCALE.get()); @@ -146,8 +169,20 @@ public class AntarchyNeoforgeCreativeModeTabs { event.accept(AntarchyNeoforgeItems.VORTEX_EYE.get()); event.accept(AntarchyNeoforgeItems.EMPEROR_SCORPION_STINGER.get()); event.accept(AntarchyNeoforgeItems.KRAKEN_TOOTH.get()); + event.accept(AntarchyNeoforgeItems.KRAKEN_TENTACLE.get()); event.accept(AntarchyNeoforgeItems.JUMPY_BUG_LEG.get()); event.accept(AntarchyNeoforgeItems.CORNEA_EAR.get()); + event.accept(AntarchyNeoforgeItems.CORN.get()); + event.accept(AntarchyNeoforgeItems.HIGH_FRUCTOSE_CORN_SYRUP.get()); + event.accept(AntarchyNeoforgeItems.PEACH.get()); + event.accept(AntarchyNeoforgeItems.PEACH_PIE.get()); + event.accept(AntarchyNeoforgeItems.CORNBREAD.get()); + event.accept(AntarchyNeoforgeItems.POPCORN.get()); + event.accept(AntarchyNeoforgeItems.RAW_CORNDOG.get()); + event.accept(AntarchyNeoforgeItems.COOKED_CORNDOG.get()); + event.accept(AntarchyNeoforgeItems.RAW_VENISON.get()); + event.accept(AntarchyNeoforgeItems.COOKED_VENISON.get()); + event.accept(AntarchyNeoforgeItems.ROOT_BEER.get()); event.accept(AntarchyNeoforgeItems.RAINBOW_SUGAR.get()); event.accept(AntarchyNeoforgeItems.BIG_BERTHA_BLADE.get()); event.accept(AntarchyNeoforgeItems.BIG_BERTHA_HANDLE.get()); @@ -174,6 +209,23 @@ public class AntarchyNeoforgeCreativeModeTabs { event.accept(AntarchyNeoforgeItems.OURANWOOD_BUTTON_ITEM.get()); event.accept(AntarchyNeoforgeItems.OURANWOOD_SIGN_ITEM.get()); event.accept(AntarchyNeoforgeItems.OURANWOOD_HANGING_SIGN_ITEM.get()); + event.accept(AntarchyNeoforgeItems.PEACH_LOG_ITEM.get()); + event.accept(AntarchyNeoforgeItems.PEACH_WOOD_ITEM.get()); + event.accept(AntarchyNeoforgeItems.STRIPPED_PEACH_LOG_ITEM.get()); + event.accept(AntarchyNeoforgeItems.STRIPPED_PEACH_WOOD_ITEM.get()); + event.accept(AntarchyNeoforgeItems.PEACH_PLANKS_ITEM.get()); + event.accept(AntarchyNeoforgeItems.PEACH_STAIRS_ITEM.get()); + event.accept(AntarchyNeoforgeItems.PEACH_SLAB_ITEM.get()); + event.accept(AntarchyNeoforgeItems.PEACH_FENCE_ITEM.get()); + event.accept(AntarchyNeoforgeItems.PEACH_FENCE_GATE_ITEM.get()); + event.accept(AntarchyNeoforgeItems.PEACH_BOAT.get()); + event.accept(AntarchyNeoforgeItems.PEACH_CHEST_BOAT.get()); + event.accept(AntarchyNeoforgeItems.PEACH_DOOR_ITEM.get()); + event.accept(AntarchyNeoforgeItems.PEACH_TRAPDOOR_ITEM.get()); + event.accept(AntarchyNeoforgeItems.PEACH_PRESSURE_PLATE_ITEM.get()); + event.accept(AntarchyNeoforgeItems.PEACH_BUTTON_ITEM.get()); + event.accept(AntarchyNeoforgeItems.PEACH_SIGN_ITEM.get()); + event.accept(AntarchyNeoforgeItems.PEACH_HANGING_SIGN_ITEM.get()); event.accept(AntarchyNeoforgeItems.SHELLSTONE_ITEM.get()); event.accept(AntarchyNeoforgeItems.SHELLSTONE_STAIRS_ITEM.get()); event.accept(AntarchyNeoforgeItems.SHELLSTONE_SLAB_ITEM.get()); @@ -213,9 +265,13 @@ public class AntarchyNeoforgeCreativeModeTabs { event.accept(AntarchyNeoforgeItems.ANTIMETAL_SCAFFOLDING_ITEM.get()); event.accept(AntarchyNeoforgeItems.UMBRAL_MOSS_BLOCK_ITEM.get()); event.accept(AntarchyNeoforgeItems.UMBRAL_MOSS_CARPET_ITEM.get()); + event.accept(AntarchyNeoforgeItems.BLUSH_MOSS_BLOCK_ITEM.get()); + event.accept(AntarchyNeoforgeItems.BLUSH_MOSS_CARPET_ITEM.get()); event.accept(AntarchyNeoforgeItems.DREAM_TORCH_ITEM.get()); event.accept(AntarchyNeoforgeItems.DREAM_LANTERN_ITEM.get()); event.accept(AntarchyNeoforgeItems.DREAM_CAMPFIRE_ITEM.get()); + event.accept(AntarchyNeoforgeItems.LUMEN_FROGLIGHT_ITEM.get()); + event.accept(AntarchyNeoforgeItems.ROSEATE_FROGLIGHT_ITEM.get()); event.accept(AntarchyNeoforgeItems.DREAM_SAND_ITEM.get()); event.accept(AntarchyNeoforgeItems.DREAM_SANDSTONE_ITEM.get()); event.accept(AntarchyNeoforgeItems.CHISELED_DREAM_SANDSTONE_ITEM.get()); @@ -267,6 +323,8 @@ public class AntarchyNeoforgeCreativeModeTabs { event.accept(UltimateGearHelper.createUltimateBowStack(AntarchyNeoforgeItems.ULTIMATE_BOW.get(), event.getParameters().holders())); event.accept(AntarchyNeoforgeItems.ULTIMATE_CROSSBOW.get()); event.accept(AntarchyNeoforgeItems.SQUIDZOOKA.get()); + event.accept(AntarchyNeoforgeItems.RPO_LAUNCHER.get()); + event.accept(AntarchyNeoforgeItems.KRAKENS_GRASP.get()); event.accept(AntarchyNeoforgeItems.SHRINK_RAY.get()); event.accept(AntarchyNeoforgeItems.GROWTH_RAY.get()); event.accept(AntarchyNeoforgeItems.GRAVITY_GUN.get()); @@ -307,139 +365,10 @@ public class AntarchyNeoforgeCreativeModeTabs { } private static int creativeTabGroup(net.minecraft.world.item.Item item) { - String path = BuiltInRegistries.ITEM.getKey(item).getPath(); - return switch (path) { - // 0 - Ouranwood blocks - case "ouranwood_log", "ouranwood_wood", "mossy_ouranwood_log", "mossy_ouranwood_wood", - "stripped_ouranwood_log", "stripped_ouranwood_wood", "duplicator_log", - "ouranwood_planks", "ouranwood_stairs", "ouranwood_slab", - "ouranwood_fence", "ouranwood_fence_gate", - "ouranwood_door", "ouranwood_trapdoor", - "ouranwood_pressure_plate", "ouranwood_button", - "ouranwood_sign", "ouranwood_hanging_sign", - "ouranwood_boat", "ouranwood_chest_boat" -> 0; + return CreativeTabOrder.group(item); + } - // 1 - Nyxite blocks - case "nyxite", "polished_nyxite", "chiseled_nyxite", "nyxite_bricks", - "nyxite_stairs", "nyxite_slab", "nyxite_wall", - "polished_nyxite_stairs", "polished_nyxite_slab", "polished_nyxite_wall", - "nyxite_brick_stairs", "nyxite_brick_slab", "nyxite_brick_wall", - "pale_nyxite", "nyxite_spike", "potent_nyxite" -> 1; - - // 2 - Shellstone blocks - case "shellstone", "polished_shellstone", "shellstone_bricks", "chiseled_shellstone", - "mossy_shellstone_bricks", "cracked_shellstone_bricks", - "shellstone_stairs", "shellstone_slab", "shellstone_wall", - "polished_shellstone_stairs", "polished_shellstone_slab", "polished_shellstone_wall", - "shellstone_brick_stairs", "shellstone_brick_slab", "shellstone_brick_wall", - "mossy_shellstone_brick_stairs", "mossy_shellstone_brick_slab", "mossy_shellstone_brick_wall" -> 2; - - // 3 - Antimetal blocks - case "antimetal", "polished_antimetal" -> 3; - - // 4 - Dream sand and blocks - case "dream_sand", "dream_sandstone", "chiseled_dream_sandstone", - "cut_dream_sandstone", "smooth_dream_sandstone", - "dream_sandstone_stairs", "dream_sandstone_slab", "dream_sandstone_wall", - "smooth_dream_sandstone_stairs", "smooth_dream_sandstone_slab", - "cut_dream_sandstone_slab" -> 4; - - // 5 - Umbral moss - case "umbral_moss_block", "umbral_moss_carpet" -> 4; - - // 6 - All ores + metal storage/decorative blocks - case "uranium_ore", "deepslate_uranium_ore", "titanium_ore", "deepslate_titanium_ore", - "uranium_block", "titanium_block", - "cut_uranium", "cut_titanium", "cut_uranium_slab", "cut_titanium_slab", - "cut_uranium_stairs", "cut_titanium_stairs", - "chiseled_uranium", "chiseled_titanium", - "uranium_door", "titanium_door", "uranium_trapdoor", "titanium_trapdoor", - "uranium_bars", "titanium_bars", "uranium_bulb", "titanium_bulb" -> 6; - - // 7 - Raw ores - case "raw_uranium", "raw_titanium", "raw_uranium_scrap", "raw_titanium_scrap", - "raw_uranium_block", "raw_titanium_block" -> 7; - - // 8 - Blood crystal blocks (not the shard ingredient) - case "blood_crystal_block", "small_blood_crystal_bud", "medium_blood_crystal_bud", - "large_blood_crystal_bud", "budding_blood_crystal", "blood_crystal_cluster", - "myrmite", "broodstone", "chiten_block", "chiten_spike", "amber_moss_block", "amber_moss_carpet" -> 8; - - // 9 - Ouranwood leaves - case "ouranwood_leaves" -> 9; - - // 10 - Saplings / seeds - case "duplicator_sapling", "ouranwood_acorn" -> 10; - - // 11 - Plants and flowers - case "orange_milkweed", "pink_milkweed", "hushweed", "amber_lichen", "creepvine", - "triffid_goo_block", "wasp_nest", - "red_ant_nest", "brown_ant_nest", "rainbow_ant_nest", "termite_nest" -> 11; - - // 12 - Dream lighting - case "dream_torch", "dream_lantern", "dream_campfire" -> 12; - - // 13 - Antimetal scaffolding - case "antimetal_scaffolding" -> 13; - - // 14 - Infested blocks - case "infested_rooted_dirt", "infested_coarse_dirt", "bed_bug_egg", - "creeping_horror_egg", "lurking_terror_egg" -> 14; - - // 15 - Tools - case "ultimate_pickaxe", "ultimate_axe", "ultimate_shovel", "ultimate_hoe", - "duct_tape", "diamond_minecart", "gravity_sculk_sensor" -> 15; - - // 16 - Liquid buckets - case "bile_bucket", "ichor_bucket", "antiwater_bucket", "cloud_bucket" -> 16; - - // 17 - Misc wearables / gadgets - case "moggles", "brutalfly_elytra", "fallen_king_crown", "jumpy_boots" -> 17; - - // 18 - Weapons - case "battle_axe", "basilisk_dagger", "squidzooka", "shrink_ray", "growth_ray", - "gravity_gun", "water_cannon", "nightmare_sword", "lucid_pearl", "scorpion_whip", "blood_crystal_katana", - "big_bertha", "big_bertha_blade", "big_bertha_handle", "big_bertha_hilt", - "ultimate_sword", "ultimate_mace" -> 18; - - // 19 - Armor sets - case "primordial_helmet", "primordial_chestplate", - "primordial_leggings", "primordial_boots", - "blood_crystal_helmet", "blood_crystal_chestplate", - "blood_crystal_leggings", "blood_crystal_boots", - "nightmare_helmet", "nightmare_chestplate", - "nightmare_leggings", "nightmare_boots", - "ultimate_helmet", "ultimate_chestplate", - "ultimate_leggings", "ultimate_boots" -> 19; - - // 20 - Ranged weapons - case "ultimate_bow", "ultimate_crossbow" -> 20; - - // 21 - Foods - case "cloud_shark_fin_soup", "mud_pie", "rainbow_sugar", - "blood_crystal_apple" -> 21; - - // 22 - Crafting ingredients - case "blood_crystal_shard", "cloud_shark_fin", "basilisk_fang", "kraken_tooth", - "emperor_scorpion_stinger", "nightmare_scale", "molevore_nose", - "moleworm", "uranium_nugget", "titanium_nugget", - "uranium_ingot", "titanium_ingot", "lucid_eye", - "mantis_claw", "jumpy_bug_leg", "brutalfly_wing", "cornea_ear", - "primordial_scute", "triffid_goo", "vortex_eye", - "king_scale", "queen_scale", "chiten", "stink_bug" -> 22; - - // 23 - Arrows (reserved for future arrow types) - - // 24 - Potions - case "reverie_bottle" -> 24; - - // 25 - Spawn eggs - default -> { - if (!path.endsWith("_spawn_egg")) { - org.slf4j.LoggerFactory.getLogger("Antarchy/CreativeTab").warn("Unmatched creative tab item: '{}'", path); - } - yield path.endsWith("_spawn_egg") ? 25 : 99; - } - }; + private static int creativeTabSubOrder(net.minecraft.world.item.Item item) { + return CreativeTabOrder.subOrder(item); } } diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntites.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntites.java index 372f0a31..2d79e54e 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntites.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntites.java @@ -13,7 +13,9 @@ import com.craisinlord.antarchy.content.entity.DiamondMinecartEntity; import com.craisinlord.antarchy.content.entity.DrTrayaurusEntity; import com.craisinlord.antarchy.content.entity.EasterBunnyEntity; import com.craisinlord.antarchy.content.entity.EmperorScorpionEntity; -import com.craisinlord.antarchy.content.entity.GlimmerEntity; +import com.craisinlord.antarchy.content.entity.ElkaEntity; +import com.craisinlord.antarchy.content.entity.OuranwoodDeerEntity; +import com.craisinlord.antarchy.content.entity.glimmer.GlimmerEntity; import com.craisinlord.antarchy.content.entity.HushProjectileEntity; import com.craisinlord.antarchy.content.entity.HerculesBeetleEntity; import com.craisinlord.antarchy.content.entity.JumpyBugEntity; @@ -26,6 +28,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.PeachBoatEntity; +import com.craisinlord.antarchy.content.entity.PeachChestBoatEntity; import com.craisinlord.antarchy.content.entity.ReverieEntity; import com.craisinlord.antarchy.content.entity.ScorpionEntity; import com.craisinlord.antarchy.content.entity.SizeRayProjectileEntity; @@ -43,6 +47,8 @@ import com.craisinlord.antarchy.content.entity.brutalfly.BrutalflyEntity; import com.craisinlord.antarchy.content.entity.brutalfly.BrutalflyOrbEntity; import com.craisinlord.antarchy.content.entity.flying_squirrel.FlyingSquirrelEntity; 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.lucid.LucidBoltEntity; import com.craisinlord.antarchy.content.entity.lucid.LucidEntity; import com.craisinlord.antarchy.content.entity.lucid.LucidEyeProjectileEntity; @@ -115,6 +121,18 @@ public final class AntarchyNeoforgeEntites { .clientTrackingRange(10) .updateInterval(10) .build("ouranwood_chest_boat")); + public static final DeferredHolder, EntityType> PEACH_BOAT_ENTITY = ENTITY_TYPES.register("peach_boat", + () -> EntityType.Builder.of(PeachBoatEntity::new, MobCategory.MISC) + .sized(1.375F, 0.5625F) + .clientTrackingRange(10) + .updateInterval(10) + .build("peach_boat")); + public static final DeferredHolder, EntityType> PEACH_CHEST_BOAT_ENTITY = ENTITY_TYPES.register("peach_chest_boat", + () -> EntityType.Builder.of(PeachChestBoatEntity::new, MobCategory.MISC) + .sized(1.375F, 0.5625F) + .clientTrackingRange(10) + .updateInterval(10) + .build("peach_chest_boat")); public static final DeferredHolder, EntityType> MOLEVORE = ENTITY_TYPES.register("molevore", () -> EntityType.Builder.of(MolevoreEntity::new, MobCategory.MONSTER) .sized(1.95F, 1.1F) @@ -234,6 +252,20 @@ public final class AntarchyNeoforgeEntites { .clientTrackingRange(8) .updateInterval(1) .build("lucid_bolt")); + + public static final DeferredHolder, EntityType> KRAKENS_GRASP_TRIDENT = ENTITY_TYPES.register("krakens_grasp_trident", + () -> EntityType.Builder.of(KrakensGraspThrownTrident::new, MobCategory.MISC) + .sized(0.5F, 0.5F) + .clientTrackingRange(8) + .updateInterval(1) + .build("krakens_grasp_trident")); + + public static final DeferredHolder, EntityType> TENTACLE = ENTITY_TYPES.register("tentacle", + () -> EntityType.Builder.of(TentacleEntity::new, MobCategory.MISC) + .sized(1.2F, 4.5F) + .clientTrackingRange(10) + .build("tentacle")); + public static final DeferredHolder, EntityType> SCORPION = ENTITY_TYPES.register("scorpion", () -> EntityType.Builder.of(ScorpionEntity::new, MobCategory.MONSTER) .sized(1.5F, 1.0F) @@ -283,11 +315,27 @@ public final class AntarchyNeoforgeEntites { .sized(1.0F, 1.2F) .clientTrackingRange(8) .build("cheep")); - // public static final DeferredHolder, EntityType> GLIMMER = ENTITY_TYPES.register("glimmer", - // () -> EntityType.Builder.of(GlimmerEntity::new, MobCategory.CREATURE) - // .sized(0.9F, 1.4F) - // .clientTrackingRange(8) - // .build("glimmer")); + // Dorrie is not part of this update yet. + // public static final DeferredHolder, EntityType> DORRIE = ENTITY_TYPES.register("dorrie", + // () -> EntityType.Builder.of(DorrieEntity::new, MobCategory.CREATURE) + // .sized(1.6F, 1.4F) + // .clientTrackingRange(10) + // .build("dorrie")); + public static final DeferredHolder, EntityType> OURANWOOD_DEER = ENTITY_TYPES.register("ouranwood_deer", + () -> EntityType.Builder.of(OuranwoodDeerEntity::new, MobCategory.CREATURE) + .sized(0.9F, 1.4F) + .clientTrackingRange(8) + .build("ouranwood_deer")); + public static final DeferredHolder, EntityType> GLIMMER = ENTITY_TYPES.register("glimmer", + () -> EntityType.Builder.of(GlimmerEntity::new, MobCategory.CREATURE) + .sized(0.9F, 1.4F) + .clientTrackingRange(8) + .build("glimmer")); + public static final DeferredHolder, EntityType> ELKA = ENTITY_TYPES.register("elka", + () -> EntityType.Builder.of(ElkaEntity::new, MobCategory.CREATURE) + .sized(2.2F, 3.5F) + .clientTrackingRange(10) + .build("elka")); public static final DeferredHolder, EntityType> UPWARD_FALLING_BLOCK = ENTITY_TYPES.register("upward_falling_block", () -> EntityType.Builder.of( UpwardFallingBlockEntity::new, MobCategory.MISC) diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntityAttributes.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntityAttributes.java index 08e38c1b..1e84116e 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntityAttributes.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntityAttributes.java @@ -9,6 +9,7 @@ import com.craisinlord.antarchy.content.entity.brutalfly.BrutalflyEntity; import com.craisinlord.antarchy.content.entity.cloud_shark.CloudSharkEntity; import com.craisinlord.antarchy.content.entity.flying_squirrel.FlyingSquirrelEntity; import com.craisinlord.antarchy.content.entity.kraken.KrakenEntity; +import com.craisinlord.antarchy.content.entity.kraken.TentacleEntity; import com.craisinlord.antarchy.content.entity.lucid.LucidEntity; import com.craisinlord.antarchy.content.entity.nightmare.NightmareEntity; import com.craisinlord.antarchy.content.entity.ToreterrorEntity; @@ -51,6 +52,7 @@ public class AntarchyNeoforgeEntityAttributes { event.put(AntarchyNeoforgeEntites.KRAKEN.get(), KrakenEntity.createAttributes().build()); event.put(AntarchyNeoforgeEntites.MISSILE_SQUID.get(), MissileSquidEntity.createAttributes().build()); event.put(AntarchyNeoforgeEntites.OCTOPUS_BOMB.get(), OctopusBombEntity.createAttributes().build()); + event.put(AntarchyNeoforgeEntites.TENTACLE.get(), TentacleEntity.createAttributes().build()); event.put(AntarchyNeoforgeEntites.NIGHTMARE.get(), NightmareEntity.createAttributes().build()); event.put(AntarchyNeoforgeEntites.BED_BUG.get(), BedBugEntity.createAttributes().build()); event.put(AntarchyNeoforgeEntites.WASP.get(), WaspEntity.createAttributes().build()); @@ -73,7 +75,11 @@ public class AntarchyNeoforgeEntityAttributes { event.put(AntarchyNeoforgeEntites.MOLEWORM.get(), MolewormEntity.createAttributes().build()); event.put(AntarchyNeoforgeEntites.MOLEVORE.get(), MolevoreEntity.createAttributes().build()); event.put(AntarchyNeoforgeEntites.CHEEP.get(), com.craisinlord.antarchy.content.entity.CheepEntity.createAttributes().build()); - // event.put(AntarchyNeoforgeEntites.GLIMMER.get(), com.craisinlord.antarchy.content.entity.GlimmerEntity.createAttributes().build()); + // Dorrie is not part of this update yet. + // event.put(AntarchyNeoforgeEntites.DORRIE.get(), com.craisinlord.antarchy.content.entity.DorrieEntity.createAttributes().build()); + event.put(AntarchyNeoforgeEntites.OURANWOOD_DEER.get(), com.craisinlord.antarchy.content.entity.OuranwoodDeerEntity.createAttributes().build()); + event.put(AntarchyNeoforgeEntites.GLIMMER.get(), com.craisinlord.antarchy.content.entity.glimmer.GlimmerEntity.createAttributes().build()); + event.put(AntarchyNeoforgeEntites.ELKA.get(), ElkaEntity.createAttributes().build()); } private static AttributeSupplier.Builder buildAntAttributes(double health, double speed, double attackDamage) { diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeItems.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeItems.java index f0289486..a3806df0 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeItems.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeItems.java @@ -29,6 +29,7 @@ import net.minecraft.world.effect.MobEffectInstance; import net.minecraft.world.effect.MobEffects; import net.minecraft.world.food.FoodProperties; import net.minecraft.world.item.*; +import net.minecraft.world.item.PlaceOnWaterBlockItem; import net.minecraft.world.item.crafting.Ingredient; import net.minecraft.world.level.block.entity.BlockEntityType; import net.neoforged.bus.api.IEventBus; @@ -158,9 +159,28 @@ public final class AntarchyNeoforgeItems { public static final DeferredItem OURANWOOD_BUTTON_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.OURANWOOD_BUTTON); public static final DeferredItem OURANWOOD_LEAVES_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.OURANWOOD_LEAVES); public static final DeferredItem OURANWOOD_ACORN = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.OURANWOOD_ACORN_BLOCK); + public static final DeferredItem PEACH_LOG_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.PEACH_LOG); + public static final DeferredItem PEACH_WOOD_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.PEACH_WOOD); + public static final DeferredItem STRIPPED_PEACH_LOG_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.STRIPPED_PEACH_LOG); + public static final DeferredItem STRIPPED_PEACH_WOOD_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.STRIPPED_PEACH_WOOD); + public static final DeferredItem PEACH_PLANKS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.PEACH_PLANKS); + public static final DeferredItem PEACH_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.PEACH_STAIRS); + public static final DeferredItem PEACH_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.PEACH_SLAB); + public static final DeferredItem PEACH_FENCE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.PEACH_FENCE); + public static final DeferredItem PEACH_FENCE_GATE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.PEACH_FENCE_GATE); + public static final DeferredItem PEACH_DOOR_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.PEACH_DOOR); + public static final DeferredItem PEACH_TRAPDOOR_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.PEACH_TRAPDOOR); + public static final DeferredItem PEACH_PRESSURE_PLATE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.PEACH_PRESSURE_PLATE); + public static final DeferredItem PEACH_BUTTON_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.PEACH_BUTTON); + public static final DeferredItem PEACH_LEAVES_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.PEACH_LEAVES); + public static final DeferredItem PEACH_SAPLING_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.PEACH_SAPLING); // public static final DeferredItem OURANWOOD_VINE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.OURANWOOD_VINE); public static final DeferredItem ORANGE_MILKWEED_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.ORANGE_MILKWEED); public static final DeferredItem PINK_MILKWEED_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.PINK_MILKWEED); + public static final DeferredItem CAMELLIA_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.CAMELLIA); + public static final DeferredItem SPIDER_LILY_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.SPIDER_LILY); + public static final DeferredItem GIANT_LILY_PAD_ITEM = ITEMS.register("giant_lily_pad", + () -> new PlaceOnWaterBlockItem(AntarchyNeoforgeBlocks.GIANT_LILY_PAD.get(), new Item.Properties())); public static final DeferredItem OURANWOOD_SIGN_ITEM = ITEMS.register("ouranwood_sign", () -> new net.minecraft.world.item.SignItem(new Item.Properties().stacksTo(16), AntarchyNeoforgeBlocks.OURANWOOD_SIGN.get(), AntarchyNeoforgeBlocks.OURANWOOD_WALL_SIGN.get())); public static final DeferredItem OURANWOOD_HANGING_SIGN_ITEM = ITEMS.register("ouranwood_hanging_sign", @@ -169,6 +189,14 @@ public final class AntarchyNeoforgeItems { () -> new OuranwoodBoatOnlyItem(AntarchyNeoforgeEntites.OURANWOOD_BOAT_ENTITY.get(), new Item.Properties().stacksTo(1))); public static final DeferredItem OURANWOOD_CHEST_BOAT = ITEMS.register("ouranwood_chest_boat", () -> new OuranwoodChestBoatItem(AntarchyNeoforgeEntites.OURANWOOD_CHEST_BOAT_ENTITY.get(), new Item.Properties().stacksTo(1))); + public static final DeferredItem PEACH_SIGN_ITEM = ITEMS.register("peach_sign", + () -> new net.minecraft.world.item.SignItem(new Item.Properties().stacksTo(16), AntarchyNeoforgeBlocks.PEACH_SIGN.get(), AntarchyNeoforgeBlocks.PEACH_WALL_SIGN.get())); + public static final DeferredItem PEACH_HANGING_SIGN_ITEM = ITEMS.register("peach_hanging_sign", + () -> new net.minecraft.world.item.HangingSignItem(AntarchyNeoforgeBlocks.PEACH_HANGING_SIGN.get(), AntarchyNeoforgeBlocks.PEACH_WALL_HANGING_SIGN.get(), new Item.Properties().stacksTo(16))); + public static final DeferredItem PEACH_BOAT = ITEMS.register("peach_boat", + () -> new PeachBoatOnlyItem(AntarchyNeoforgeEntites.PEACH_BOAT_ENTITY.get(), new Item.Properties().stacksTo(1))); + public static final DeferredItem PEACH_CHEST_BOAT = ITEMS.register("peach_chest_boat", + () -> new PeachChestBoatItem(AntarchyNeoforgeEntites.PEACH_CHEST_BOAT_ENTITY.get(), new Item.Properties().stacksTo(1))); public static final DeferredItem DUPLICATOR_SAPLING_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.DUPLICATOR_SAPLING); public static final DeferredItem RED_ANT_NEST_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.RED_ANT_NEST); public static final DeferredItem BROWN_ANT_NEST_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.BROWN_ANT_NEST); @@ -223,6 +251,12 @@ public final class AntarchyNeoforgeItems { public static final DeferredItem SMOOTH_DREAM_SANDSTONE_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.SMOOTH_DREAM_SANDSTONE_STAIRS); public static final DeferredItem SMOOTH_DREAM_SANDSTONE_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.SMOOTH_DREAM_SANDSTONE_SLAB); public static final DeferredItem CUT_DREAM_SANDSTONE_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.CUT_DREAM_SANDSTONE_SLAB); + public static final DeferredItem DEAD_STAR_CORAL_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.DEAD_STAR_CORAL_BLOCK); + public static final DeferredItem DEAD_STAR_CORAL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.DEAD_STAR_CORAL); + public static final DeferredItem DEAD_STAR_CORAL_FAN_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.DEAD_STAR_CORAL_FAN); + public static final DeferredItem STAR_CORAL_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.STAR_CORAL_BLOCK); + public static final DeferredItem STAR_CORAL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.STAR_CORAL); + public static final DeferredItem STAR_CORAL_FAN_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.STAR_CORAL_FAN); public static final DeferredItem DUCT_TAPE_ITEM = ITEMS.register("duct_tape", () -> new DuctTapeBlockItem(AntarchyNeoforgeBlocks.DUCT_TAPE.get(), new Item.Properties().stacksTo(1))); public static final DeferredItem INFESTED_ROOTED_DIRT_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.INFESTED_ROOTED_DIRT); @@ -265,10 +299,14 @@ public final class AntarchyNeoforgeItems { public static final DeferredItem POTENT_NYXITE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.POTENT_NYXITE); public static final DeferredItem UMBRAL_MOSS_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.UMBRAL_MOSS_BLOCK); public static final DeferredItem UMBRAL_MOSS_CARPET_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.UMBRAL_MOSS_CARPET); + public static final DeferredItem BLUSH_MOSS_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.BLUSH_MOSS_BLOCK); + public static final DeferredItem BLUSH_MOSS_CARPET_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.BLUSH_MOSS_CARPET); public static final DeferredItem DREAM_TORCH_ITEM = ITEMS.register("dream_torch", () -> new StandingAndWallBlockItem(AntarchyNeoforgeBlocks.DREAM_TORCH.get(), AntarchyNeoforgeBlocks.DREAM_WALL_TORCH.get(), new Item.Properties(), net.minecraft.core.Direction.UP)); public static final DeferredItem DREAM_LANTERN_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.DREAM_LANTERN); public static final DeferredItem DREAM_CAMPFIRE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.DREAM_CAMPFIRE); + public static final DeferredItem LUMEN_FROGLIGHT_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.LUMEN_FROGLIGHT); + public static final DeferredItem ROSEATE_FROGLIGHT_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.ROSEATE_FROGLIGHT); public static final DeferredItem BED_BUG_EGG_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.BED_BUG_EGG); public static final DeferredItem WASP_NEST_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.WASP_NEST); public static final DeferredItem HUSHWEED_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.HUSHWEED); @@ -278,6 +316,8 @@ public final class AntarchyNeoforgeItems { () -> new BucketItem(AntarchyNeoforgeMisc.ICHOR.get(), new Item.Properties().craftRemainder(Items.BUCKET).stacksTo(1))); public static final DeferredItem ANTIWATER_BUCKET = ITEMS.register("antiwater_bucket", () -> new BucketItem(AntarchyNeoforgeMisc.ANTIWATER.get(), new Item.Properties().craftRemainder(Items.BUCKET).stacksTo(1))); + public static final DeferredItem LUMEN_BUCKET = ITEMS.register("lumen_bucket", + () -> new BucketItem(AntarchyNeoforgeMisc.LUMEN.get(), new Item.Properties().craftRemainder(Items.BUCKET).stacksTo(1))); public static final DeferredItem CLOUD_BUCKET = ITEMS.register("cloud_bucket", () -> new com.craisinlord.antarchy.content.item.CloudBucketItem(AntarchyNeoforgeBlocks.CLOUD_BLOCK.get(), new Item.Properties().craftRemainder(Items.BUCKET))); public static final DeferredItem BLOOD_CRYSTAL_SHARD = ITEMS.register("blood_crystal_shard", @@ -327,6 +367,80 @@ public final class AntarchyNeoforgeItems { .nutrition(2) .saturationModifier(0.4F) .build()))); + public static final DeferredItem CORN = ITEMS.register("corn", + () -> new Item(new Item.Properties() + .food(new FoodProperties.Builder() + .nutrition(3) + .saturationModifier(0.6F) + .build()))); + public static final DeferredItem CORN_SEEDS = ITEMS.register("corn_seeds", + () -> new ItemNameBlockItem(AntarchyNeoforgeBlocks.CORN_CROP.get(), new Item.Properties())); + public static final DeferredItem RAW_VENISON = ITEMS.register("raw_venison", + () -> new Item(new Item.Properties() + .food(new FoodProperties.Builder() + .nutrition(2) + .saturationModifier(0.3F) + .build()))); + public static final DeferredItem COOKED_VENISON = ITEMS.register("cooked_venison", + () -> new Item(new Item.Properties() + .food(new FoodProperties.Builder() + .nutrition(6) + .saturationModifier(0.8F) + .build()))); + public static final DeferredItem PEACH = ITEMS.register("peach", + () -> new PeachItem()); + public static final DeferredItem PEACH_PIE = ITEMS.register("peach_pie", + () -> new Item(new Item.Properties() + .stacksTo(64) + .food(new FoodProperties.Builder() + .nutrition(8) + .saturationModifier(0.3F) + .build()))); + public static final DeferredItem CORNBREAD = ITEMS.register("cornbread", + () -> new Item(new Item.Properties() + .stacksTo(64) + .food(new FoodProperties.Builder() + .nutrition(8) + .saturationModifier(0.9F) + .build()))); + public static final DeferredItem POPCORN = ITEMS.register("popcorn", + () -> new Item(new Item.Properties() + .stacksTo(64) + .food(new FoodProperties.Builder() + .nutrition(1) + .saturationModifier(0.1F) + .build()))); + public static final DeferredItem RAW_CORNDOG = ITEMS.register("raw_corndog", + () -> new Item(new Item.Properties() + .stacksTo(64) + .food(new FoodProperties.Builder() + .nutrition(8) + .saturationModifier(0.7F) + .build()))); + public static final DeferredItem COOKED_CORNDOG = ITEMS.register("cooked_corndog", + () -> new Item(new Item.Properties() + .stacksTo(64) + .food(new FoodProperties.Builder() + .nutrition(14) + .saturationModifier(1.1F) + .build()))); + public static final DeferredItem HIGH_FRUCTOSE_CORN_SYRUP = ITEMS.register("high_fructose_corn_syrup", + () -> new HighFructoseCornSyrupItem(new Item.Properties() + .stacksTo(16) + .food(new FoodProperties.Builder() + .nutrition(0) + .saturationModifier(0.0F) + .alwaysEdible() + .build()))); + public static final DeferredItem ROOT_BEER = ITEMS.register("root_beer", + () -> new RootBeerItem(new Item.Properties() + .stacksTo(16) + .food(new FoodProperties.Builder() + .nutrition(4) + .saturationModifier(0.4F) + .effect(() -> new MobEffectInstance(MobEffects.REGENERATION, 100, 0), 1.0F) + .alwaysEdible() + .build()))); public static final DeferredItem TRIFFID_GOO = ITEMS.registerSimpleItem("triffid_goo", new Item.Properties().rarity(Rarity.UNCOMMON)); public static final DeferredItem VORTEX_EYE = ITEMS.register("vortex_eye", @@ -457,8 +571,13 @@ public final class AntarchyNeoforgeItems { )); public static final DeferredItem GRAVITY_GUN = ITEMS.register("gravity_gun", () -> new GravityGunItem(new Item.Properties().stacksTo(1).durability(512).rarity(Rarity.RARE).fireResistant())); + // Temporarily disabled: keeping the code but not registering the item for now. + // public static final DeferredItem MINERS_DREAM = ITEMS.register("miners_dream", + // () -> new MinersDreamItem(new Item.Properties().stacksTo(1).rarity(Rarity.RARE))); public static final DeferredItem SQUIDZOOKA = ITEMS.register("squidzooka", () -> new SquidzookaItem(new Item.Properties().stacksTo(1).durability(384).rarity(Rarity.RARE))); + public static final DeferredItem RPO_LAUNCHER = ITEMS.register("rpo_launcher", + () -> new RpoLauncherItem(new Item.Properties().stacksTo(1).durability(384).rarity(Rarity.RARE))); public static final DeferredItem BATTLE_AXE = ITEMS.register("battle_axe", () -> new BattleAxeItem(Tiers.NETHERITE, new Item.Properties().stacksTo(1).rarity(Rarity.RARE).fireResistant(), @@ -477,11 +596,33 @@ public final class AntarchyNeoforgeItems { () -> new BigBerthaItem(Tiers.NETHERITE, new Item.Properties().stacksTo(1).rarity(Rarity.EPIC).fireResistant())); + public static final DeferredItem KRAKEN_TENTACLE = ITEMS.registerSimpleItem("kraken_tentacle", + new Item.Properties().rarity(Rarity.RARE)); + + public static final DeferredItem KRAKENS_GRASP = ITEMS.register("krakens_grasp", + () -> new KrakensGraspItem( + new Item.Properties().stacksTo(1).durability(250).rarity(Rarity.EPIC).fireResistant())); + // Spawn eggs public static final DeferredItem EASTER_BUNNY_SPAWN_EGG = ITEMS.register("easter_bunny_spawn_egg", () -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.EASTER_BUNNY, 0xFFF2B2, 0xFF85B5, new Item.Properties())); - // public static final DeferredItem GLIMMER_SPAWN_EGG = ITEMS.register("glimmer_spawn_egg", - // () -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.GLIMMER, 0xBEEFFF, 0x6FD8FF, new Item.Properties())); + // Dorrie is not part of this update yet. + // public static final DeferredItem DORRIE_SPAWN_EGG = ITEMS.register("dorrie_spawn_egg", + // () -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.DORRIE, 0x6F8CFF, 0xD2F2FF, new Item.Properties())); + public static final DeferredItem OURANWOOD_DEER_SPAWN_EGG = ITEMS.register("ouranwood_deer_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.OURANWOOD_DEER, 0x8A6D4B, 0xE8D9B5, new Item.Properties())); + public static final DeferredItem GLIMMER_SPAWN_EGG = ITEMS.register("glimmer_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.GLIMMER, 0x7DFFFF, 0x2AC7D0, new Item.Properties())); + public static final DeferredItem ELKA_SPAWN_EGG = ITEMS.register("elka_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.ELKA, 0x6B2FA0, 0xFFFFFF, new Item.Properties())); + public static final DeferredItem SPIRIT_APPLE = ITEMS.register("spirit_apple", + () -> new com.craisinlord.antarchy.content.item.SpiritAppleItem(new Item.Properties() + .food(new FoodProperties.Builder() + .nutrition(4) + .saturationModifier(0.3F) + .build()))); + public static final DeferredItem GLIMMER_BOTTLE = ITEMS.register("glimmer_bottle", + com.craisinlord.antarchy.content.item.GlimmerBottleItem::new); public static final DeferredItem FLYING_SQUIRREL_SPAWN_EGG = ITEMS.register("flying_squirrel_spawn_egg", () -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.FLYING_SQUIRREL, 0x7D6649, 0xDCC59C, new Item.Properties())); public static final DeferredItem CATERPILLAR_SPAWN_EGG = ITEMS.register("caterpillar_spawn_egg", diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeMisc.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeMisc.java index ef7b3208..1eca9358 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeMisc.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeMisc.java @@ -4,7 +4,6 @@ import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.content.client.particle.InvertedGeyserBaseParticleOptions; import com.craisinlord.antarchy.content.client.particle.InvertedGeyserParticleOptions; import com.craisinlord.antarchy.content.effect.DreadMobEffect; -import com.craisinlord.antarchy.content.effect.GlimmersGraceMobEffect; import com.craisinlord.antarchy.content.effect.GrowthMobEffect; import com.craisinlord.antarchy.content.effect.InvertedMobEffect; import com.craisinlord.antarchy.content.effect.ParalyzedMobEffect; @@ -14,6 +13,8 @@ import com.craisinlord.antarchy.content.worldgen.ants.BrownAntNestFeature; import com.craisinlord.antarchy.content.worldgen.ants.RainbowAntNestFeature; import com.craisinlord.antarchy.content.worldgen.ants.RedAntNestFeature; import com.craisinlord.antarchy.content.worldgen.elythia.*; +import com.craisinlord.antarchy.neoforge.worldgen.CornPatchFeature; +import com.craisinlord.antarchy.neoforge.worldgen.LumenLilyPadFeature; import com.craisinlord.antarchy.content.worldgen.thoraxis.*; import com.craisinlord.antarchy.neoforge.content.fluid.AntiwaterFluid; import com.craisinlord.antarchy.neoforge.content.fluid.AntiwaterFluidType; @@ -23,10 +24,12 @@ import net.minecraft.core.particles.ParticleType; import net.minecraft.core.particles.SimpleParticleType; import net.minecraft.core.registries.Registries; import net.minecraft.network.codec.StreamCodec; +import net.minecraft.world.flag.FeatureFlags; import net.minecraft.world.effect.MobEffect; import net.minecraft.world.effect.MobEffectInstance; import net.minecraft.world.effect.MobEffects; import net.minecraft.world.entity.ai.attributes.Attribute; +import net.minecraft.world.inventory.MenuType; import net.minecraft.world.item.alchemy.Potion; import net.minecraft.world.level.biome.BiomeSource; import net.minecraft.world.level.levelgen.DensityFunction; @@ -56,6 +59,26 @@ public final class AntarchyNeoforgeMisc { private static final DeferredRegister> DENSITY_FUNCTION_TYPES = DeferredRegister.create(Registries.DENSITY_FUNCTION_TYPE, Antarchy.MODID); private static final DeferredRegister> ENTITY_SUB_PREDICATES = DeferredRegister.create(Registries.ENTITY_SUB_PREDICATE_TYPE, Antarchy.MODID); private static final DeferredRegister ATTRIBUTES = DeferredRegister.create(Registries.ATTRIBUTE, Antarchy.MODID); + private static final DeferredRegister> MENU_TYPES = DeferredRegister.create(Registries.MENU, Antarchy.MODID); + private static final DeferredRegister> DATA_COMPONENT_TYPES = + DeferredRegister.create(Registries.DATA_COMPONENT_TYPE, Antarchy.MODID); + private static final DeferredRegister> RECIPE_SERIALIZERS = + DeferredRegister.create(Registries.RECIPE_SERIALIZER, Antarchy.MODID); + + public static final DeferredHolder, net.minecraft.core.component.DataComponentType> GLIMMER_VARIANT = + DATA_COMPONENT_TYPES.register("glimmer_variant", + () -> net.minecraft.core.component.DataComponentType.builder() + .persistent(com.craisinlord.antarchy.content.entity.glimmer.GlimmerVariant.CODEC) + .networkSynchronized(com.craisinlord.antarchy.content.entity.glimmer.GlimmerVariant.STREAM_CODEC) + .build()); + public static final DeferredHolder, net.minecraft.core.component.DataComponentType> AMERICAN = + DATA_COMPONENT_TYPES.register("american", + () -> net.minecraft.core.component.DataComponentType.builder() + .persistent(net.minecraft.util.Unit.CODEC) + .networkSynchronized(net.minecraft.network.codec.StreamCodec.unit(net.minecraft.util.Unit.INSTANCE)) + .build()); + public static final DeferredHolder, net.minecraft.world.item.crafting.RecipeSerializer> AMERICANIZE_SERIALIZER = + RECIPE_SERIALIZERS.register("americanize", () -> com.craisinlord.antarchy.content.AmericanizeRecipe.SERIALIZER); public static final DeferredHolder DOUBLE_DAMAGE_CHANCE = ATTRIBUTES.register( "double_damage_chance", @@ -65,6 +88,10 @@ public final class AntarchyNeoforgeMisc { "bloodglass_max_hearts", () -> new net.minecraft.world.entity.ai.attributes.RangedAttribute("attribute.antarchy.bloodglass_max_hearts", 0.0, 0.0, 8.0).setSyncable(true) ); + public static final DeferredHolder, MenuType> DORRIE_INVENTORY_MENU = MENU_TYPES.register( + "dorrie_inventory", + () -> new MenuType<>(com.craisinlord.antarchy.content.menu.DorrieInventoryMenu::new, FeatureFlags.DEFAULT_FLAGS) + ); // Mob effects public static final DeferredHolder DREAD = MOB_EFFECTS.register("dread", DreadMobEffect::new); @@ -74,7 +101,6 @@ public final class AntarchyNeoforgeMisc { public static final DeferredHolder BLOODGLASS_WARD = MOB_EFFECTS.register("bloodglass_ward", com.craisinlord.antarchy.content.effect.BloodglassWardEffect::new); public static final DeferredHolder SHRINKING_EFFECT = MOB_EFFECTS.register("shrinking", ShrinkMobEffect::new); public static final DeferredHolder GROWTH_EFFECT = MOB_EFFECTS.register("growth", GrowthMobEffect::new); - // public static final DeferredHolder GLIMMERS_GRACE = MOB_EFFECTS.register("glimmers_grace", GlimmersGraceMobEffect::new); // Potions public static final DeferredHolder INVERSION = POTIONS.register("inversion", @@ -149,6 +175,10 @@ public final class AntarchyNeoforgeMisc { () -> new AntiwaterFluid.Source(antiwaterProperties())); public static final DeferredHolder FLOWING_ANTIWATER = FLUIDS.register("flowing_antiwater", () -> new AntiwaterFluid.Flowing(antiwaterProperties())); + public static final DeferredHolder LUMEN = FLUIDS.register("lumen", + () -> new BaseFlowingFluid.Source(lumenProperties())); + public static final DeferredHolder FLOWING_LUMEN = FLUIDS.register("flowing_lumen", + () -> new BaseFlowingFluid.Flowing(lumenProperties())); // Particle types public static final DeferredHolder, SimpleParticleType> DREAM_FIRE_FLAME = PARTICLE_TYPES.register("dream_fire_flame", @@ -157,6 +187,8 @@ public final class AntarchyNeoforgeMisc { () -> new SimpleParticleType(true)); public static final DeferredHolder, SimpleParticleType> STINKY_FLY = PARTICLE_TYPES.register("stinky_fly", () -> new SimpleParticleType(true)); + public static final DeferredHolder, SimpleParticleType> PEACH_LEAVES_PARTICLE = PARTICLE_TYPES.register("peach_leaves_particle", + () -> new SimpleParticleType(true)); public static final DeferredHolder, SimpleParticleType> HYPNOTIC_GAS = PARTICLE_TYPES.register("hypnotic_gas", () -> new SimpleParticleType(true)); public static final DeferredHolder, SimpleParticleType> HYPNOTIC_GAS_CLOUD = PARTICLE_TYPES.register("hypnotic_gas_cloud", @@ -193,16 +225,24 @@ public final class AntarchyNeoforgeMisc { () -> new OuranwoodTreeFeature(OuranwoodTreeConfiguration.CODEC)); public static final DeferredHolder, OuranwoodCocoonTreeFeature> OURANWOOD_COCOON_TREE = FEATURES.register("ouranwood_cocoon_tree", () -> new OuranwoodCocoonTreeFeature(OuranwoodTreeConfiguration.CODEC)); + public static final DeferredHolder, PeachTreeFeature> PEACH_TREE_FEATURE = FEATURES.register("peach_tree", + () -> new PeachTreeFeature(PeachTreeConfiguration.CODEC)); + public static final DeferredHolder, PeachTreeFeature> PEACH_LARGE_TREE_FEATURE = FEATURES.register("peach_large_tree", + () -> new PeachTreeFeature(PeachTreeConfiguration.CODEC)); public static final DeferredHolder, ElythiaFloraFeature> ELYTHIA_FOREST_FLORA = FEATURES.register("elythia_forest_flora", () -> new ElythiaFloraFeature(NoneFeatureConfiguration.CODEC, ElythiaFloraFeature.Variant.FOREST)); public static final DeferredHolder, ElythiaFloraFeature> ELYTHIA_MEADOW_FLORA = FEATURES.register("elythia_meadow_flora", () -> new ElythiaFloraFeature(NoneFeatureConfiguration.CODEC, ElythiaFloraFeature.Variant.MEADOW)); + public static final DeferredHolder, ElythiaFloraFeature> PEACH_FOREST_FLORA = FEATURES.register("peach_forest_flora", + () -> new ElythiaFloraFeature(NoneFeatureConfiguration.CODEC, ElythiaFloraFeature.Variant.PEACH_FOREST)); public static final DeferredHolder, ElythiaFloraFeature> FLOWER_FOREST_MILKWEED = FEATURES.register("flower_forest_milkweed", () -> new ElythiaFloraFeature(NoneFeatureConfiguration.CODEC, ElythiaFloraFeature.Variant.FLOWER_FOREST_MILKWEED)); + public static final DeferredHolder, CornPatchFeature> CORN_PATCH = FEATURES.register("corn_patch", + () -> new CornPatchFeature(NoneFeatureConfiguration.CODEC)); + public static final DeferredHolder, com.craisinlord.antarchy.content.worldgen.ocean.StarCoralPatchFeature> STAR_CORAL_PATCH = FEATURES.register("star_coral_patch", + () -> new com.craisinlord.antarchy.content.worldgen.ocean.StarCoralPatchFeature(NoneFeatureConfiguration.CODEC)); public static final DeferredHolder, ElythiaFloraFeature> ELYTHIA_BUTTERFLY_FIELDS_FLORA = FEATURES.register("butterfly_fields_flora", () -> new ElythiaFloraFeature(NoneFeatureConfiguration.CODEC, ElythiaFloraFeature.Variant.BUTTERFLY_FIELDS)); - public static final DeferredHolder, ElythiaFloraFeature> ELYTHIA_TORCHFLOWER_FIELDS_FLORA = FEATURES.register("elythia_torchflower_fields_flora", - () -> new ElythiaFloraFeature(NoneFeatureConfiguration.CODEC, ElythiaFloraFeature.Variant.TORCHFLOWER_FIELDS)); public static final DeferredHolder, ElythiaSurfaceCoverFeature> ELYTHIA_SURFACE_COVER = FEATURES.register("elythia_surface_cover", () -> new ElythiaSurfaceCoverFeature(NoneFeatureConfiguration.CODEC)); public static final DeferredHolder, ElythiaUndergroundFeature> ELYTHIA_UNDERGROUND = FEATURES.register("elythia_underground", @@ -221,10 +261,22 @@ public final class AntarchyNeoforgeMisc { () -> new TriffidPatchFeature(NoneFeatureConfiguration.CODEC)); public static final DeferredHolder, ElythiaPondFeature> ELYTHIA_POND = FEATURES.register("elythia_pond", () -> new ElythiaPondFeature(NoneFeatureConfiguration.CODEC)); + public static final DeferredHolder, LumenPoolFeature> LUMEN_POOL = FEATURES.register("lumen_pools", + () -> new LumenPoolFeature(NoneFeatureConfiguration.CODEC)); + public static final DeferredHolder, LumenLilyPadFeature> LUMEN_LILY_PADS = FEATURES.register("lumen_lily_pads", + () -> new LumenLilyPadFeature(NoneFeatureConfiguration.CODEC)); + public static final DeferredHolder, LumenStreamFeature> LUMEN_STREAM = FEATURES.register("lumen_streams", + () -> new LumenStreamFeature(NoneFeatureConfiguration.CODEC)); + public static final DeferredHolder, LumenSpireFeature> LUMEN_SPIRE = FEATURES.register("lumen_spires", + () -> new LumenSpireFeature(NoneFeatureConfiguration.CODEC)); public static final DeferredHolder, ElythiaTuffBoulderFeature> ELYTHIA_TUFF_BOULDER = FEATURES.register("elythia_tuff_boulder", () -> new ElythiaTuffBoulderFeature(NoneFeatureConfiguration.CODEC)); public static final DeferredHolder, ElythiaLargeTuffBoulderFeature> ELYTHIA_LARGE_TUFF_BOULDER = FEATURES.register("elythia_large_tuff_boulder", () -> new ElythiaLargeTuffBoulderFeature(NoneFeatureConfiguration.CODEC)); + public static final DeferredHolder, PeachForestMossyBoulderFeature> PEACH_FOREST_MOSSY_BOULDER = FEATURES.register("peach_forest_mossy_boulder", + () -> new PeachForestMossyBoulderFeature(NoneFeatureConfiguration.CODEC)); + public static final DeferredHolder, PeachForestPondFeature> PEACH_FOREST_POND = FEATURES.register("peach_forest_pond", + () -> new PeachForestPondFeature(PeachForestPondConfiguration.CODEC)); public static final DeferredHolder, CoralSpikeFeature> ELYTHIA_CORAL_SPIKE = FEATURES.register("elythia_coral_spike", () -> new CoralSpikeFeature(NoneFeatureConfiguration.CODEC)); public static final DeferredHolder, FallenOuranwoodFeature> FALLEN_OURANWOOD_TREE = FEATURES.register("fallen_ouranwood_tree", @@ -281,6 +333,9 @@ public final class AntarchyNeoforgeMisc { DENSITY_FUNCTION_TYPES.register(modEventBus); ENTITY_SUB_PREDICATES.register(modEventBus); ATTRIBUTES.register(modEventBus); + MENU_TYPES.register(modEventBus); + DATA_COMPONENT_TYPES.register(modEventBus); + RECIPE_SERIALIZERS.register(modEventBus); } @@ -311,6 +366,15 @@ public final class AntarchyNeoforgeMisc { .tickRate(5); } + static BaseFlowingFluid.Properties lumenProperties() { + return new BaseFlowingFluid.Properties(com.craisinlord.antarchy.neoforge.AntarchyNeoForgeFluidTypes.LUMEN_TYPE, LUMEN, FLOWING_LUMEN) + .bucket(() -> AntarchyNeoforgeItems.LUMEN_BUCKET.get()) + .block(() -> AntarchyNeoforgeBlocks.LUMEN_BLOCK.get()) + .slopeFindDistance(4) + .levelDecreasePerBlock(1) + .tickRate(5); + } + private static ParticleType particleType( Function, com.mojang.serialization.MapCodec> codecFactory, Function, StreamCodec> streamCodecFactory diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeSpawnPlacements.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeSpawnPlacements.java index 8a6b7ccc..3be87c86 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeSpawnPlacements.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeSpawnPlacements.java @@ -48,6 +48,10 @@ public class AntarchyNeoforgeSpawnPlacements { event.register(AntarchyNeoforgeEntites.BASILISK.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, BasiliskEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR); event.register(AntarchyNeoforgeEntites.EMPEROR_SCORPION.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, EmperorScorpionEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR); event.register(AntarchyNeoforgeEntites.CHEEP.get(), SpawnPlacementTypes.IN_WATER, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, AbstractFish::checkSurfaceWaterAnimalSpawnRules, RegisterSpawnPlacementsEvent.Operation.OR); - // event.register(AntarchyNeoforgeEntites.GLIMMER.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, net.minecraft.world.entity.animal.Animal::checkAnimalSpawnRules, RegisterSpawnPlacementsEvent.Operation.OR); + // Dorrie is not part of this update yet. + // event.register(AntarchyNeoforgeEntites.DORRIE.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, net.minecraft.world.entity.animal.Animal::checkAnimalSpawnRules, RegisterSpawnPlacementsEvent.Operation.OR); + event.register(AntarchyNeoforgeEntites.OURANWOOD_DEER.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, net.minecraft.world.entity.animal.Animal::checkAnimalSpawnRules, RegisterSpawnPlacementsEvent.Operation.OR); + event.register(AntarchyNeoforgeEntites.GLIMMER.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, com.craisinlord.antarchy.content.entity.glimmer.GlimmerEntity::checkGlimmerSpawnRules, RegisterSpawnPlacementsEvent.Operation.OR); + event.register(AntarchyNeoforgeEntites.ELKA.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, net.minecraft.world.entity.animal.Animal::checkAnimalSpawnRules, RegisterSpawnPlacementsEvent.Operation.OR); } } diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/worldgen/CornPatchFeature.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/worldgen/CornPatchFeature.java new file mode 100644 index 00000000..ac4480df --- /dev/null +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/worldgen/CornPatchFeature.java @@ -0,0 +1,62 @@ +package com.craisinlord.antarchy.neoforge.worldgen; + +import com.craisinlord.antarchy.content.block.CornCropBlock; +import com.craisinlord.antarchy.neoforge.registry.AntarchyNeoforgeBlocks; +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.Blocks; +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 = AntarchyNeoforgeBlocks.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(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/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/worldgen/LumenLilyPadFeature.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/worldgen/LumenLilyPadFeature.java new file mode 100644 index 00000000..92d0fb4d --- /dev/null +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/worldgen/LumenLilyPadFeature.java @@ -0,0 +1,52 @@ +package com.craisinlord.antarchy.neoforge.worldgen; + +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/neoforge/src/main/resources/META-INF/neoforge.mods.toml b/neoforge/src/main/resources/META-INF/neoforge.mods.toml index 3c6b4e34..36f33648 100644 --- a/neoforge/src/main/resources/META-INF/neoforge.mods.toml +++ b/neoforge/src/main/resources/META-INF/neoforge.mods.toml @@ -44,4 +44,12 @@ displayURL="https://www.curseforge.com/minecraft/mc-mods/antarchy" type="required" versionRange="*" ordering="AFTER" - side="BOTH" \ No newline at end of file + side="BOTH" + +[[dependencies.antarchy]] + modId="infinity" + type="incompatible" + versionRange="(,2.7.2)" + ordering="NONE" + side="BOTH" + reason="Infinite Dimensions versions below 2.7.2 are no longer supported" \ No newline at end of file diff --git a/neoforge/src/main/resources/antarchy-neoforge.mixins.json b/neoforge/src/main/resources/antarchy-neoforge.mixins.json index f84d3e8e..30c33c5c 100644 --- a/neoforge/src/main/resources/antarchy-neoforge.mixins.json +++ b/neoforge/src/main/resources/antarchy-neoforge.mixins.json @@ -11,7 +11,6 @@ "entity.ParalyzedMobFreezeMixin", "infinity.ConfigGenInvocationMixin", "infinity.PortalCreatorMixin", - "infinity.RandomSpringMixin", "level.ClientLevelPartEntitiesAccessor", "level.ServerLevelPartEntitiesAccessor" ], diff --git a/neoforge/src/main/resources/assets/antarchy/models/item/krakens_grasp.json b/neoforge/src/main/resources/assets/antarchy/models/item/krakens_grasp.json new file mode 100644 index 00000000..5331dc07 --- /dev/null +++ b/neoforge/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/neoforge/src/main/resources/assets/antarchy/models/item/lumen_bucket.json b/neoforge/src/main/resources/assets/antarchy/models/item/lumen_bucket.json new file mode 100644 index 00000000..49b64eed --- /dev/null +++ b/neoforge/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/neoforge/src/main/resources/assets/antarchy/models/item/rpo_launcher.json b/neoforge/src/main/resources/assets/antarchy/models/item/rpo_launcher.json new file mode 100644 index 00000000..5d625dfa --- /dev/null +++ b/neoforge/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/neoforge/src/main/resources/data/antarchy/neoforge/biome_modifier/corn_patch_in_spawn_biomes.json b/neoforge/src/main/resources/data/antarchy/neoforge/biome_modifier/corn_patch_in_spawn_biomes.json new file mode 100644 index 00000000..84d1b78c --- /dev/null +++ b/neoforge/src/main/resources/data/antarchy/neoforge/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/neoforge/src/main/resources/data/antarchy/neoforge/biome_modifier/star_coral_in_oceans.json b/neoforge/src/main/resources/data/antarchy/neoforge/biome_modifier/star_coral_in_oceans.json new file mode 100644 index 00000000..281f4a35 --- /dev/null +++ b/neoforge/src/main/resources/data/antarchy/neoforge/biome_modifier/star_coral_in_oceans.json @@ -0,0 +1,6 @@ +{ + "type": "neoforge:add_features", + "biomes": "#antarchy:has_star_coral", + "features": ["antarchy:star_coral_patch"], + "step": "vegetal_decoration" +} diff --git a/tmp_extract/Frog.javap.txt b/tmp_extract/Frog.javap.txt new file mode 100644 index 00000000..5d6a49fb Binary files /dev/null and b/tmp_extract/Frog.javap.txt differ diff --git a/tmp_extract/Frog_full.javap.txt b/tmp_extract/Frog_full.javap.txt new file mode 100644 index 00000000..5d6a49fb Binary files /dev/null and b/tmp_extract/Frog_full.javap.txt differ diff --git a/tmp_extract/ShootTongue.javap.txt b/tmp_extract/ShootTongue.javap.txt new file mode 100644 index 00000000..e35a4828 Binary files /dev/null and b/tmp_extract/ShootTongue.javap.txt differ diff --git a/tmp_extract/net/fabricmc/fabric/api/registry/FabricBrewingRecipeRegistryBuilder.java b/tmp_extract/net/fabricmc/fabric/api/registry/FabricBrewingRecipeRegistryBuilder.java new file mode 100644 index 00000000..88084cd5 --- /dev/null +++ b/tmp_extract/net/fabricmc/fabric/api/registry/FabricBrewingRecipeRegistryBuilder.java @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2016, 2017, 2018, 2019 FabricMC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.fabricmc.fabric.api.registry; + +import net.fabricmc.fabric.api.event.Event; +import net.fabricmc.fabric.api.event.EventFactory; +import net.minecraft.class_1792; +import net.minecraft.class_1842; +import net.minecraft.class_1845; +import net.minecraft.class_1856; +import net.minecraft.class_6880; +import net.minecraft.class_7699; + +/** + * An extension of {@link class_1845.class_9665} to support ingredients. + */ +public interface FabricBrewingRecipeRegistryBuilder { + /** + * An event that is called when the brewing recipe registry is being built. + */ + Event BUILD = EventFactory.createArrayBacked(FabricBrewingRecipeRegistryBuilder.BuildCallback.class, listeners -> builder -> { + for (FabricBrewingRecipeRegistryBuilder.BuildCallback listener : listeners) { + listener.build(builder); + } + }); + + default void registerItemRecipe(class_1792 input, class_1856 ingredient, class_1792 output) { + throw new AssertionError("Must be implemented via interface injection"); + } + + default void registerPotionRecipe(class_6880 input, class_1856 ingredient, class_6880 output) { + throw new AssertionError("Must be implemented via interface injection"); + } + + default void registerRecipes(class_1856 ingredient, class_6880 potion) { + throw new AssertionError("Must be implemented via interface injection"); + } + + default class_7699 getEnabledFeatures() { + throw new AssertionError("Must be implemented via interface injection"); + } + + /** + * Use this event to register custom brewing recipes. + */ + @FunctionalInterface + interface BuildCallback { + /** + * Called when the brewing recipe registry is being built. + * + * @param builder the {@link class_1845} instance + */ + void build(class_1845.class_9665 builder); + } +} diff --git a/tmp_extract/net/neoforged/neoforge/common/brewing/BrewingRecipe.java b/tmp_extract/net/neoforged/neoforge/common/brewing/BrewingRecipe.java new file mode 100644 index 00000000..48015c2b --- /dev/null +++ b/tmp_extract/net/neoforged/neoforge/common/brewing/BrewingRecipe.java @@ -0,0 +1,48 @@ +/* + * Copyright (c) Forge Development LLC and contributors + * SPDX-License-Identifier: LGPL-2.1-only + */ + +package net.neoforged.neoforge.common.brewing; + +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.Ingredient; + +public class BrewingRecipe implements IBrewingRecipe { + private final Ingredient input; + private final Ingredient ingredient; + private final ItemStack output; + + public BrewingRecipe(Ingredient input, Ingredient ingredient, ItemStack output) { + this.input = input; + this.ingredient = ingredient; + this.output = output; + } + + @Override + public boolean isInput(ItemStack stack) { + return this.input.test(stack); + } + + @Override + public ItemStack getOutput(ItemStack input, ItemStack ingredient) { + return isInput(input) && isIngredient(ingredient) ? getOutput().copy() : ItemStack.EMPTY; + } + + public Ingredient getInput() { + return input; + } + + public Ingredient getIngredient() { + return ingredient; + } + + public ItemStack getOutput() { + return output; + } + + @Override + public boolean isIngredient(ItemStack ingredient) { + return this.ingredient.test(ingredient); + } +} diff --git a/tmp_extract/net/neoforged/neoforge/common/brewing/IBrewingRecipe.java b/tmp_extract/net/neoforged/neoforge/common/brewing/IBrewingRecipe.java new file mode 100644 index 00000000..c8a113c4 --- /dev/null +++ b/tmp_extract/net/neoforged/neoforge/common/brewing/IBrewingRecipe.java @@ -0,0 +1,38 @@ +/* + * Copyright (c) Forge Development LLC and contributors + * SPDX-License-Identifier: LGPL-2.1-only + */ + +package net.neoforged.neoforge.common.brewing; + +import static net.minecraft.world.item.alchemy.PotionBrewing.Builder; + +import net.minecraft.world.item.ItemStack; +import net.neoforged.neoforge.event.brewing.RegisterBrewingRecipesEvent; + +/** + * Interface for more flexible brewing recipes. + * + *

Register using {@link RegisterBrewingRecipesEvent} and {@link Builder#addRecipe(IBrewingRecipe)}. + */ +public interface IBrewingRecipe { + /** + * Returns true is the passed ItemStack is an input for this recipe. "Input" + * being the item that goes in one of the three bottom slots of the brewing + * stand (e.g: water bottle) + */ + boolean isInput(ItemStack input); + + /** + * Returns true if the passed ItemStack is an ingredient for this recipe. + * "Ingredient" being the item that goes in the top slot of the brewing + * stand (e.g: nether wart) + */ + boolean isIngredient(ItemStack ingredient); + + /** + * Returns the output when the passed input is brewed with the passed + * ingredient. Empty if invalid input or ingredient. + */ + ItemStack getOutput(ItemStack input, ItemStack ingredient); +} diff --git a/tmp_extract/net/neoforged/neoforge/event/brewing/RegisterBrewingRecipesEvent.java b/tmp_extract/net/neoforged/neoforge/event/brewing/RegisterBrewingRecipesEvent.java new file mode 100644 index 00000000..669e61ce --- /dev/null +++ b/tmp_extract/net/neoforged/neoforge/event/brewing/RegisterBrewingRecipesEvent.java @@ -0,0 +1,35 @@ +/* + * Copyright (c) NeoForged and contributors + * SPDX-License-Identifier: LGPL-2.1-only + */ + +package net.neoforged.neoforge.event.brewing; + +import net.minecraft.core.RegistryAccess; +import net.minecraft.world.item.alchemy.PotionBrewing; +import net.neoforged.bus.api.Event; +import org.jetbrains.annotations.ApiStatus; + +/** + * Event to register new brewing recipes. + * + *

Fired on both client and server side, on the main event bus. + */ +public class RegisterBrewingRecipesEvent extends Event { + private final PotionBrewing.Builder builder; + private final RegistryAccess registryAccess; + + @ApiStatus.Internal + public RegisterBrewingRecipesEvent(PotionBrewing.Builder builder, RegistryAccess registryAccess) { + this.builder = builder; + this.registryAccess = registryAccess; + } + + public PotionBrewing.Builder getBuilder() { + return builder; + } + + public RegistryAccess getRegistryAccess() { + return registryAccess; + } +}