Add Kraken's Grasp trident, kraken tentacle, RPO Launcher, and Star Coral

- Kraken's Grasp: throwable trident upgrade with innate configurable
  Loyalty, always-on lightning strikes, and Kraken Tentacle spawns on
  landing that grab/slow/damage nearby entities in an area
- Kraken Tentacle item/entity, added as a Kraken loot drop
- RPO Launcher: Squidzooka-style weapon firing Octopus Bombs that fall
  under gravity and detonate in an ink explosion on impact
- Star Coral: full alive/dead coral block set (plant/fan/wall fan/block)
  with light emission and natural ocean worldgen generation
- Supporting config, tags, recipes, advancements, lang, and creative
  tab entries for all of the above
This commit is contained in:
craisinlord committed 2026-07-15 22:30:12 -05:00
1 parent e89869d68a
commit 246e511597
204 files changed
+7622 -54

No files matched your search

@@ -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;
@@ -774,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;
}
@@ -918,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;
}
@@ -1292,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;
}
@@ -1384,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;
}
@@ -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;
@@ -57,6 +59,10 @@ public final class AntarchyObjects {
@SuppressWarnings("unchecked")
public static Supplier<EntityType<MissileSquidEntity>> MISSILE_SQUID = (Supplier<EntityType<MissileSquidEntity>>) UNBOUND;
@SuppressWarnings("unchecked")
public static Supplier<EntityType<TentacleEntity>> TENTACLE = (Supplier<EntityType<TentacleEntity>>) UNBOUND;
@SuppressWarnings("unchecked")
public static Supplier<EntityType<KrakensGraspThrownTrident>> KRAKENS_GRASP_TRIDENT = (Supplier<EntityType<KrakensGraspThrownTrident>>) UNBOUND;
@SuppressWarnings("unchecked")
public static Supplier<EntityType<OctopusBombEntity>> OCTOPUS_BOMB = (Supplier<EntityType<OctopusBombEntity>>) UNBOUND;
@SuppressWarnings("unchecked")
public static Supplier<EntityType<MolewormEntity>> MOLEWORM = (Supplier<EntityType<MolewormEntity>>) UNBOUND;
@@ -117,6 +123,12 @@ public final class AntarchyObjects {
@SuppressWarnings("unchecked")
public static Supplier<Block> WILD_CORN = (Supplier<Block>) UNBOUND;
@SuppressWarnings("unchecked")
public static Supplier<Block> STAR_CORAL_BLOCK = (Supplier<Block>) UNBOUND;
@SuppressWarnings("unchecked")
public static Supplier<Block> STAR_CORAL = (Supplier<Block>) UNBOUND;
@SuppressWarnings("unchecked")
public static Supplier<Block> STAR_CORAL_FAN = (Supplier<Block>) UNBOUND;
@SuppressWarnings("unchecked")
public static Supplier<Item> RAW_VENISON = (Supplier<Item>) UNBOUND;
@SuppressWarnings("unchecked")
public static Supplier<Item> COOKED_VENISON = (Supplier<Item>) UNBOUND;
@@ -212,6 +224,10 @@ public final class AntarchyObjects {
@SuppressWarnings("unchecked")
public static Supplier<Item> KRAKEN_TOOTH = (Supplier<Item>) UNBOUND;
@SuppressWarnings("unchecked")
public static Supplier<Item> KRAKEN_TENTACLE = (Supplier<Item>) UNBOUND;
@SuppressWarnings("unchecked")
public static Supplier<Item> KRAKENS_GRASP = (Supplier<Item>) UNBOUND;
@SuppressWarnings("unchecked")
public static Supplier<Item> MOGGLES = (Supplier<Item>) UNBOUND;
@SuppressWarnings("unchecked")
public static Supplier<Item> REVERIE_BOTTLE = (Supplier<Item>) UNBOUND;
@@ -274,6 +290,8 @@ public final class AntarchyObjects {
@SuppressWarnings("unchecked")
public static Supplier<Block> BRUTALFLY_COCOON_SPAWNER = (Supplier<Block>) UNBOUND;
@SuppressWarnings("unchecked")
public static Supplier<Block> GIANT_LILY_PAD = (Supplier<Block>) UNBOUND;
@SuppressWarnings("unchecked")
public static Supplier<BlockEntityType<AntNestBlockEntity>> ANT_NEST_BLOCK_ENTITY = (Supplier<BlockEntityType<AntNestBlockEntity>>) UNBOUND;
@SuppressWarnings("unchecked")
public static Supplier<BlockEntityType<DreamCampfireBlockEntity>> DREAM_CAMPFIRE_BLOCK_ENTITY = (Supplier<BlockEntityType<DreamCampfireBlockEntity>>) UNBOUND;
@@ -382,6 +400,7 @@ public final class AntarchyObjects {
Supplier<Block> hushweed,
Supplier<Block> squirrelNestBlock,
Supplier<Block> brutalflyCocoonSpawner,
Supplier<Block> giantLilyPad,
Supplier<BlockEntityType<AntNestBlockEntity>> antNestBlockEntity,
Supplier<BlockEntityType<DreamCampfireBlockEntity>> dreamCampfireBlockEntity,
Supplier<BlockEntityType<WaspNestBlockEntity>> waspNestBlockEntity,
@@ -480,6 +499,7 @@ 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;
@@ -500,6 +520,22 @@ public final class AntarchyObjects {
OCTOPUS_BOMB = supplier;
}
public static void setTentacle(Supplier<EntityType<TentacleEntity>> supplier) {
TENTACLE = supplier;
}
public static void setKrakensGraspTrident(Supplier<EntityType<KrakensGraspThrownTrident>> supplier) {
KRAKENS_GRASP_TRIDENT = supplier;
}
public static void setKrakenTentacle(Supplier<Item> supplier) {
KRAKEN_TENTACLE = supplier;
}
public static void setKrakensGrasp(Supplier<Item> supplier) {
KRAKENS_GRASP = supplier;
}
public static void setHerculesBeetle(Supplier<EntityType<HerculesBeetleEntity>> supplier) {
HERCULES_BEETLE = supplier;
}
@@ -556,6 +592,18 @@ public final class AntarchyObjects {
WILD_CORN = supplier;
}
public static void setStarCoralBlock(Supplier<Block> supplier) {
STAR_CORAL_BLOCK = supplier;
}
public static void setStarCoral(Supplier<Block> supplier) {
STAR_CORAL = supplier;
}
public static void setStarCoralFan(Supplier<Block> supplier) {
STAR_CORAL_FAN = supplier;
}
public static void setRawVenison(Supplier<Item> supplier) {
RAW_VENISON = supplier;
}
@@ -111,6 +111,7 @@ public final class AntarchyTags {
public static final class Fluids {
public static final TagKey<Fluid> LUMEN = TagKey.create(Registries.FLUID, id("lumen"));
public static final TagKey<Fluid> GIANT_LILY_PAD_SUPPORTING_FLUIDS = TagKey.create(Registries.FLUID, id("giant_lily_pad_supporting_fluids"));
private Fluids() {
}
@@ -61,7 +61,9 @@ public final class CreativeTabOrder {
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" -> 11;
"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;
@@ -71,10 +73,10 @@ public final class CreativeTabOrder {
"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", "shrink_ray", "growth_ray",
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" -> 18;
"ultimate_sword", "ultimate_mace", "krakens_grasp" -> 18;
case "primordial_helmet", "primordial_chestplate",
"primordial_leggings", "primordial_boots",
"blood_crystal_helmet", "blood_crystal_chestplate",
@@ -87,7 +89,7 @@ public final class CreativeTabOrder {
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",
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",
@@ -171,6 +173,12 @@ public final class CreativeTabOrder {
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;
@@ -243,20 +251,22 @@ public final class CreativeTabOrder {
case "battle_axe" -> 0;
case "basilisk_dagger" -> 1;
case "squidzooka" -> 2;
case "shrink_ray" -> 3;
case "growth_ray" -> 4;
case "gravity_gun" -> 5;
case "water_cannon" -> 6;
case "nightmare_sword" -> 7;
case "lucid_pearl" -> 8;
case "scorpion_whip" -> 9;
case "blood_crystal_katana" -> 10;
case "big_bertha" -> 11;
case "big_bertha_blade" -> 12;
case "big_bertha_handle" -> 13;
case "big_bertha_hilt" -> 14;
case "ultimate_sword" -> 15;
case "ultimate_mace" -> 16;
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;
@@ -295,28 +305,29 @@ public final class CreativeTabOrder {
case "cloud_shark_fin" -> 1;
case "basilisk_fang" -> 2;
case "kraken_tooth" -> 3;
case "emperor_scorpion_stinger" -> 4;
case "nightmare_scale" -> 5;
case "molevore_nose" -> 6;
case "moleworm" -> 7;
case "uranium_nugget" -> 8;
case "titanium_nugget" -> 9;
case "uranium_ingot" -> 10;
case "titanium_ingot" -> 11;
case "lucid_eye" -> 12;
case "mantis_claw" -> 13;
case "jumpy_bug_leg" -> 14;
case "brutalfly_wing" -> 15;
case "cornea_ear" -> 16;
case "primordial_scute" -> 17;
case "triffid_goo" -> 18;
case "vortex_eye" -> 19;
case "king_scale" -> 20;
case "queen_scale" -> 21;
case "chiten" -> 22;
case "stink_bug" -> 23;
case "corn" -> 24;
case "high_fructose_corn_syrup" -> 25;
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;
};
}
@@ -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;
}
}
@@ -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<GiantLilyPadBlock> CODEC = Block.simpleCodec(GiantLilyPadBlock::new);
public static final EnumProperty<Shape> SHAPE = EnumProperty.create("shape", Shape.class);
public static final EnumProperty<TilePosition> TILE_POSITION = EnumProperty.create("tile_position", TilePosition.class);
public static final EnumProperty<PadRotation> 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<Integer> 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<GiantLilyPadBlock> codec() {
return CODEC;
}
@Override
protected void createBlockStateDefinition(StateDefinition.Builder<Block, BlockState> 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<ShapeCandidate> 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<BlockPos> 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<ShapeCandidate> 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<ShapeCandidate> 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<TileAssignment> 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<TileAssignment> tiles) {
int area() {
return this.tiles.size();
}
List<BlockPos> 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;
}
}
}
@@ -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<Block> DEAD_CORAL_FIELD = BuiltInRegistries.BLOCK.byNameCodec().fieldOf("dead");
public static final MapCodec<StarCoralBlock> 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<StarCoralBlock> 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();
}
}
@@ -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<StarCoralFanBlock> 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<StarCoralFanBlock> 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);
}
}
}
@@ -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<StarCoralPlantBlock> 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<StarCoralPlantBlock> 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;
}
}
@@ -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<StarCoralWallFanBlock> 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<StarCoralWallFanBlock> 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);
}
}
}
@@ -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<TentacleEntity> {
@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");
}
}
@@ -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<TentacleEntity> {
public TentacleRenderer(EntityRendererProvider.Context context) {
super(context, new TentacleModel());
this.shadowRadius = 0.0F;
}
}
@@ -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<? extends Monster> 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;
@@ -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<? extends KrakensGraspThrownTrident> entityType, Level level) {
super(entityType, level);
}
public KrakensGraspThrownTrident(EntityType<? extends KrakensGraspThrownTrident> 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);
}
}
}
@@ -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<? extends TentacleEntity> 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<LivingEntity> 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<TentacleEntity> state) {
return state.setAndContinue(GRASP_ANIM);
}
@Override
public AnimatableInstanceCache getAnimatableInstanceCache() {
return this.geoCache;
}
}
@@ -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<GeoRenderProvider> consumer) {
consumer.accept(new GeoRenderProvider() {
private AnimatedHeldItemRenderer<KrakensGraspItem> 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;
}
});
}
}
@@ -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<ItemStack> 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<ItemStack> 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<ItemStack> getSupportedHeldProjectiles() {
return NO_PROJECTILES;
}
@Override
public Predicate<ItemStack> 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<GeoRenderProvider> consumer) {
consumer.accept(new GeoRenderProvider() {
private AnimatedHeldItemRenderer<RpoLauncherItem> 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);
}
}
@@ -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<NoneFeatureConfiguration> {
public StarCoralPatchFeature(Codec<NoneFeatureConfiguration> codec) {
super(codec);
}
@Override
public boolean place(FeaturePlaceContext<NoneFeatureConfiguration> 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;
}
}
@@ -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<Boolean> 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<Boolean> 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);
}
}
@@ -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"
}
}
}
}
}
}
}
@@ -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"
}
}
}
}
}
}
}
@@ -0,0 +1,7 @@
{
"variants": {
"": {
"model": "antarchy:block/dead_star_coral"
}
}
}
@@ -0,0 +1,7 @@
{
"variants": {
"": {
"model": "antarchy:block/dead_star_coral_block"
}
}
}
@@ -0,0 +1,7 @@
{
"variants": {
"": {
"model": "antarchy:block/dead_star_coral_fan"
}
}
}
@@ -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
}
}
}
@@ -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"
}
}
}
@@ -0,0 +1,7 @@
{
"variants": {
"": {
"model": "antarchy:block/star_coral"
}
}
}
@@ -0,0 +1,7 @@
{
"variants": {
"": {
"model": "antarchy:block/star_coral_block"
}
}
}
@@ -0,0 +1,7 @@
{
"variants": {
"": {
"model": "antarchy:block/star_coral_fan"
}
}
}
@@ -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
}
}
}
@@ -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]}
}
}
]
}
]
}
]
}
@@ -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]}
}
}
]
}
]
}
]
}
@@ -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}
]
}
]
}
]
}
@@ -41,6 +41,7 @@
"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",
@@ -152,6 +153,12 @@
"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",
@@ -201,6 +208,9 @@
"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",
@@ -222,6 +232,7 @@
"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",
@@ -377,6 +388,7 @@
"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.",
@@ -823,6 +835,8 @@
"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."
}
@@ -0,0 +1,6 @@
{
"parent": "minecraft:block/cross",
"textures": {
"cross": "antarchy:block/star_coral/dead_star_coral"
}
}
@@ -0,0 +1,6 @@
{
"parent": "minecraft:block/cube_all",
"textures": {
"all": "antarchy:block/star_coral/dead_star_coral_block"
}
}
@@ -0,0 +1,6 @@
{
"parent": "minecraft:block/coral_fan",
"textures": {
"fan": "antarchy:block/star_coral/dead_star_coral_fan"
}
}
@@ -0,0 +1,6 @@
{
"parent": "minecraft:block/coral_wall_fan",
"textures": {
"fan": "antarchy:block/star_coral/dead_star_coral_fan"
}
}
@@ -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
}
}
}
]
}
@@ -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
}
}
}
]
}
@@ -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
}
}
}
]
}
@@ -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
}
}
}
]
}
@@ -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
}
}
}
]
}
@@ -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
}
}
}
]
}
@@ -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
}
}
}
]
}
@@ -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
}
}
}
]
}
@@ -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
}
}
}
]
}
@@ -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
}
}
}
]
}
@@ -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
}
}
}
]
}
@@ -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
}
}
}
]
}
@@ -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
}
}
}
]
}
@@ -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
}
}
}
]
}
@@ -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
}
}
}
]
}
@@ -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
}
}
}
]
}
@@ -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
}
}
}
]
}
@@ -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
}
}
}
]
}
@@ -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
}
}
}
]
}
@@ -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
}
}
}
]
}
@@ -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
}
}
}
]
}
@@ -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
}
}
}
]
}
@@ -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
}
}
}
]
}
@@ -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
}
}
}
]
}
@@ -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
}
}
}
]
}
@@ -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
}
}
}
]
}
@@ -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
}
}
}
]
}
@@ -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
}
}
}
]
}
@@ -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
}
}
}
]
}
@@ -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
}
}
}
]
}
@@ -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
}
}
}
]
}
@@ -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
}
}
}
]
}
@@ -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
}
}
}
]
}
@@ -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
}
}
}
]
}
@@ -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
}
}
}
]
}
@@ -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
}
}
}
]
}
@@ -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
}
}
}
]
}
@@ -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
}
}
}
]
}
@@ -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
}
}
}
]
}
@@ -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
}
}
}
]
}
@@ -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
}
}
}
]
}
@@ -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
}
}
}
]
}
@@ -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
}
}
}
]
}
@@ -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
}
}
}
]
}
@@ -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
}
}
}
]
}
@@ -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
}
}
}
]
}
@@ -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
}
}
}
]
}
@@ -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
}
}
}
]
}
@@ -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
}
}
}
]
}
@@ -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
}
}
}
]
}
@@ -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
}
}
}
]
}
@@ -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
}
}
}
]
}
@@ -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
}
}
}
]
}
@@ -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
}
}
}
]
}
@@ -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
}
}
}
]
}
@@ -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
}
}
}
]
}
@@ -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
}
}
}
]
}
@@ -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
}
}
}
]
}
@@ -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
}
}
}
]
}
@@ -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
}
}
}
]
}
@@ -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
}
}
}
]
}
@@ -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
}
}
}
]
}
Loaded 100 of 204 files, more files were not shown because too many files have changed in this diff. Show more