stinky, attribute fix native, new kraken, and a bunch of other random bs
No files matched your search
@@ -1,5 +1,6 @@
|
|||||||
package com.craisinlord.antarchy;
|
package com.craisinlord.antarchy;
|
||||||
|
|
||||||
|
import com.craisinlord.antarchy.content.AttributeRangeInit;
|
||||||
import com.craisinlord.integrated_api.events.lifecycle.ServerGoingToStartEvent;
|
import com.craisinlord.integrated_api.events.lifecycle.ServerGoingToStartEvent;
|
||||||
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.LogManager;
|
||||||
import org.apache.logging.log4j.Logger;
|
import org.apache.logging.log4j.Logger;
|
||||||
@@ -10,6 +11,7 @@ public class Antarchy {
|
|||||||
public static final Logger LOGGER = LogManager.getLogger();
|
public static final Logger LOGGER = LogManager.getLogger();
|
||||||
|
|
||||||
public static void init() {
|
public static void init() {
|
||||||
|
AttributeRangeInit.apply();
|
||||||
ServerGoingToStartEvent.EVENT.addListener(Antarchy::serverAboutToStart);
|
ServerGoingToStartEvent.EVENT.addListener(Antarchy::serverAboutToStart);
|
||||||
}
|
}
|
||||||
private static void serverAboutToStart(final ServerGoingToStartEvent event) {
|
private static void serverAboutToStart(final ServerGoingToStartEvent event) {
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import net.minecraft.resources.ResourceLocation;
|
|||||||
import net.minecraft.world.level.Level;
|
import net.minecraft.world.level.Level;
|
||||||
|
|
||||||
public final class AntarchySettings {
|
public final class AntarchySettings {
|
||||||
private static boolean disableInfinityBookPortalCreation = false;
|
private static boolean disableInfinityBookPortalCreation = true;
|
||||||
private static boolean easterBunnyEnabled = true;
|
private static boolean easterBunnyEnabled = true;
|
||||||
private static int easterBunnyNaturalSpawnChancePercent = 1;
|
private static int easterBunnyNaturalSpawnChancePercent = 1;
|
||||||
private static boolean rainbowAntsLeadToInfinityDimensions = true;
|
private static boolean rainbowAntsLeadToInfinityDimensions = true;
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import com.craisinlord.antarchy.content.entity.ButterflyEntity;
|
|||||||
import com.craisinlord.antarchy.content.entity.CaterpillarEntity;
|
import com.craisinlord.antarchy.content.entity.CaterpillarEntity;
|
||||||
import com.craisinlord.antarchy.content.entity.EasterBunnyEntity;
|
import com.craisinlord.antarchy.content.entity.EasterBunnyEntity;
|
||||||
import com.craisinlord.antarchy.content.entity.HushProjectileEntity;
|
import com.craisinlord.antarchy.content.entity.HushProjectileEntity;
|
||||||
|
import com.craisinlord.antarchy.content.entity.StinkBugEntity;
|
||||||
import com.craisinlord.antarchy.content.entity.WaterBombEntity;
|
import com.craisinlord.antarchy.content.entity.WaterBombEntity;
|
||||||
import com.craisinlord.antarchy.content.entity.TriffidEntity;
|
import com.craisinlord.antarchy.content.entity.TriffidEntity;
|
||||||
import com.craisinlord.antarchy.content.entity.CreepingHorrorEntity;
|
import com.craisinlord.antarchy.content.entity.CreepingHorrorEntity;
|
||||||
@@ -27,6 +28,7 @@ import com.craisinlord.antarchy.content.block.entity.DreamCampfireBlockEntity;
|
|||||||
import com.craisinlord.antarchy.content.block.entity.WaspNestBlockEntity;
|
import com.craisinlord.antarchy.content.block.entity.WaspNestBlockEntity;
|
||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
import net.minecraft.core.Holder;
|
import net.minecraft.core.Holder;
|
||||||
|
import net.minecraft.core.particles.SimpleParticleType;
|
||||||
import net.minecraft.world.effect.MobEffect;
|
import net.minecraft.world.effect.MobEffect;
|
||||||
import net.minecraft.world.entity.ai.attributes.Attribute;
|
import net.minecraft.world.entity.ai.attributes.Attribute;
|
||||||
import net.minecraft.world.entity.EntityType;
|
import net.minecraft.world.entity.EntityType;
|
||||||
@@ -85,6 +87,8 @@ public final class AntarchyObjects {
|
|||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public static Supplier<EntityType<LurkingTerrorEntity>> LURKING_TERROR = (Supplier<EntityType<LurkingTerrorEntity>>) UNBOUND;
|
public static Supplier<EntityType<LurkingTerrorEntity>> LURKING_TERROR = (Supplier<EntityType<LurkingTerrorEntity>>) UNBOUND;
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
|
public static Supplier<EntityType<StinkBugEntity>> STINK_BUG = (Supplier<EntityType<StinkBugEntity>>) UNBOUND;
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
public static Supplier<Block> DUPLICATOR_LOG = (Supplier<Block>) UNBOUND;
|
public static Supplier<Block> DUPLICATOR_LOG = (Supplier<Block>) UNBOUND;
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public static Supplier<Block> DUPLICATOR_SAPLING = (Supplier<Block>) UNBOUND;
|
public static Supplier<Block> DUPLICATOR_SAPLING = (Supplier<Block>) UNBOUND;
|
||||||
@@ -165,6 +169,8 @@ public final class AntarchyObjects {
|
|||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public static Supplier<Item> REVERIE_BOTTLE = (Supplier<Item>) UNBOUND;
|
public static Supplier<Item> REVERIE_BOTTLE = (Supplier<Item>) UNBOUND;
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
|
public static Supplier<Item> STINK_BUG_ITEM = (Supplier<Item>) UNBOUND;
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
public static Supplier<Holder<MobEffect>> DREAD = (Supplier<Holder<MobEffect>>) UNBOUND;
|
public static Supplier<Holder<MobEffect>> DREAD = (Supplier<Holder<MobEffect>>) UNBOUND;
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public static Supplier<Holder<Attribute>> DOUBLE_DAMAGE_CHANCE = (Supplier<Holder<Attribute>>) UNBOUND;
|
public static Supplier<Holder<Attribute>> DOUBLE_DAMAGE_CHANCE = (Supplier<Holder<Attribute>>) UNBOUND;
|
||||||
@@ -177,6 +183,8 @@ public final class AntarchyObjects {
|
|||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public static Supplier<Holder<MobEffect>> INVERTED_EFFECT = (Supplier<Holder<MobEffect>>) UNBOUND;
|
public static Supplier<Holder<MobEffect>> INVERTED_EFFECT = (Supplier<Holder<MobEffect>>) UNBOUND;
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
|
public static Supplier<Holder<MobEffect>> STINKY_EFFECT = (Supplier<Holder<MobEffect>>) UNBOUND;
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
public static Supplier<Block> OURANWOOD_ACORN_BLOCK = (Supplier<Block>) UNBOUND;
|
public static Supplier<Block> OURANWOOD_ACORN_BLOCK = (Supplier<Block>) UNBOUND;
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public static Supplier<Block> MOSSY_OURANWOOD_LOG = (Supplier<Block>) UNBOUND;
|
public static Supplier<Block> MOSSY_OURANWOOD_LOG = (Supplier<Block>) UNBOUND;
|
||||||
@@ -208,6 +216,8 @@ public final class AntarchyObjects {
|
|||||||
public static Supplier<BlockEntityType<WaspNestBlockEntity>> WASP_NEST_BLOCK_ENTITY = (Supplier<BlockEntityType<WaspNestBlockEntity>>) UNBOUND;
|
public static Supplier<BlockEntityType<WaspNestBlockEntity>> WASP_NEST_BLOCK_ENTITY = (Supplier<BlockEntityType<WaspNestBlockEntity>>) UNBOUND;
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public static Supplier<BlockEntityType<HushweedBlockEntity>> HUSHWEED_BLOCK_ENTITY = (Supplier<BlockEntityType<HushweedBlockEntity>>) UNBOUND;
|
public static Supplier<BlockEntityType<HushweedBlockEntity>> HUSHWEED_BLOCK_ENTITY = (Supplier<BlockEntityType<HushweedBlockEntity>>) UNBOUND;
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
public static Supplier<SimpleParticleType> STINKY_GAS = (Supplier<SimpleParticleType>) UNBOUND;
|
||||||
|
|
||||||
private AntarchyObjects() {
|
private AntarchyObjects() {
|
||||||
}
|
}
|
||||||
@@ -234,6 +244,7 @@ public final class AntarchyObjects {
|
|||||||
Supplier<EntityType<WaterBombEntity>> waterBomb,
|
Supplier<EntityType<WaterBombEntity>> waterBomb,
|
||||||
Supplier<EntityType<CreepingHorrorEntity>> creepingHorror,
|
Supplier<EntityType<CreepingHorrorEntity>> creepingHorror,
|
||||||
Supplier<EntityType<LurkingTerrorEntity>> lurkingTerror,
|
Supplier<EntityType<LurkingTerrorEntity>> lurkingTerror,
|
||||||
|
Supplier<EntityType<StinkBugEntity>> stinkBug,
|
||||||
Supplier<Block> duplicatorLog,
|
Supplier<Block> duplicatorLog,
|
||||||
Supplier<Block> duplicatorSapling,
|
Supplier<Block> duplicatorSapling,
|
||||||
Supplier<Block> ductTape,
|
Supplier<Block> ductTape,
|
||||||
@@ -274,9 +285,11 @@ public final class AntarchyObjects {
|
|||||||
Supplier<Item> krakenTooth,
|
Supplier<Item> krakenTooth,
|
||||||
Supplier<Item> moggles,
|
Supplier<Item> moggles,
|
||||||
Supplier<Item> reverieBottle,
|
Supplier<Item> reverieBottle,
|
||||||
|
Supplier<Item> stinkBugItem,
|
||||||
Supplier<Holder<MobEffect>> dread,
|
Supplier<Holder<MobEffect>> dread,
|
||||||
Supplier<Holder<MobEffect>> paralyzedEffect,
|
Supplier<Holder<MobEffect>> paralyzedEffect,
|
||||||
Supplier<Holder<MobEffect>> invertedEffect,
|
Supplier<Holder<MobEffect>> invertedEffect,
|
||||||
|
Supplier<Holder<MobEffect>> stinkyEffect,
|
||||||
Supplier<Block> ouranwoodAcornBlock,
|
Supplier<Block> ouranwoodAcornBlock,
|
||||||
Supplier<Block> mossyOuranwoodLog,
|
Supplier<Block> mossyOuranwoodLog,
|
||||||
Supplier<Block> mossyOuranwoodWood,
|
Supplier<Block> mossyOuranwoodWood,
|
||||||
@@ -293,6 +306,7 @@ public final class AntarchyObjects {
|
|||||||
Supplier<BlockEntityType<DreamCampfireBlockEntity>> dreamCampfireBlockEntity,
|
Supplier<BlockEntityType<DreamCampfireBlockEntity>> dreamCampfireBlockEntity,
|
||||||
Supplier<BlockEntityType<WaspNestBlockEntity>> waspNestBlockEntity,
|
Supplier<BlockEntityType<WaspNestBlockEntity>> waspNestBlockEntity,
|
||||||
Supplier<BlockEntityType<HushweedBlockEntity>> hushweedBlockEntity,
|
Supplier<BlockEntityType<HushweedBlockEntity>> hushweedBlockEntity,
|
||||||
|
Supplier<SimpleParticleType> stinkyGas,
|
||||||
Supplier<Holder<Attribute>> doubleDamageChance,
|
Supplier<Holder<Attribute>> doubleDamageChance,
|
||||||
Supplier<Holder<Attribute>> bloodglassMaxHearts,
|
Supplier<Holder<Attribute>> bloodglassMaxHearts,
|
||||||
Supplier<Holder<MobEffect>> bloodglassWard
|
Supplier<Holder<MobEffect>> bloodglassWard
|
||||||
@@ -318,6 +332,7 @@ public final class AntarchyObjects {
|
|||||||
WATER_BOMB = waterBomb;
|
WATER_BOMB = waterBomb;
|
||||||
CREEPING_HORROR = creepingHorror;
|
CREEPING_HORROR = creepingHorror;
|
||||||
LURKING_TERROR = lurkingTerror;
|
LURKING_TERROR = lurkingTerror;
|
||||||
|
STINK_BUG = stinkBug;
|
||||||
DUPLICATOR_LOG = duplicatorLog;
|
DUPLICATOR_LOG = duplicatorLog;
|
||||||
DUPLICATOR_SAPLING = duplicatorSapling;
|
DUPLICATOR_SAPLING = duplicatorSapling;
|
||||||
DUCT_TAPE = ductTape;
|
DUCT_TAPE = ductTape;
|
||||||
@@ -358,9 +373,11 @@ public final class AntarchyObjects {
|
|||||||
KRAKEN_TOOTH = krakenTooth;
|
KRAKEN_TOOTH = krakenTooth;
|
||||||
MOGGLES = moggles;
|
MOGGLES = moggles;
|
||||||
REVERIE_BOTTLE = reverieBottle;
|
REVERIE_BOTTLE = reverieBottle;
|
||||||
|
STINK_BUG_ITEM = stinkBugItem;
|
||||||
DREAD = dread;
|
DREAD = dread;
|
||||||
PARALYZED_EFFECT = paralyzedEffect;
|
PARALYZED_EFFECT = paralyzedEffect;
|
||||||
INVERTED_EFFECT = invertedEffect;
|
INVERTED_EFFECT = invertedEffect;
|
||||||
|
STINKY_EFFECT = stinkyEffect;
|
||||||
OURANWOOD_ACORN_BLOCK = ouranwoodAcornBlock;
|
OURANWOOD_ACORN_BLOCK = ouranwoodAcornBlock;
|
||||||
MOSSY_OURANWOOD_LOG = mossyOuranwoodLog;
|
MOSSY_OURANWOOD_LOG = mossyOuranwoodLog;
|
||||||
MOSSY_OURANWOOD_WOOD = mossyOuranwoodWood;
|
MOSSY_OURANWOOD_WOOD = mossyOuranwoodWood;
|
||||||
@@ -377,6 +394,7 @@ public final class AntarchyObjects {
|
|||||||
DREAM_CAMPFIRE_BLOCK_ENTITY = dreamCampfireBlockEntity;
|
DREAM_CAMPFIRE_BLOCK_ENTITY = dreamCampfireBlockEntity;
|
||||||
WASP_NEST_BLOCK_ENTITY = waspNestBlockEntity;
|
WASP_NEST_BLOCK_ENTITY = waspNestBlockEntity;
|
||||||
HUSHWEED_BLOCK_ENTITY = hushweedBlockEntity;
|
HUSHWEED_BLOCK_ENTITY = hushweedBlockEntity;
|
||||||
|
STINKY_GAS = stinkyGas;
|
||||||
DOUBLE_DAMAGE_CHANCE = doubleDamageChance;
|
DOUBLE_DAMAGE_CHANCE = doubleDamageChance;
|
||||||
BLOODGLASS_MAX_HEARTS = bloodglassMaxHearts;
|
BLOODGLASS_MAX_HEARTS = bloodglassMaxHearts;
|
||||||
BLOODGLASS_WARD = bloodglassWard;
|
BLOODGLASS_WARD = bloodglassWard;
|
||||||
|
|||||||
@@ -55,6 +55,7 @@ public final class AntarchyTags {
|
|||||||
public static final TagKey<EntityType<?>> PARALYSIS_IMMUNE = TagKey.create(Registries.ENTITY_TYPE, id("paralysis_immune"));
|
public static final TagKey<EntityType<?>> PARALYSIS_IMMUNE = TagKey.create(Registries.ENTITY_TYPE, id("paralysis_immune"));
|
||||||
public static final TagKey<EntityType<?>> HUSHWEED_TARGETS = TagKey.create(Registries.ENTITY_TYPE, id("hushweed_targets"));
|
public static final TagKey<EntityType<?>> HUSHWEED_TARGETS = TagKey.create(Registries.ENTITY_TYPE, id("hushweed_targets"));
|
||||||
public static final TagKey<EntityType<?>> TRIFFID_PREY = TagKey.create(Registries.ENTITY_TYPE, id("triffid_prey"));
|
public static final TagKey<EntityType<?>> TRIFFID_PREY = TagKey.create(Registries.ENTITY_TYPE, id("triffid_prey"));
|
||||||
|
public static final TagKey<EntityType<?>> STINKY_REPELLED_HOSTILES = TagKey.create(Registries.ENTITY_TYPE, id("stinky_repelled_hostiles"));
|
||||||
public static final TagKey<EntityType<?>> SCORPION_WHIP_IMMUNE = TagKey.create(Registries.ENTITY_TYPE, id("scorpion_whip_immune"));
|
public static final TagKey<EntityType<?>> SCORPION_WHIP_IMMUNE = TagKey.create(Registries.ENTITY_TYPE, id("scorpion_whip_immune"));
|
||||||
public static final TagKey<EntityType<?>> SCORPION_WHIP_BLACKLIST = TagKey.create(Registries.ENTITY_TYPE, id("scorpion_whip_blacklist"));
|
public static final TagKey<EntityType<?>> SCORPION_WHIP_BLACKLIST = TagKey.create(Registries.ENTITY_TYPE, id("scorpion_whip_blacklist"));
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,34 @@
|
|||||||
|
package com.craisinlord.antarchy.content;
|
||||||
|
|
||||||
|
import com.craisinlord.antarchy.mixins.AccessorRangedAttribute;
|
||||||
|
import com.google.common.collect.ImmutableSet;
|
||||||
|
import net.minecraft.core.registries.BuiltInRegistries;
|
||||||
|
import net.minecraft.resources.ResourceLocation;
|
||||||
|
import net.minecraft.world.entity.ai.attributes.Attribute;
|
||||||
|
import net.minecraft.world.entity.ai.attributes.RangedAttribute;
|
||||||
|
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
public class AttributeRangeInit {
|
||||||
|
|
||||||
|
private static final double MAX = 11_000_000D;
|
||||||
|
|
||||||
|
private static final Set<ResourceLocation> TARGETS = ImmutableSet.of(
|
||||||
|
ResourceLocation.fromNamespaceAndPath("minecraft", "generic.max_health"),
|
||||||
|
ResourceLocation.fromNamespaceAndPath("minecraft", "generic.armor"),
|
||||||
|
ResourceLocation.fromNamespaceAndPath("minecraft", "generic.armor_toughness"),
|
||||||
|
ResourceLocation.fromNamespaceAndPath("minecraft", "generic.attack_damage"),
|
||||||
|
ResourceLocation.fromNamespaceAndPath("minecraft", "generic.attack_knockback")
|
||||||
|
);
|
||||||
|
|
||||||
|
public static void apply() {
|
||||||
|
for (ResourceLocation id : TARGETS) {
|
||||||
|
Attribute attribute = BuiltInRegistries.ATTRIBUTE.get(id);
|
||||||
|
if (attribute instanceof RangedAttribute ranged && ranged instanceof AccessorRangedAttribute accessor) {
|
||||||
|
if (ranged.getMaxValue() < MAX) {
|
||||||
|
accessor.antarchyAttributefix$setMaxValue(MAX);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,170 @@
|
|||||||
|
package com.craisinlord.antarchy.content;
|
||||||
|
|
||||||
|
import net.minecraft.server.level.ServerLevel;
|
||||||
|
import net.minecraft.tags.EntityTypeTags;
|
||||||
|
import net.minecraft.world.effect.MobEffectInstance;
|
||||||
|
import net.minecraft.world.effect.MobEffects;
|
||||||
|
import net.minecraft.world.entity.LivingEntity;
|
||||||
|
import net.minecraft.world.entity.Mob;
|
||||||
|
import net.minecraft.world.entity.PathfinderMob;
|
||||||
|
import net.minecraft.world.entity.monster.Enemy;
|
||||||
|
import net.minecraft.world.entity.player.Player;
|
||||||
|
import net.minecraft.world.phys.Vec3;
|
||||||
|
|
||||||
|
public final class StinkyBehavior {
|
||||||
|
public static final int STINKY_EFFECT_DURATION_TICKS = 60;
|
||||||
|
public static final double STINK_BUG_AURA_RADIUS = 5.0D;
|
||||||
|
public static final double STINKY_NAUSEA_RADIUS = 4.0D;
|
||||||
|
private static final int TRAIL_INTERVAL_TICKS = 4;
|
||||||
|
private static final int REACTION_INTERVAL_TICKS = 10;
|
||||||
|
private static final double ARTHROPOD_ALERT_RADIUS = 28.0D;
|
||||||
|
private static final double FLEE_RADIUS = 10.0D;
|
||||||
|
private static final double FLEE_DISTANCE = 8.0D;
|
||||||
|
private static final int STINKY_NAUSEA_DURATION_TICKS = 60;
|
||||||
|
private static final int STINK_BUG_BURST_NAUSEA_DURATION_TICKS = 100;
|
||||||
|
|
||||||
|
private StinkyBehavior() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void tickStinkyTrail(LivingEntity entity) {
|
||||||
|
if (!(entity.level() instanceof ServerLevel serverLevel)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!entity.isAlive() || entity.tickCount % TRAIL_INTERVAL_TICKS != 0 || !entity.hasEffect(AntarchyObjects.STINKY_EFFECT.get())) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Vec3 motion = entity.getDeltaMovement();
|
||||||
|
Vec3 horizontalMotion = new Vec3(motion.x, 0.0D, motion.z);
|
||||||
|
Vec3 direction = horizontalMotion.lengthSqr() > 1.0E-4D
|
||||||
|
? horizontalMotion.normalize()
|
||||||
|
: entity.getLookAngle().multiply(1.0D, 0.0D, 1.0D);
|
||||||
|
if (direction.lengthSqr() <= 1.0E-4D) {
|
||||||
|
direction = new Vec3(0.0D, 0.0D, 1.0D);
|
||||||
|
} else {
|
||||||
|
direction = direction.normalize();
|
||||||
|
}
|
||||||
|
|
||||||
|
Vec3 origin = entity.position()
|
||||||
|
.subtract(direction.scale(0.35D))
|
||||||
|
.add(0.0D, Math.max(0.15D, entity.getBbHeight() * 0.2D), 0.0D);
|
||||||
|
serverLevel.sendParticles(
|
||||||
|
AntarchyObjects.STINKY_GAS.get(),
|
||||||
|
origin.x,
|
||||||
|
origin.y,
|
||||||
|
origin.z,
|
||||||
|
2,
|
||||||
|
entity.getBbWidth() * 0.12D,
|
||||||
|
0.04D,
|
||||||
|
entity.getBbWidth() * 0.12D,
|
||||||
|
0.005D
|
||||||
|
);
|
||||||
|
applyNearbyNausea(entity, STINKY_NAUSEA_RADIUS, STINKY_NAUSEA_DURATION_TICKS);
|
||||||
|
if (entity.tickCount % REACTION_INTERVAL_TICKS == 0) {
|
||||||
|
reactToStinkySource(entity);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void emitBurst(LivingEntity entity, int count) {
|
||||||
|
if (!(entity.level() instanceof ServerLevel serverLevel)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
serverLevel.sendParticles(
|
||||||
|
AntarchyObjects.STINKY_GAS.get(),
|
||||||
|
entity.getX(),
|
||||||
|
entity.getY(0.45D),
|
||||||
|
entity.getZ(),
|
||||||
|
count,
|
||||||
|
entity.getBbWidth() * 0.35D,
|
||||||
|
entity.getBbHeight() * 0.25D,
|
||||||
|
entity.getBbWidth() * 0.35D,
|
||||||
|
0.045D
|
||||||
|
);
|
||||||
|
applyNearbyNausea(entity, STINK_BUG_AURA_RADIUS, STINK_BUG_BURST_NAUSEA_DURATION_TICKS);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void applyNearbyNausea(LivingEntity source, double radius, int durationTicks) {
|
||||||
|
if (source.level().isClientSide()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (Player player : source.level().getEntitiesOfClass(
|
||||||
|
Player.class,
|
||||||
|
source.getBoundingBox().inflate(radius),
|
||||||
|
player -> player.isAlive() && !player.isSpectator() && player != source
|
||||||
|
)) {
|
||||||
|
player.addEffect(new MobEffectInstance(MobEffects.CONFUSION, durationTicks, 0, false, true, true));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void reactToStinkySource(LivingEntity source) {
|
||||||
|
if (source.level().isClientSide() || !source.isAlive()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (Mob mob : source.level().getEntitiesOfClass(
|
||||||
|
Mob.class,
|
||||||
|
source.getBoundingBox().inflate(ARTHROPOD_ALERT_RADIUS),
|
||||||
|
mob -> mob.isAlive() && mob != source
|
||||||
|
)) {
|
||||||
|
if (mob.getType().is(EntityTypeTags.SENSITIVE_TO_BANE_OF_ARTHROPODS)) {
|
||||||
|
attractArthropod(mob, source);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (shouldRepelMob(mob, source)) {
|
||||||
|
repelPassiveOrNeutralMob(mob, source);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void attractArthropod(Mob mob, LivingEntity source) {
|
||||||
|
if (!isValidStinkySourceForMob(mob, source)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
LivingEntity currentTarget = mob.getTarget();
|
||||||
|
if (currentTarget != null && currentTarget.isAlive() && currentTarget.hasEffect(AntarchyObjects.STINKY_EFFECT.get())
|
||||||
|
&& mob.distanceToSqr(currentTarget) <= ARTHROPOD_ALERT_RADIUS * ARTHROPOD_ALERT_RADIUS) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
mob.setTarget(source);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void repelPassiveOrNeutralMob(Mob mob, LivingEntity source) {
|
||||||
|
if (!(mob instanceof PathfinderMob pathfinderMob) || !isValidStinkySourceForMob(mob, source)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Vec3 away = mob.position().subtract(source.position());
|
||||||
|
if (away.lengthSqr() < 1.0E-4D) {
|
||||||
|
away = new Vec3(mob.getRandom().nextDouble() - 0.5D, 0.0D, mob.getRandom().nextDouble() - 0.5D);
|
||||||
|
}
|
||||||
|
|
||||||
|
Vec3 escapeTarget = mob.position().add(away.normalize().scale(FLEE_DISTANCE));
|
||||||
|
pathfinderMob.setTarget(null);
|
||||||
|
pathfinderMob.getNavigation().moveTo(escapeTarget.x, escapeTarget.y, escapeTarget.z, 1.2D);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static boolean shouldRepelMob(Mob mob, LivingEntity source) {
|
||||||
|
if (mob.hasEffect(AntarchyObjects.STINKY_EFFECT.get()) || mob.distanceToSqr(source) > FLEE_RADIUS * FLEE_RADIUS) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mob.getType().is(AntarchyTags.Entities.STINKY_REPELLED_HOSTILES)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return !(mob instanceof Enemy);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static boolean isValidStinkySourceForMob(Mob mob, LivingEntity source) {
|
||||||
|
if (source == mob || !source.isAlive() || !source.hasEffect(AntarchyObjects.STINKY_EFFECT.get())) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (source instanceof Player player && (player.isCreative() || player.isSpectator())) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return !mob.isAlliedTo(source);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
package com.craisinlord.antarchy.content.block;
|
||||||
|
|
||||||
|
import com.mojang.serialization.MapCodec;
|
||||||
|
import net.minecraft.core.BlockPos;
|
||||||
|
import net.minecraft.util.RandomSource;
|
||||||
|
import net.minecraft.world.level.Level;
|
||||||
|
import net.minecraft.world.level.LevelReader;
|
||||||
|
import net.minecraft.world.level.block.Block;
|
||||||
|
import net.minecraft.world.level.block.BonemealableBlock;
|
||||||
|
import net.minecraft.world.level.block.state.BlockBehaviour;
|
||||||
|
import net.minecraft.world.level.block.state.BlockState;
|
||||||
|
|
||||||
|
public class AmberMossBlock extends Block implements BonemealableBlock {
|
||||||
|
public static final MapCodec<AmberMossBlock> CODEC = Block.simpleCodec(AmberMossBlock::new);
|
||||||
|
|
||||||
|
public AmberMossBlock(BlockBehaviour.Properties properties) {
|
||||||
|
super(properties);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public MapCodec<AmberMossBlock> codec() {
|
||||||
|
return CODEC;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isValidBonemealTarget(LevelReader level, BlockPos pos, BlockState state) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isBonemealSuccess(Level level, RandomSource random, BlockPos pos, BlockState state) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void performBonemeal(net.minecraft.server.level.ServerLevel level, RandomSource random, BlockPos pos, BlockState state) {
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -96,7 +96,7 @@ public class BedBugEggBlock extends Block {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void randomTick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) {
|
protected void randomTick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) {
|
||||||
if (!this.shouldUpdateHatchLevel(level) || !hasHatchSupport(level, pos)) {
|
if (!this.shouldUpdateHatchLevel(level)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -87,7 +87,7 @@ public class CreepingHorrorEggBlock extends Block {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void randomTick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) {
|
protected void randomTick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) {
|
||||||
if (!this.shouldUpdateHatchLevel(level) || !hasHatchSupport(level, pos)) {
|
if (!this.shouldUpdateHatchLevel(level)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -87,7 +87,7 @@ public class LurkingTerrorEggBlock extends Block {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void randomTick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) {
|
protected void randomTick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) {
|
||||||
if (!this.shouldUpdateHatchLevel(level) || !hasHatchSupport(level, pos)) {
|
if (!this.shouldUpdateHatchLevel(level)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,23 @@
|
|||||||
|
package com.craisinlord.antarchy.content.client.model;
|
||||||
|
|
||||||
|
import com.craisinlord.antarchy.Antarchy;
|
||||||
|
import com.craisinlord.antarchy.content.entity.StinkBugEntity;
|
||||||
|
import net.minecraft.resources.ResourceLocation;
|
||||||
|
import software.bernie.geckolib.model.GeoModel;
|
||||||
|
|
||||||
|
public class StinkBugModel extends GeoModel<StinkBugEntity> {
|
||||||
|
@Override
|
||||||
|
public ResourceLocation getModelResource(StinkBugEntity animatable) {
|
||||||
|
return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "geo/stink_bug.geo.json");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ResourceLocation getTextureResource(StinkBugEntity animatable) {
|
||||||
|
return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/stink_bug.png");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ResourceLocation getAnimationResource(StinkBugEntity animatable) {
|
||||||
|
return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "animations/stink_bug.animation.json");
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -15,6 +15,7 @@ public class CreepingHorrorRenderer extends GeoEntityRenderer<CreepingHorrorEnti
|
|||||||
public CreepingHorrorRenderer(EntityRendererProvider.Context context) {
|
public CreepingHorrorRenderer(EntityRendererProvider.Context context) {
|
||||||
super(context, new CreepingHorrorModel());
|
super(context, new CreepingHorrorModel());
|
||||||
this.shadowRadius = 0.5F;
|
this.shadowRadius = 0.5F;
|
||||||
|
this.withScale(0.85F);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -9,5 +9,6 @@ public class LurkingTerrorRenderer extends GeoEntityRenderer<LurkingTerrorEntity
|
|||||||
public LurkingTerrorRenderer(EntityRendererProvider.Context context) {
|
public LurkingTerrorRenderer(EntityRendererProvider.Context context) {
|
||||||
super(context, new LurkingTerrorModel());
|
super(context, new LurkingTerrorModel());
|
||||||
this.shadowRadius = 0.5F;
|
this.shadowRadius = 0.5F;
|
||||||
|
this.withScale(0.85F);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
package com.craisinlord.antarchy.content.client.renderer;
|
||||||
|
|
||||||
|
import com.craisinlord.antarchy.content.client.model.StinkBugModel;
|
||||||
|
import com.craisinlord.antarchy.content.entity.StinkBugEntity;
|
||||||
|
import com.mojang.blaze3d.vertex.PoseStack;
|
||||||
|
import com.mojang.blaze3d.vertex.VertexConsumer;
|
||||||
|
import net.minecraft.client.renderer.MultiBufferSource;
|
||||||
|
import net.minecraft.client.renderer.entity.EntityRendererProvider;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
import software.bernie.geckolib.cache.object.BakedGeoModel;
|
||||||
|
import software.bernie.geckolib.renderer.GeoEntityRenderer;
|
||||||
|
|
||||||
|
public class StinkBugRenderer extends GeoEntityRenderer<StinkBugEntity> {
|
||||||
|
private static final float ADULT_SCALE = 0.75F;
|
||||||
|
private static final float BABY_SCALE = 0.50F;
|
||||||
|
private static final float ADULT_SHADOW_RADIUS = 0.6F;
|
||||||
|
|
||||||
|
public StinkBugRenderer(EntityRendererProvider.Context context) {
|
||||||
|
super(context, new StinkBugModel());
|
||||||
|
this.shadowRadius = ADULT_SHADOW_RADIUS;
|
||||||
|
this.withScale(ADULT_SCALE);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void preRender(PoseStack poseStack, StinkBugEntity animatable, BakedGeoModel model, @Nullable MultiBufferSource bufferSource, @Nullable VertexConsumer buffer, boolean isReRender, float partialTick, int packedLight, int packedOverlay, int colour) {
|
||||||
|
super.preRender(poseStack, animatable, model, bufferSource, buffer, isReRender, partialTick, packedLight, packedOverlay, colour);
|
||||||
|
|
||||||
|
if (animatable.isBaby()) {
|
||||||
|
poseStack.scale(BABY_SCALE, BABY_SCALE, BABY_SCALE);
|
||||||
|
this.shadowRadius = ADULT_SHADOW_RADIUS * BABY_SCALE;
|
||||||
|
} else {
|
||||||
|
this.shadowRadius = ADULT_SHADOW_RADIUS;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
package com.craisinlord.antarchy.content.effect;
|
||||||
|
|
||||||
|
import net.minecraft.world.effect.MobEffect;
|
||||||
|
import net.minecraft.world.effect.MobEffectCategory;
|
||||||
|
|
||||||
|
public final class StinkyMobEffect extends MobEffect {
|
||||||
|
public StinkyMobEffect() {
|
||||||
|
super(MobEffectCategory.HARMFUL, 0x66773A);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -57,7 +57,7 @@ public class CreepingHorrorEntity extends Monster implements GeoEntity {
|
|||||||
public static AttributeSupplier.Builder createAttributes() {
|
public static AttributeSupplier.Builder createAttributes() {
|
||||||
return Mob.createMobAttributes()
|
return Mob.createMobAttributes()
|
||||||
.add(Attributes.MAX_HEALTH, AntarchySettings.creepingHorrorHealth())
|
.add(Attributes.MAX_HEALTH, AntarchySettings.creepingHorrorHealth())
|
||||||
.add(Attributes.MOVEMENT_SPEED, 0.30D)
|
.add(Attributes.MOVEMENT_SPEED, 0.38D)
|
||||||
.add(Attributes.ATTACK_DAMAGE, AntarchySettings.creepingHorrorAttackDamage())
|
.add(Attributes.ATTACK_DAMAGE, AntarchySettings.creepingHorrorAttackDamage())
|
||||||
.add(Attributes.FOLLOW_RANGE, 16.0D);
|
.add(Attributes.FOLLOW_RANGE, 16.0D);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,9 @@ package com.craisinlord.antarchy.content.entity;
|
|||||||
import com.craisinlord.antarchy.content.entity.trades.DrTrayaurusTradeManager;
|
import com.craisinlord.antarchy.content.entity.trades.DrTrayaurusTradeManager;
|
||||||
import net.minecraft.network.chat.Component;
|
import net.minecraft.network.chat.Component;
|
||||||
import net.minecraft.server.level.ServerLevel;
|
import net.minecraft.server.level.ServerLevel;
|
||||||
|
import net.minecraft.sounds.SoundEvent;
|
||||||
|
import net.minecraft.sounds.SoundEvents;
|
||||||
|
import net.minecraft.world.damagesource.DamageSource;
|
||||||
import net.minecraft.world.InteractionHand;
|
import net.minecraft.world.InteractionHand;
|
||||||
import net.minecraft.world.InteractionResult;
|
import net.minecraft.world.InteractionResult;
|
||||||
import net.minecraft.world.entity.AgeableMob;
|
import net.minecraft.world.entity.AgeableMob;
|
||||||
@@ -80,6 +83,21 @@ public class DrTrayaurusEntity extends AbstractVillager {
|
|||||||
this.overrideXp(1);
|
this.overrideXp(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected SoundEvent getAmbientSound() {
|
||||||
|
return SoundEvents.VILLAGER_AMBIENT;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected SoundEvent getHurtSound(DamageSource damageSource) {
|
||||||
|
return SoundEvents.VILLAGER_HURT;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected SoundEvent getDeathSound() {
|
||||||
|
return SoundEvents.VILLAGER_DEATH;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public InteractionResult mobInteract(Player player, InteractionHand hand) {
|
public InteractionResult mobInteract(Player player, InteractionHand hand) {
|
||||||
ItemStack stack = player.getItemInHand(hand);
|
ItemStack stack = player.getItemInHand(hand);
|
||||||
|
|||||||
@@ -58,31 +58,23 @@ public class JumpyBugEntity extends Monster implements GeoEntity {
|
|||||||
SynchedEntityData.defineId(JumpyBugEntity.class, EntityDataSerializers.BOOLEAN);
|
SynchedEntityData.defineId(JumpyBugEntity.class, EntityDataSerializers.BOOLEAN);
|
||||||
private static final EntityDataAccessor<Boolean> CLINGING_TO_CEILING =
|
private static final EntityDataAccessor<Boolean> CLINGING_TO_CEILING =
|
||||||
SynchedEntityData.defineId(JumpyBugEntity.class, EntityDataSerializers.BOOLEAN);
|
SynchedEntityData.defineId(JumpyBugEntity.class, EntityDataSerializers.BOOLEAN);
|
||||||
private static final EntityDataAccessor<Integer> LATCHED_TARGET_ID =
|
|
||||||
SynchedEntityData.defineId(JumpyBugEntity.class, EntityDataSerializers.INT);
|
|
||||||
private static final EntityDataAccessor<Integer> ATTACK_STATE =
|
private static final EntityDataAccessor<Integer> ATTACK_STATE =
|
||||||
SynchedEntityData.defineId(JumpyBugEntity.class, EntityDataSerializers.INT);
|
SynchedEntityData.defineId(JumpyBugEntity.class, EntityDataSerializers.INT);
|
||||||
|
|
||||||
private static final String POUNCE_COOLDOWN_KEY = "PounceCooldown";
|
private static final String POUNCE_COOLDOWN_KEY = "PounceCooldown";
|
||||||
private static final String LATCH_COOLDOWN_KEY = "LatchCooldown";
|
|
||||||
private static final String LATCH_TICKS_KEY = "LatchTicksRemaining";
|
|
||||||
private static final String BITE_COOLDOWN_KEY = "BiteCooldown";
|
|
||||||
private static final String RECOVERY_TICKS_KEY = "RecoveryTicks";
|
private static final String RECOVERY_TICKS_KEY = "RecoveryTicks";
|
||||||
private static final String POUNCE_TICKS_KEY = "PounceTicks";
|
private static final String POUNCE_TICKS_KEY = "PounceTicks";
|
||||||
|
|
||||||
private static final double DEFAULT_MOVEMENT_SPEED = 0.25D;
|
private static final double DEFAULT_MOVEMENT_SPEED = 0.25D;
|
||||||
private static final double DEFAULT_FOLLOW_RANGE = 16.0D;
|
private static final double DEFAULT_FOLLOW_RANGE = 16.0D;
|
||||||
private static final double DEFAULT_POUNCE_RANGE = 8.0D;
|
private static final double MELEE_WALK_RANGE = 4.0D;
|
||||||
private static final int DEFAULT_LATCH_DURATION = 80;
|
|
||||||
private static final int DEFAULT_BITE_INTERVAL = 15;
|
|
||||||
private static final int DEFAULT_POUNCE_COOLDOWN = 60;
|
private static final int DEFAULT_POUNCE_COOLDOWN = 60;
|
||||||
private static final int DEFAULT_LATCH_COOLDOWN = 80;
|
|
||||||
private static final int DEFAULT_RECOVERY_TICKS = 20;
|
private static final int DEFAULT_RECOVERY_TICKS = 20;
|
||||||
private static final double POUNCE_HORIZONTAL_SPEED = 0.92D;
|
private static final double POUNCE_HORIZONTAL_SPEED = 0.92D;
|
||||||
private static final double POUNCE_UPWARD_SPEED = 0.45D;
|
private static final double POUNCE_UPWARD_SPEED = 0.75D;
|
||||||
private static final double QUICK_MOVE_SQR = 0.14D * 0.14D;
|
private static final double QUICK_MOVE_SQR = 0.14D * 0.14D;
|
||||||
private static final double CLING_SEARCH_RANGE = 1.5D;
|
private static final double CLING_SEARCH_RANGE = 1.5D;
|
||||||
private static final double LATCH_CHECK_RANGE = 0.85D;
|
private static final double POUNCE_LAND_DAMAGE_RANGE = 5.0D;
|
||||||
|
|
||||||
private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle");
|
private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle");
|
||||||
private static final RawAnimation WALK_ANIM = RawAnimation.begin().thenLoop("walk");
|
private static final RawAnimation WALK_ANIM = RawAnimation.begin().thenLoop("walk");
|
||||||
@@ -92,9 +84,6 @@ public class JumpyBugEntity extends Monster implements GeoEntity {
|
|||||||
private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this);
|
private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this);
|
||||||
|
|
||||||
private int pounceCooldownTicks;
|
private int pounceCooldownTicks;
|
||||||
private int latchCooldownTicks;
|
|
||||||
private int latchTicksRemaining;
|
|
||||||
private int biteCooldownTicks;
|
|
||||||
private int recoveryTicks;
|
private int recoveryTicks;
|
||||||
private int pounceTicks;
|
private int pounceTicks;
|
||||||
private float visualAlpha = 1.0F;
|
private float visualAlpha = 1.0F;
|
||||||
@@ -127,20 +116,18 @@ public class JumpyBugEntity extends Monster implements GeoEntity {
|
|||||||
super.defineSynchedData(builder);
|
super.defineSynchedData(builder);
|
||||||
builder.define(CAMOUFLAGED, false);
|
builder.define(CAMOUFLAGED, false);
|
||||||
builder.define(CLINGING_TO_CEILING, false);
|
builder.define(CLINGING_TO_CEILING, false);
|
||||||
builder.define(LATCHED_TARGET_ID, -1);
|
|
||||||
builder.define(ATTACK_STATE, AttackState.GROUND.id());
|
builder.define(ATTACK_STATE, AttackState.GROUND.id());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void registerGoals() {
|
protected void registerGoals() {
|
||||||
this.goalSelector.addGoal(0, new FloatGoal(this));
|
this.goalSelector.addGoal(0, new FloatGoal(this));
|
||||||
this.goalSelector.addGoal(1, new LatchedGoal());
|
this.goalSelector.addGoal(1, new PounceAttackGoal());
|
||||||
this.goalSelector.addGoal(2, new PounceAttackGoal());
|
this.goalSelector.addGoal(2, new CeilingClingGoal());
|
||||||
this.goalSelector.addGoal(3, new CeilingClingGoal());
|
this.goalSelector.addGoal(3, new ChaseTargetGoal());
|
||||||
this.goalSelector.addGoal(4, new ChaseTargetGoal());
|
this.goalSelector.addGoal(4, new WanderGoal());
|
||||||
this.goalSelector.addGoal(5, new WanderGoal());
|
this.goalSelector.addGoal(5, new LookAtPlayerGoal(this, Player.class, 10.0F));
|
||||||
this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 10.0F));
|
this.goalSelector.addGoal(6, new RandomLookAroundGoal(this));
|
||||||
this.goalSelector.addGoal(7, new RandomLookAroundGoal(this));
|
|
||||||
this.targetSelector.addGoal(1, new HurtByTargetGoal(this));
|
this.targetSelector.addGoal(1, new HurtByTargetGoal(this));
|
||||||
this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true));
|
this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true));
|
||||||
}
|
}
|
||||||
@@ -159,9 +146,6 @@ public class JumpyBugEntity extends Monster implements GeoEntity {
|
|||||||
public void addAdditionalSaveData(CompoundTag tag) {
|
public void addAdditionalSaveData(CompoundTag tag) {
|
||||||
super.addAdditionalSaveData(tag);
|
super.addAdditionalSaveData(tag);
|
||||||
tag.putInt(POUNCE_COOLDOWN_KEY, this.pounceCooldownTicks);
|
tag.putInt(POUNCE_COOLDOWN_KEY, this.pounceCooldownTicks);
|
||||||
tag.putInt(LATCH_COOLDOWN_KEY, this.latchCooldownTicks);
|
|
||||||
tag.putInt(LATCH_TICKS_KEY, this.latchTicksRemaining);
|
|
||||||
tag.putInt(BITE_COOLDOWN_KEY, this.biteCooldownTicks);
|
|
||||||
tag.putInt(RECOVERY_TICKS_KEY, this.recoveryTicks);
|
tag.putInt(RECOVERY_TICKS_KEY, this.recoveryTicks);
|
||||||
tag.putInt(POUNCE_TICKS_KEY, this.pounceTicks);
|
tag.putInt(POUNCE_TICKS_KEY, this.pounceTicks);
|
||||||
}
|
}
|
||||||
@@ -170,9 +154,6 @@ public class JumpyBugEntity extends Monster implements GeoEntity {
|
|||||||
public void readAdditionalSaveData(CompoundTag tag) {
|
public void readAdditionalSaveData(CompoundTag tag) {
|
||||||
super.readAdditionalSaveData(tag);
|
super.readAdditionalSaveData(tag);
|
||||||
this.pounceCooldownTicks = tag.getInt(POUNCE_COOLDOWN_KEY);
|
this.pounceCooldownTicks = tag.getInt(POUNCE_COOLDOWN_KEY);
|
||||||
this.latchCooldownTicks = tag.getInt(LATCH_COOLDOWN_KEY);
|
|
||||||
this.latchTicksRemaining = tag.getInt(LATCH_TICKS_KEY);
|
|
||||||
this.biteCooldownTicks = tag.getInt(BITE_COOLDOWN_KEY);
|
|
||||||
this.recoveryTicks = tag.getInt(RECOVERY_TICKS_KEY);
|
this.recoveryTicks = tag.getInt(RECOVERY_TICKS_KEY);
|
||||||
this.pounceTicks = tag.getInt(POUNCE_TICKS_KEY);
|
this.pounceTicks = tag.getInt(POUNCE_TICKS_KEY);
|
||||||
}
|
}
|
||||||
@@ -198,19 +179,11 @@ public class JumpyBugEntity extends Monster implements GeoEntity {
|
|||||||
if (this.pounceCooldownTicks > 0) {
|
if (this.pounceCooldownTicks > 0) {
|
||||||
this.pounceCooldownTicks--;
|
this.pounceCooldownTicks--;
|
||||||
}
|
}
|
||||||
if (this.latchCooldownTicks > 0) {
|
|
||||||
this.latchCooldownTicks--;
|
|
||||||
}
|
|
||||||
if (this.biteCooldownTicks > 0) {
|
|
||||||
this.biteCooldownTicks--;
|
|
||||||
}
|
|
||||||
if (this.recoveryTicks > 0) {
|
if (this.recoveryTicks > 0) {
|
||||||
this.recoveryTicks--;
|
this.recoveryTicks--;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.isLatched()) {
|
if (this.isClingingToCeiling()) {
|
||||||
this.tickLatched();
|
|
||||||
} else if (this.isClingingToCeiling()) {
|
|
||||||
this.tickClinging();
|
this.tickClinging();
|
||||||
} else if (this.isPouncing()) {
|
} else if (this.isPouncing()) {
|
||||||
this.tickPouncing();
|
this.tickPouncing();
|
||||||
@@ -227,7 +200,7 @@ public class JumpyBugEntity extends Monster implements GeoEntity {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void travel(Vec3 travelVector) {
|
public void travel(Vec3 travelVector) {
|
||||||
if (this.isLatched() || this.isClingingToCeiling()) {
|
if (this.isClingingToCeiling()) {
|
||||||
this.setDeltaMovement(Vec3.ZERO);
|
this.setDeltaMovement(Vec3.ZERO);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -243,9 +216,6 @@ public class JumpyBugEntity extends Monster implements GeoEntity {
|
|||||||
|
|
||||||
this.setCamouflaged(false);
|
this.setCamouflaged(false);
|
||||||
this.recoveryTicks = Math.max(this.recoveryTicks, DEFAULT_RECOVERY_TICKS);
|
this.recoveryTicks = Math.max(this.recoveryTicks, DEFAULT_RECOVERY_TICKS);
|
||||||
if (this.isLatched()) {
|
|
||||||
this.detachFromTarget(true);
|
|
||||||
}
|
|
||||||
if (this.isClingingToCeiling()) {
|
if (this.isClingingToCeiling()) {
|
||||||
this.stopClinging();
|
this.stopClinging();
|
||||||
}
|
}
|
||||||
@@ -288,14 +258,6 @@ public class JumpyBugEntity extends Monster implements GeoEntity {
|
|||||||
return this.entityData.get(CLINGING_TO_CEILING);
|
return this.entityData.get(CLINGING_TO_CEILING);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isLatched() {
|
|
||||||
return this.entityData.get(LATCHED_TARGET_ID) != -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isLatchedTo(LivingEntity entity) {
|
|
||||||
return this.entityData.get(LATCHED_TARGET_ID) == entity.getId();
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isPouncing() {
|
public boolean isPouncing() {
|
||||||
return this.getAttackState() == AttackState.POUNCING;
|
return this.getAttackState() == AttackState.POUNCING;
|
||||||
}
|
}
|
||||||
@@ -326,7 +288,7 @@ public class JumpyBugEntity extends Monster implements GeoEntity {
|
|||||||
|
|
||||||
private PlayState mainAnimController(AnimationState<JumpyBugEntity> state) {
|
private PlayState mainAnimController(AnimationState<JumpyBugEntity> state) {
|
||||||
AttackState attackState = this.getAttackState();
|
AttackState attackState = this.getAttackState();
|
||||||
if (attackState == AttackState.POUNCING || attackState == AttackState.LATCHED || attackState == AttackState.CLINGING) {
|
if (attackState == AttackState.POUNCING || attackState == AttackState.CLINGING) {
|
||||||
return state.setAndContinue(JUMP_ANIM);
|
return state.setAndContinue(JUMP_ANIM);
|
||||||
}
|
}
|
||||||
if (attackState == AttackState.RECOVERING) {
|
if (attackState == AttackState.RECOVERING) {
|
||||||
@@ -356,54 +318,18 @@ public class JumpyBugEntity extends Monster implements GeoEntity {
|
|||||||
this.setAttackState(AttackState.POUNCING);
|
this.setAttackState(AttackState.POUNCING);
|
||||||
this.setCamouflaged(false);
|
this.setCamouflaged(false);
|
||||||
this.pounceTicks++;
|
this.pounceTicks++;
|
||||||
LivingEntity target = this.getTarget();
|
|
||||||
if (target != null && target.isAlive() && this.distanceToSqr(target) <= (this.getBbWidth() + target.getBbWidth() + LATCH_CHECK_RANGE) * (this.getBbWidth() + target.getBbWidth() + LATCH_CHECK_RANGE)) {
|
|
||||||
if (this.tryLatch(target)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.onGround() && this.pounceTicks > 4) {
|
if (this.onGround() && this.pounceTicks > 8) {
|
||||||
|
LivingEntity target = this.getTarget();
|
||||||
|
if (target != null && target.isAlive() && this.distanceToSqr(target) <= POUNCE_LAND_DAMAGE_RANGE * POUNCE_LAND_DAMAGE_RANGE) {
|
||||||
|
target.hurt(this.damageSources().mobAttack(this), (float) AntarchySettings.jumpyBugPounceDamage());
|
||||||
|
}
|
||||||
this.finishPounce(false);
|
this.finishPounce(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void tickLatched() {
|
|
||||||
LivingEntity target = this.getLatchedTarget();
|
|
||||||
if (target == null || !target.isAlive() || target.level() != this.level() || target.isRemoved() || target.isInWater()) {
|
|
||||||
this.detachFromTarget(false);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.setAttackState(AttackState.LATCHED);
|
|
||||||
this.setCamouflaged(false);
|
|
||||||
this.setNoGravity(true);
|
|
||||||
this.noPhysics = true;
|
|
||||||
this.getNavigation().stop();
|
|
||||||
this.setDeltaMovement(Vec3.ZERO);
|
|
||||||
|
|
||||||
Vec3 latchPos = this.getLatchPosition(target);
|
|
||||||
this.setPos(latchPos.x, latchPos.y, latchPos.z);
|
|
||||||
this.yRotO = this.getYRot();
|
|
||||||
this.setYRot(target.getYHeadRot());
|
|
||||||
this.setYBodyRot(target.getYHeadRot());
|
|
||||||
this.setYHeadRot(target.getYHeadRot());
|
|
||||||
this.setXRot(-20.0F);
|
|
||||||
|
|
||||||
if (--this.latchTicksRemaining <= 0) {
|
|
||||||
this.detachFromTarget(true);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.biteCooldownTicks <= 0) {
|
|
||||||
target.hurt(this.damageSources().mobAttack(this), (float) AntarchySettings.jumpyBugLatchDamage());
|
|
||||||
this.biteCooldownTicks = DEFAULT_BITE_INTERVAL;
|
|
||||||
this.playSound(SoundEvents.SPIDER_HURT, 0.35F, 1.5F + this.random.nextFloat() * 0.2F);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void updateCamouflage() {
|
private void updateCamouflage() {
|
||||||
if (this.isLatched() || this.isPouncing()) {
|
if (this.isPouncing()) {
|
||||||
this.setCamouflaged(false);
|
this.setCamouflaged(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -415,63 +341,6 @@ public class JumpyBugEntity extends Monster implements GeoEntity {
|
|||||||
this.setCamouflaged(shouldCamouflage);
|
this.setCamouflaged(shouldCamouflage);
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean tryLatch(LivingEntity target) {
|
|
||||||
if (!(target instanceof Player) || this.latchCooldownTicks > 0 || this.isLatched()) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if (this.level().getEntitiesOfClass(JumpyBugEntity.class, target.getBoundingBox().inflate(0.75D),
|
|
||||||
bug -> bug != this && bug.isLatchedTo(target)).isEmpty()) {
|
|
||||||
this.entityData.set(LATCHED_TARGET_ID, target.getId());
|
|
||||||
this.latchTicksRemaining = DEFAULT_LATCH_DURATION;
|
|
||||||
this.biteCooldownTicks = 0;
|
|
||||||
this.pounceTicks = 0;
|
|
||||||
this.setAttackState(AttackState.LATCHED);
|
|
||||||
this.setTarget(target);
|
|
||||||
target.hurt(this.damageSources().mobAttack(this), (float) AntarchySettings.jumpyBugPounceDamage());
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void detachFromTarget(boolean knockAway) {
|
|
||||||
LivingEntity target = this.getLatchedTarget();
|
|
||||||
this.entityData.set(LATCHED_TARGET_ID, -1);
|
|
||||||
this.latchTicksRemaining = 0;
|
|
||||||
this.biteCooldownTicks = DEFAULT_BITE_INTERVAL;
|
|
||||||
this.latchCooldownTicks = DEFAULT_LATCH_COOLDOWN;
|
|
||||||
this.setAttackState(AttackState.RECOVERING);
|
|
||||||
this.recoveryTicks = DEFAULT_RECOVERY_TICKS;
|
|
||||||
this.setNoGravity(false);
|
|
||||||
this.noPhysics = false;
|
|
||||||
|
|
||||||
if (knockAway && target != null) {
|
|
||||||
Vec3 away = this.position().subtract(target.position());
|
|
||||||
if (away.lengthSqr() < 1.0E-4D) {
|
|
||||||
away = target.getLookAngle().scale(-1.0D);
|
|
||||||
}
|
|
||||||
away = away.normalize();
|
|
||||||
this.setDeltaMovement(away.x * 0.35D, 0.25D, away.z * 0.35D);
|
|
||||||
this.hasImpulse = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Nullable
|
|
||||||
private LivingEntity getLatchedTarget() {
|
|
||||||
int entityId = this.entityData.get(LATCHED_TARGET_ID);
|
|
||||||
if (entityId == -1) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
Entity entity = this.level().getEntity(entityId);
|
|
||||||
return entity instanceof LivingEntity livingEntity ? livingEntity : null;
|
|
||||||
}
|
|
||||||
|
|
||||||
private Vec3 getLatchPosition(LivingEntity target) {
|
|
||||||
Vec3 eyePos = target.position().add(0.0D, target.getEyeHeight() - 0.15D, 0.0D);
|
|
||||||
Vec3 backOffset = target.getLookAngle().normalize().scale(-0.16D);
|
|
||||||
return eyePos.add(backOffset).add(0.0D, -0.18D, 0.0D);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
private BlockPos findClingBlockPos() {
|
private BlockPos findClingBlockPos() {
|
||||||
BlockPos origin = this.blockPosition();
|
BlockPos origin = this.blockPosition();
|
||||||
@@ -537,18 +406,15 @@ public class JumpyBugEntity extends Monster implements GeoEntity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private boolean canUseAmbush() {
|
private boolean canUseAmbush() {
|
||||||
return !this.isLatched()
|
return !this.isPouncing()
|
||||||
&& !this.isPouncing()
|
&& this.recoveryTicks <= 0;
|
||||||
&& this.recoveryTicks <= 0
|
|
||||||
&& this.latchCooldownTicks <= 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private enum AttackState implements StringRepresentable {
|
private enum AttackState implements StringRepresentable {
|
||||||
GROUND(0, "ground"),
|
GROUND(0, "ground"),
|
||||||
CLINGING(1, "clinging"),
|
CLINGING(1, "clinging"),
|
||||||
POUNCING(2, "pouncing"),
|
POUNCING(2, "pouncing"),
|
||||||
LATCHED(3, "latched"),
|
RECOVERING(3, "recovering");
|
||||||
RECOVERING(4, "recovering");
|
|
||||||
|
|
||||||
private static final IntFunction<AttackState> BY_ID = ByIdMap.continuous(AttackState::id, values(), ByIdMap.OutOfBoundsStrategy.ZERO);
|
private static final IntFunction<AttackState> BY_ID = ByIdMap.continuous(AttackState::id, values(), ByIdMap.OutOfBoundsStrategy.ZERO);
|
||||||
public static final Codec<AttackState> CODEC = StringRepresentable.fromEnum(AttackState::values);
|
public static final Codec<AttackState> CODEC = StringRepresentable.fromEnum(AttackState::values);
|
||||||
@@ -571,27 +437,6 @@ public class JumpyBugEntity extends Monster implements GeoEntity {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private final class LatchedGoal extends Goal {
|
|
||||||
private LatchedGoal() {
|
|
||||||
this.setFlags(EnumSet.of(Flag.MOVE, Flag.LOOK, Flag.JUMP));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean canUse() {
|
|
||||||
return JumpyBugEntity.this.isLatched();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean canContinueToUse() {
|
|
||||||
return JumpyBugEntity.this.isLatched();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void tick() {
|
|
||||||
JumpyBugEntity.this.getNavigation().stop();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private final class PounceAttackGoal extends Goal {
|
private final class PounceAttackGoal extends Goal {
|
||||||
private PounceAttackGoal() {
|
private PounceAttackGoal() {
|
||||||
this.setFlags(EnumSet.of(Flag.MOVE, Flag.LOOK, Flag.JUMP));
|
this.setFlags(EnumSet.of(Flag.MOVE, Flag.LOOK, Flag.JUMP));
|
||||||
@@ -604,7 +449,6 @@ public class JumpyBugEntity extends Monster implements GeoEntity {
|
|||||||
&& target.isAlive()
|
&& target.isAlive()
|
||||||
&& JumpyBugEntity.this.canUseAmbush()
|
&& JumpyBugEntity.this.canUseAmbush()
|
||||||
&& JumpyBugEntity.this.pounceCooldownTicks <= 0
|
&& JumpyBugEntity.this.pounceCooldownTicks <= 0
|
||||||
&& JumpyBugEntity.this.distanceToSqr(target) <= DEFAULT_POUNCE_RANGE * DEFAULT_POUNCE_RANGE
|
|
||||||
&& (JumpyBugEntity.this.hasLineOfSight(target) || JumpyBugEntity.this.distanceToSqr(target) <= 9.0D);
|
&& (JumpyBugEntity.this.hasLineOfSight(target) || JumpyBugEntity.this.distanceToSqr(target) <= 9.0D);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -638,7 +482,7 @@ public class JumpyBugEntity extends Monster implements GeoEntity {
|
|||||||
return JumpyBugEntity.this.random.nextInt(40) == 0 && JumpyBugEntity.this.canClingHere();
|
return JumpyBugEntity.this.random.nextInt(40) == 0 && JumpyBugEntity.this.canClingHere();
|
||||||
}
|
}
|
||||||
|
|
||||||
return JumpyBugEntity.this.distanceToSqr(target) <= (DEFAULT_POUNCE_RANGE + CLING_SEARCH_RANGE) * (DEFAULT_POUNCE_RANGE + CLING_SEARCH_RANGE)
|
return JumpyBugEntity.this.distanceToSqr(target) <= (DEFAULT_FOLLOW_RANGE + CLING_SEARCH_RANGE) * (DEFAULT_FOLLOW_RANGE + CLING_SEARCH_RANGE)
|
||||||
&& JumpyBugEntity.this.canClingHere();
|
&& JumpyBugEntity.this.canClingHere();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -668,7 +512,6 @@ public class JumpyBugEntity extends Monster implements GeoEntity {
|
|||||||
|
|
||||||
JumpyBugEntity.this.getLookControl().setLookAt(target, 30.0F, 30.0F);
|
JumpyBugEntity.this.getLookControl().setLookAt(target, 30.0F, 30.0F);
|
||||||
if (JumpyBugEntity.this.pounceCooldownTicks <= 0
|
if (JumpyBugEntity.this.pounceCooldownTicks <= 0
|
||||||
&& JumpyBugEntity.this.distanceToSqr(target) <= DEFAULT_POUNCE_RANGE * DEFAULT_POUNCE_RANGE
|
|
||||||
&& (JumpyBugEntity.this.hasLineOfSight(target) || JumpyBugEntity.this.distanceToSqr(target) <= 4.0D)) {
|
&& (JumpyBugEntity.this.hasLineOfSight(target) || JumpyBugEntity.this.distanceToSqr(target) <= 4.0D)) {
|
||||||
JumpyBugEntity.this.stopClinging();
|
JumpyBugEntity.this.stopClinging();
|
||||||
JumpyBugEntity.this.beginPounce(target);
|
JumpyBugEntity.this.beginPounce(target);
|
||||||
@@ -686,7 +529,6 @@ public class JumpyBugEntity extends Monster implements GeoEntity {
|
|||||||
LivingEntity target = JumpyBugEntity.this.getTarget();
|
LivingEntity target = JumpyBugEntity.this.getTarget();
|
||||||
return target != null
|
return target != null
|
||||||
&& target.isAlive()
|
&& target.isAlive()
|
||||||
&& !JumpyBugEntity.this.isLatched()
|
|
||||||
&& !JumpyBugEntity.this.isClingingToCeiling()
|
&& !JumpyBugEntity.this.isClingingToCeiling()
|
||||||
&& !JumpyBugEntity.this.isPouncing()
|
&& !JumpyBugEntity.this.isPouncing()
|
||||||
&& JumpyBugEntity.this.recoveryTicks <= 0;
|
&& JumpyBugEntity.this.recoveryTicks <= 0;
|
||||||
@@ -705,7 +547,8 @@ public class JumpyBugEntity extends Monster implements GeoEntity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
JumpyBugEntity.this.getLookControl().setLookAt(target, 30.0F, 30.0F);
|
JumpyBugEntity.this.getLookControl().setLookAt(target, 30.0F, 30.0F);
|
||||||
if (JumpyBugEntity.this.distanceToSqr(target) > DEFAULT_POUNCE_RANGE * DEFAULT_POUNCE_RANGE) {
|
// Only walk when close; at range, pounce is the primary approach
|
||||||
|
if (JumpyBugEntity.this.distanceToSqr(target) <= MELEE_WALK_RANGE * MELEE_WALK_RANGE) {
|
||||||
JumpyBugEntity.this.getNavigation().moveTo(target, 1.05D);
|
JumpyBugEntity.this.getNavigation().moveTo(target, 1.05D);
|
||||||
} else {
|
} else {
|
||||||
JumpyBugEntity.this.getNavigation().stop();
|
JumpyBugEntity.this.getNavigation().stop();
|
||||||
@@ -720,8 +563,7 @@ public class JumpyBugEntity extends Monster implements GeoEntity {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean canUse() {
|
public boolean canUse() {
|
||||||
return !JumpyBugEntity.this.isLatched()
|
return !JumpyBugEntity.this.isClingingToCeiling()
|
||||||
&& !JumpyBugEntity.this.isClingingToCeiling()
|
|
||||||
&& !JumpyBugEntity.this.isPouncing()
|
&& !JumpyBugEntity.this.isPouncing()
|
||||||
&& JumpyBugEntity.this.getTarget() == null
|
&& JumpyBugEntity.this.getTarget() == null
|
||||||
&& super.canUse();
|
&& super.canUse();
|
||||||
@@ -729,8 +571,7 @@ public class JumpyBugEntity extends Monster implements GeoEntity {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean canContinueToUse() {
|
public boolean canContinueToUse() {
|
||||||
return !JumpyBugEntity.this.isLatched()
|
return !JumpyBugEntity.this.isClingingToCeiling()
|
||||||
&& !JumpyBugEntity.this.isClingingToCeiling()
|
|
||||||
&& !JumpyBugEntity.this.isPouncing()
|
&& !JumpyBugEntity.this.isPouncing()
|
||||||
&& super.canContinueToUse();
|
&& super.canContinueToUse();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ import software.bernie.geckolib.util.GeckoLibUtil;
|
|||||||
public class LurkingTerrorEntity extends Monster implements GeoEntity {
|
public class LurkingTerrorEntity extends Monster implements GeoEntity {
|
||||||
private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle");
|
private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle");
|
||||||
private static final RawAnimation WALK_ANIM = RawAnimation.begin().thenLoop("walk");
|
private static final RawAnimation WALK_ANIM = RawAnimation.begin().thenLoop("walk");
|
||||||
|
private static final RawAnimation FLY_ANIM = RawAnimation.begin().thenLoop("fly");
|
||||||
private static final RawAnimation ATTACK_LAND_ANIM = RawAnimation.begin().thenLoop("attackland");
|
private static final RawAnimation ATTACK_LAND_ANIM = RawAnimation.begin().thenLoop("attackland");
|
||||||
private static final RawAnimation ATTACK_AIR_ANIM = RawAnimation.begin().thenLoop("attackair");
|
private static final RawAnimation ATTACK_AIR_ANIM = RawAnimation.begin().thenLoop("attackair");
|
||||||
private static final byte ATTACK_ANIM_EVENT = 5;
|
private static final byte ATTACK_ANIM_EVENT = 5;
|
||||||
@@ -45,10 +46,10 @@ public class LurkingTerrorEntity extends Monster implements GeoEntity {
|
|||||||
public static AttributeSupplier.Builder createAttributes() {
|
public static AttributeSupplier.Builder createAttributes() {
|
||||||
return Mob.createMobAttributes()
|
return Mob.createMobAttributes()
|
||||||
.add(Attributes.MAX_HEALTH, AntarchySettings.lurkingTerrorHealth())
|
.add(Attributes.MAX_HEALTH, AntarchySettings.lurkingTerrorHealth())
|
||||||
.add(Attributes.MOVEMENT_SPEED, 0.25D)
|
.add(Attributes.MOVEMENT_SPEED, 0.35D)
|
||||||
.add(Attributes.ATTACK_DAMAGE, AntarchySettings.lurkingTerrorAttackDamage())
|
.add(Attributes.ATTACK_DAMAGE, AntarchySettings.lurkingTerrorAttackDamage())
|
||||||
.add(Attributes.FOLLOW_RANGE, 16.0D)
|
.add(Attributes.FOLLOW_RANGE, 16.0D)
|
||||||
.add(Attributes.FLYING_SPEED, 0.4D);
|
.add(Attributes.FLYING_SPEED, 0.55D);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -84,7 +85,7 @@ public class LurkingTerrorEntity extends Monster implements GeoEntity {
|
|||||||
return state.setAndContinue(ATTACK_LAND_ANIM);
|
return state.setAndContinue(ATTACK_LAND_ANIM);
|
||||||
}
|
}
|
||||||
if (state.isMoving()) {
|
if (state.isMoving()) {
|
||||||
return state.setAndContinue(WALK_ANIM);
|
return state.setAndContinue(this.onGround() ? WALK_ANIM : FLY_ANIM);
|
||||||
}
|
}
|
||||||
return state.setAndContinue(IDLE_ANIM);
|
return state.setAndContinue(IDLE_ANIM);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -62,6 +62,7 @@ public class MissileSquidEntity extends Monster implements GeoEntity {
|
|||||||
private static final String LAUNCH_OWNER_KEY = "LaunchOwner";
|
private static final String LAUNCH_OWNER_KEY = "LaunchOwner";
|
||||||
private static final String ARMED_AFTER_LANDING_KEY = "ArmedAfterLanding";
|
private static final String ARMED_AFTER_LANDING_KEY = "ArmedAfterLanding";
|
||||||
private static final String ACTION_ANIM_TICKS_KEY = "ActionAnimTicks";
|
private static final String ACTION_ANIM_TICKS_KEY = "ActionAnimTicks";
|
||||||
|
private static final String SPAWNED_BY_KRAKEN_KEY = "SpawnedByKraken";
|
||||||
private static final double AGGRO_SPEED = 0.5D;
|
private static final double AGGRO_SPEED = 0.5D;
|
||||||
private static final double PATROL_SPEED = 0.28D;
|
private static final double PATROL_SPEED = 0.28D;
|
||||||
private static final double ATTACH_RANGE_SQR = 2.25D;
|
private static final double ATTACH_RANGE_SQR = 2.25D;
|
||||||
@@ -86,6 +87,7 @@ public class MissileSquidEntity extends Monster implements GeoEntity {
|
|||||||
private int attachedTargetId = -1;
|
private int attachedTargetId = -1;
|
||||||
private boolean launchedFromSquidzooka;
|
private boolean launchedFromSquidzooka;
|
||||||
private boolean armedAfterLanding;
|
private boolean armedAfterLanding;
|
||||||
|
private boolean spawnedByKraken;
|
||||||
@Nullable
|
@Nullable
|
||||||
private UUID launchOwnerUuid;
|
private UUID launchOwnerUuid;
|
||||||
private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this);
|
private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this);
|
||||||
@@ -298,6 +300,7 @@ public class MissileSquidEntity extends Monster implements GeoEntity {
|
|||||||
tag.putBoolean(LAUNCHED_FROM_SQUIDZOOKA_KEY, this.launchedFromSquidzooka);
|
tag.putBoolean(LAUNCHED_FROM_SQUIDZOOKA_KEY, this.launchedFromSquidzooka);
|
||||||
tag.putBoolean(ARMED_AFTER_LANDING_KEY, this.armedAfterLanding);
|
tag.putBoolean(ARMED_AFTER_LANDING_KEY, this.armedAfterLanding);
|
||||||
tag.putInt(ACTION_ANIM_TICKS_KEY, this.actionAnimationTicks);
|
tag.putInt(ACTION_ANIM_TICKS_KEY, this.actionAnimationTicks);
|
||||||
|
tag.putBoolean(SPAWNED_BY_KRAKEN_KEY, this.spawnedByKraken);
|
||||||
if (this.launchOwnerUuid != null) {
|
if (this.launchOwnerUuid != null) {
|
||||||
tag.putUUID(LAUNCH_OWNER_KEY, this.launchOwnerUuid);
|
tag.putUUID(LAUNCH_OWNER_KEY, this.launchOwnerUuid);
|
||||||
}
|
}
|
||||||
@@ -311,10 +314,19 @@ public class MissileSquidEntity extends Monster implements GeoEntity {
|
|||||||
this.launchedFromSquidzooka = tag.getBoolean(LAUNCHED_FROM_SQUIDZOOKA_KEY);
|
this.launchedFromSquidzooka = tag.getBoolean(LAUNCHED_FROM_SQUIDZOOKA_KEY);
|
||||||
this.armedAfterLanding = tag.getBoolean(ARMED_AFTER_LANDING_KEY);
|
this.armedAfterLanding = tag.getBoolean(ARMED_AFTER_LANDING_KEY);
|
||||||
this.actionAnimationTicks = Math.max(0, tag.getInt(ACTION_ANIM_TICKS_KEY));
|
this.actionAnimationTicks = Math.max(0, tag.getInt(ACTION_ANIM_TICKS_KEY));
|
||||||
|
this.spawnedByKraken = tag.getBoolean(SPAWNED_BY_KRAKEN_KEY);
|
||||||
this.launchOwnerUuid = tag.hasUUID(LAUNCH_OWNER_KEY) ? tag.getUUID(LAUNCH_OWNER_KEY) : null;
|
this.launchOwnerUuid = tag.hasUUID(LAUNCH_OWNER_KEY) ? tag.getUUID(LAUNCH_OWNER_KEY) : null;
|
||||||
this.updateAnimationState();
|
this.updateAnimationState();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isSpawnedByKraken() {
|
||||||
|
return this.spawnedByKraken;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSpawnedByKraken(boolean spawnedByKraken) {
|
||||||
|
this.spawnedByKraken = spawnedByKraken;
|
||||||
|
}
|
||||||
|
|
||||||
private void tickAggroMovement(LivingEntity target) {
|
private void tickAggroMovement(LivingEntity target) {
|
||||||
this.patrolTarget = null;
|
this.patrolTarget = null;
|
||||||
this.getLookControl().setLookAt(target, 30.0F, 30.0F);
|
this.getLookControl().setLookAt(target, 30.0F, 30.0F);
|
||||||
|
|||||||
@@ -0,0 +1,125 @@
|
|||||||
|
package com.craisinlord.antarchy.content.entity;
|
||||||
|
|
||||||
|
import com.craisinlord.antarchy.content.AntarchyObjects;
|
||||||
|
import com.craisinlord.antarchy.content.StinkyBehavior;
|
||||||
|
import net.minecraft.core.BlockPos;
|
||||||
|
import net.minecraft.server.level.ServerLevel;
|
||||||
|
import net.minecraft.util.RandomSource;
|
||||||
|
import net.minecraft.world.Difficulty;
|
||||||
|
import net.minecraft.world.damagesource.DamageSource;
|
||||||
|
import net.minecraft.world.effect.MobEffectInstance;
|
||||||
|
import net.minecraft.tags.EntityTypeTags;
|
||||||
|
import net.minecraft.world.entity.AgeableMob;
|
||||||
|
import net.minecraft.world.entity.EntityType;
|
||||||
|
import net.minecraft.world.entity.Mob;
|
||||||
|
import net.minecraft.world.entity.MobSpawnType;
|
||||||
|
import net.minecraft.world.entity.ai.attributes.AttributeSupplier;
|
||||||
|
import net.minecraft.world.entity.ai.attributes.Attributes;
|
||||||
|
import net.minecraft.world.entity.ai.goal.FloatGoal;
|
||||||
|
import net.minecraft.world.entity.ai.goal.LookAtPlayerGoal;
|
||||||
|
import net.minecraft.world.entity.ai.goal.RandomLookAroundGoal;
|
||||||
|
import net.minecraft.world.entity.ai.goal.WaterAvoidingRandomStrollGoal;
|
||||||
|
import net.minecraft.world.entity.animal.Animal;
|
||||||
|
import net.minecraft.world.entity.player.Player;
|
||||||
|
import net.minecraft.world.item.ItemStack;
|
||||||
|
import net.minecraft.world.level.Level;
|
||||||
|
import net.minecraft.world.level.ServerLevelAccessor;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
import software.bernie.geckolib.animatable.GeoEntity;
|
||||||
|
import software.bernie.geckolib.animatable.instance.AnimatableInstanceCache;
|
||||||
|
import software.bernie.geckolib.animation.AnimatableManager;
|
||||||
|
import software.bernie.geckolib.animation.AnimationController;
|
||||||
|
import software.bernie.geckolib.animation.AnimationState;
|
||||||
|
import software.bernie.geckolib.animation.PlayState;
|
||||||
|
import software.bernie.geckolib.animation.RawAnimation;
|
||||||
|
import software.bernie.geckolib.util.GeckoLibUtil;
|
||||||
|
|
||||||
|
public class StinkBugEntity extends Animal implements GeoEntity {
|
||||||
|
private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle");
|
||||||
|
private static final RawAnimation WALK_ANIM = RawAnimation.begin().thenLoop("walk");
|
||||||
|
private static final int STINK_BURST_PARTICLES = 32;
|
||||||
|
|
||||||
|
private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this);
|
||||||
|
|
||||||
|
public StinkBugEntity(EntityType<? extends StinkBugEntity> entityType, Level level) {
|
||||||
|
super(entityType, level);
|
||||||
|
this.xpReward = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static AttributeSupplier.Builder createAttributes() {
|
||||||
|
return Mob.createMobAttributes()
|
||||||
|
.add(Attributes.MAX_HEALTH, 6.0D)
|
||||||
|
.add(Attributes.MOVEMENT_SPEED, 0.24D)
|
||||||
|
.add(Attributes.FOLLOW_RANGE, 8.0D);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean canSpawn(EntityType<StinkBugEntity> entityType, ServerLevelAccessor level, MobSpawnType spawnReason, BlockPos pos, RandomSource random) {
|
||||||
|
if (spawnReason == MobSpawnType.SPAWN_EGG || spawnReason == MobSpawnType.SPAWNER || spawnReason == MobSpawnType.COMMAND) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return level.getDifficulty() != Difficulty.PEACEFUL
|
||||||
|
&& Animal.checkAnimalSpawnRules(entityType, level, spawnReason, pos, random);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void registerGoals() {
|
||||||
|
this.goalSelector.addGoal(0, new FloatGoal(this));
|
||||||
|
this.goalSelector.addGoal(1, new WaterAvoidingRandomStrollGoal(this, 0.9D));
|
||||||
|
this.goalSelector.addGoal(2, new LookAtPlayerGoal(this, Player.class, 6.0F));
|
||||||
|
this.goalSelector.addGoal(3, new RandomLookAroundGoal(this));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void tick() {
|
||||||
|
super.tick();
|
||||||
|
|
||||||
|
if (this.level().isClientSide || this.tickCount % 10 != 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (var target : this.level().getEntitiesOfClass(
|
||||||
|
net.minecraft.world.entity.LivingEntity.class,
|
||||||
|
this.getBoundingBox().inflate(StinkyBehavior.STINK_BUG_AURA_RADIUS),
|
||||||
|
entity -> entity != this
|
||||||
|
&& entity.isAlive()
|
||||||
|
&& !entity.getType().is(EntityTypeTags.SENSITIVE_TO_BANE_OF_ARTHROPODS)
|
||||||
|
)) {
|
||||||
|
target.addEffect(new MobEffectInstance(AntarchyObjects.STINKY_EFFECT.get(), StinkyBehavior.STINKY_EFFECT_DURATION_TICKS, 0, false, true, true));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean hurt(DamageSource source, float amount) {
|
||||||
|
boolean hurt = super.hurt(source, amount);
|
||||||
|
if (hurt) {
|
||||||
|
StinkyBehavior.emitBurst(this, STINK_BURST_PARTICLES);
|
||||||
|
}
|
||||||
|
return hurt;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isFood(ItemStack stack) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Nullable
|
||||||
|
public AgeableMob getBreedOffspring(ServerLevel level, AgeableMob otherParent) {
|
||||||
|
return AntarchyObjects.STINK_BUG.get().create(level);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void registerControllers(AnimatableManager.ControllerRegistrar controllers) {
|
||||||
|
controllers.add(new AnimationController<>(this, "main_controller", 2, this::mainAnimController));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public AnimatableInstanceCache getAnimatableInstanceCache() {
|
||||||
|
return this.geoCache;
|
||||||
|
}
|
||||||
|
|
||||||
|
private <T extends StinkBugEntity> PlayState mainAnimController(AnimationState<T> animationState) {
|
||||||
|
animationState.setAnimation(animationState.isMoving() ? WALK_ANIM : IDLE_ANIM);
|
||||||
|
return PlayState.CONTINUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -12,6 +12,8 @@ import net.minecraft.world.entity.EntityType;
|
|||||||
import net.minecraft.world.entity.LivingEntity;
|
import net.minecraft.world.entity.LivingEntity;
|
||||||
import net.minecraft.world.entity.projectile.ThrowableProjectile;
|
import net.minecraft.world.entity.projectile.ThrowableProjectile;
|
||||||
import net.minecraft.world.level.Level;
|
import net.minecraft.world.level.Level;
|
||||||
|
import net.minecraft.world.level.block.BaseFireBlock;
|
||||||
|
import net.minecraft.world.level.block.CampfireBlock;
|
||||||
import net.minecraft.world.level.block.Blocks;
|
import net.minecraft.world.level.block.Blocks;
|
||||||
import net.minecraft.world.level.block.LiquidBlock;
|
import net.minecraft.world.level.block.LiquidBlock;
|
||||||
import net.minecraft.world.level.material.Fluids;
|
import net.minecraft.world.level.material.Fluids;
|
||||||
@@ -98,21 +100,32 @@ public class WaterBombEntity extends ThrowableProjectile {
|
|||||||
living.push(knockDir.x * knockback, 0.3D, knockDir.z * knockback);
|
living.push(knockDir.x * knockback, 0.3D, knockDir.z * knockback);
|
||||||
living.hurtMarked = true;
|
living.hurtMarked = true;
|
||||||
}
|
}
|
||||||
|
living.clearFire();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onHitBlock(BlockHitResult result) {
|
protected void onHitBlock(BlockHitResult result) {
|
||||||
BlockPos hitPos = result.getBlockPos().relative(result.getDirection());
|
BlockPos blockPos = result.getBlockPos();
|
||||||
|
BlockPos hitPos = blockPos.relative(result.getDirection());
|
||||||
Level level = this.level();
|
Level level = this.level();
|
||||||
|
if (level.getBlockState(blockPos).getBlock() instanceof CampfireBlock campfire && level.getBlockState(blockPos).getValue(CampfireBlock.LIT)) {
|
||||||
|
level.setBlock(blockPos, level.getBlockState(blockPos).setValue(CampfireBlock.LIT, false), 3);
|
||||||
|
this.discard();
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (this.isHuge()) {
|
if (this.isHuge()) {
|
||||||
for (BlockPos pos : BlockPos.betweenClosed(hitPos.offset(-1, 0, -1), hitPos.offset(1, 0, 1))) {
|
for (BlockPos pos : BlockPos.betweenClosed(hitPos.offset(-1, 0, -1), hitPos.offset(1, 0, 1))) {
|
||||||
if (level.isEmptyBlock(pos)) {
|
if (level.getBlockState(pos).getBlock() instanceof BaseFireBlock) {
|
||||||
|
level.removeBlock(pos, false);
|
||||||
|
} else if (level.isEmptyBlock(pos)) {
|
||||||
level.setBlock(pos, Blocks.WATER.defaultBlockState(), 3);
|
level.setBlock(pos, Blocks.WATER.defaultBlockState(), 3);
|
||||||
level.scheduleTick(pos, Fluids.WATER, 2);
|
level.scheduleTick(pos, Fluids.WATER, 2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (level.isEmptyBlock(hitPos) && level.getBlockState(hitPos.below()).isSolid()) {
|
if (level.getBlockState(hitPos).getBlock() instanceof BaseFireBlock) {
|
||||||
|
level.removeBlock(hitPos, false);
|
||||||
|
} else if (level.isEmptyBlock(hitPos) && level.getBlockState(hitPos.below()).isSolid()) {
|
||||||
level.setBlock(hitPos, Blocks.WATER.defaultBlockState().setValue(LiquidBlock.LEVEL, 1), 3);
|
level.setBlock(hitPos, Blocks.WATER.defaultBlockState().setValue(LiquidBlock.LEVEL, 1), 3);
|
||||||
level.scheduleTick(hitPos, Fluids.WATER, 2);
|
level.scheduleTick(hitPos, Fluids.WATER, 2);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -786,6 +786,7 @@ public class KrakenEntity extends Monster implements GeoEntity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
missileSquid.setCanFly(true);
|
missileSquid.setCanFly(true);
|
||||||
|
missileSquid.setSpawnedByKraken(true);
|
||||||
missileSquid.moveTo(spawnPos.x, spawnPos.y, spawnPos.z, this.getYRot(), 0.0F);
|
missileSquid.moveTo(spawnPos.x, spawnPos.y, spawnPos.z, this.getYRot(), 0.0F);
|
||||||
serverLevel.addFreshEntity(missileSquid);
|
serverLevel.addFreshEntity(missileSquid);
|
||||||
if (launched) {
|
if (launched) {
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import com.craisinlord.antarchy.content.client.model.ResourceBackedGeoItemModel;
|
|||||||
import com.craisinlord.antarchy.content.entity.MissileSquidEntity;
|
import com.craisinlord.antarchy.content.entity.MissileSquidEntity;
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
import java.util.function.Predicate;
|
import java.util.function.Predicate;
|
||||||
|
import net.minecraft.core.component.DataComponents;
|
||||||
import net.minecraft.core.particles.ParticleTypes;
|
import net.minecraft.core.particles.ParticleTypes;
|
||||||
import net.minecraft.resources.ResourceLocation;
|
import net.minecraft.resources.ResourceLocation;
|
||||||
import net.minecraft.server.level.ServerLevel;
|
import net.minecraft.server.level.ServerLevel;
|
||||||
@@ -21,7 +22,11 @@ import net.minecraft.world.entity.projectile.Projectile;
|
|||||||
import net.minecraft.world.item.ItemStack;
|
import net.minecraft.world.item.ItemStack;
|
||||||
import net.minecraft.world.item.ProjectileWeaponItem;
|
import net.minecraft.world.item.ProjectileWeaponItem;
|
||||||
import net.minecraft.world.item.UseAnim;
|
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.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.GeoItem;
|
||||||
import software.bernie.geckolib.animatable.client.GeoRenderProvider;
|
import software.bernie.geckolib.animatable.client.GeoRenderProvider;
|
||||||
import software.bernie.geckolib.animatable.instance.AnimatableInstanceCache;
|
import software.bernie.geckolib.animatable.instance.AnimatableInstanceCache;
|
||||||
@@ -55,17 +60,10 @@ public class SquidzookaItem extends ProjectileWeaponItem implements GeoItem {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!level.isClientSide()) {
|
if (!level.isClientSide()) {
|
||||||
MissileSquidEntity projectileSquid = AntarchyObjects.MISSILE_SQUID.get().create(level);
|
fireSquid(level, player, 0.0F);
|
||||||
if (projectileSquid != null) {
|
if (hasMultishot(itemStack)) {
|
||||||
projectileSquid.moveTo(
|
fireSquid(level, player, -10.0F);
|
||||||
player.getX(),
|
fireSquid(level, player, 10.0F);
|
||||||
player.getEyeY() - 0.2D,
|
|
||||||
player.getZ(),
|
|
||||||
player.getYRot(),
|
|
||||||
player.getXRot()
|
|
||||||
);
|
|
||||||
projectileSquid.launchFromSquidzooka(player, (float) AntarchySettings.squidzookaLaunchVelocity());
|
|
||||||
level.addFreshEntity(projectileSquid);
|
|
||||||
}
|
}
|
||||||
spawnFireParticles((ServerLevel) level, player);
|
spawnFireParticles((ServerLevel) level, player);
|
||||||
itemStack.hurtAndBreak(1, player, usedHand == InteractionHand.MAIN_HAND ? EquipmentSlot.MAINHAND : EquipmentSlot.OFFHAND);
|
itemStack.hurtAndBreak(1, player, usedHand == InteractionHand.MAIN_HAND ? EquipmentSlot.MAINHAND : EquipmentSlot.OFFHAND);
|
||||||
@@ -115,6 +113,16 @@ public class SquidzookaItem extends ProjectileWeaponItem implements GeoItem {
|
|||||||
projectile.shootFromRotation(livingEntity, livingEntity.getXRot(), livingEntity.getYRot(), angle, velocity, inaccuracy);
|
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
|
@Override
|
||||||
public void registerControllers(AnimatableManager.ControllerRegistrar controllers) {
|
public void registerControllers(AnimatableManager.ControllerRegistrar controllers) {
|
||||||
controllers.add(new AnimationController<>(this, FIRE_CONTROLLER, state -> PlayState.STOP)
|
controllers.add(new AnimationController<>(this, FIRE_CONTROLLER, state -> PlayState.STOP)
|
||||||
@@ -147,6 +155,32 @@ public class SquidzookaItem extends ProjectileWeaponItem implements GeoItem {
|
|||||||
triggerAnim(livingEntity, animatableId, FIRE_CONTROLLER, FIRE_ANIMATION);
|
triggerAnim(livingEntity, animatableId, FIRE_CONTROLLER, FIRE_ANIMATION);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void fireSquid(Level level, Player player, float yawOffset) {
|
||||||
|
MissileSquidEntity projectileSquid = AntarchyObjects.MISSILE_SQUID.get().create(level);
|
||||||
|
if (projectileSquid == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
float yaw = player.getYRot() + yawOffset;
|
||||||
|
Vec3 direction = Vec3.directionFromRotation(new Vec2(player.getXRot(), yaw));
|
||||||
|
projectileSquid.moveTo(
|
||||||
|
player.getX(),
|
||||||
|
player.getEyeY() - 0.2D,
|
||||||
|
player.getZ(),
|
||||||
|
yaw,
|
||||||
|
player.getXRot()
|
||||||
|
);
|
||||||
|
projectileSquid.launchAsProjectile(player, direction.scale(AntarchySettings.squidzookaLaunchVelocity()).add(player.getDeltaMovement()));
|
||||||
|
level.addFreshEntity(projectileSquid);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static boolean hasMultishot(ItemStack stack) {
|
||||||
|
return stack.getOrDefault(DataComponents.ENCHANTMENTS, ItemEnchantments.EMPTY)
|
||||||
|
.keySet()
|
||||||
|
.stream()
|
||||||
|
.anyMatch(holder -> holder.is(Enchantments.MULTISHOT));
|
||||||
|
}
|
||||||
|
|
||||||
private static void spawnFireParticles(ServerLevel level, Player player) {
|
private static void spawnFireParticles(ServerLevel level, Player player) {
|
||||||
double lookX = player.getLookAngle().x;
|
double lookX = player.getLookAngle().x;
|
||||||
double lookY = player.getLookAngle().y;
|
double lookY = player.getLookAngle().y;
|
||||||
|
|||||||
@@ -0,0 +1,18 @@
|
|||||||
|
package com.craisinlord.antarchy.mixins;
|
||||||
|
|
||||||
|
import net.minecraft.world.entity.ai.attributes.RangedAttribute;
|
||||||
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
|
import org.spongepowered.asm.mixin.Mutable;
|
||||||
|
import org.spongepowered.asm.mixin.gen.Accessor;
|
||||||
|
|
||||||
|
@Mixin(RangedAttribute.class)
|
||||||
|
public interface AccessorRangedAttribute {
|
||||||
|
|
||||||
|
@Accessor("minValue")
|
||||||
|
@Mutable
|
||||||
|
void antarchyAttributefix$setMinValue(double minValue);
|
||||||
|
|
||||||
|
@Accessor("maxValue")
|
||||||
|
@Mutable
|
||||||
|
void antarchyAttributefix$setMaxValue(double maxValue);
|
||||||
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
package com.craisinlord.antarchy.mixins;
|
||||||
|
|
||||||
|
import com.craisinlord.antarchy.content.AntarchyObjects;
|
||||||
|
import com.craisinlord.antarchy.content.StinkyBehavior;
|
||||||
|
import net.minecraft.world.entity.LivingEntity;
|
||||||
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
|
import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||||
|
|
||||||
|
@Mixin(LivingEntity.class)
|
||||||
|
public abstract class StinkyLivingEntityMixin {
|
||||||
|
@Inject(method = "tick", at = @At("TAIL"))
|
||||||
|
private void antarchy$tickStinkyTrail(CallbackInfo ci) {
|
||||||
|
LivingEntity livingEntity = (LivingEntity) (Object) this;
|
||||||
|
if (livingEntity.hasEffect(AntarchyObjects.STINKY_EFFECT.get())) {
|
||||||
|
StinkyBehavior.tickStinkyTrail(livingEntity);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -4,17 +4,19 @@
|
|||||||
"plugin": "com.craisinlord.antarchy.mixins.AntarchyMixinPlugin",
|
"plugin": "com.craisinlord.antarchy.mixins.AntarchyMixinPlugin",
|
||||||
"compatibilityLevel": "JAVA_21",
|
"compatibilityLevel": "JAVA_21",
|
||||||
"mixins": [
|
"mixins": [
|
||||||
|
"AccessorRangedAttribute",
|
||||||
"BloodglassMixin",
|
"BloodglassMixin",
|
||||||
"DreamSandLowGravityMixin",
|
|
||||||
"DreamFireBlockMixin",
|
"DreamFireBlockMixin",
|
||||||
|
"DreamSandLowGravityMixin",
|
||||||
"FireVisualBaseFireBlockMixin",
|
"FireVisualBaseFireBlockMixin",
|
||||||
"FireVisualEntityMixin",
|
"FireVisualEntityMixin",
|
||||||
"GlowVinesUnderLeavesMixin",
|
"GlowVinesUnderLeavesMixin",
|
||||||
"multipart.EntityMultipartLifecycleMixin",
|
|
||||||
"ServerPlayerGameModeMixin",
|
"ServerPlayerGameModeMixin",
|
||||||
|
"StinkyLivingEntityMixin",
|
||||||
"TorchflowerBlockStateMixin",
|
"TorchflowerBlockStateMixin",
|
||||||
"gravity.AbstractArrowGravityMixin",
|
"gravity.AbstractArrowGravityMixin",
|
||||||
"gravity.BucketItemGravityMixin",
|
"gravity.BucketItemGravityMixin",
|
||||||
|
"gravity.ChunkMapAccessor",
|
||||||
"gravity.CrossbowItemGravityMixin",
|
"gravity.CrossbowItemGravityMixin",
|
||||||
"gravity.DirectionFacingMixin",
|
"gravity.DirectionFacingMixin",
|
||||||
"gravity.EntityCollisionContextMixin",
|
"gravity.EntityCollisionContextMixin",
|
||||||
@@ -27,31 +29,31 @@
|
|||||||
"gravity.GroundPathNavigationMixin",
|
"gravity.GroundPathNavigationMixin",
|
||||||
"gravity.LivingEntityMixin",
|
"gravity.LivingEntityMixin",
|
||||||
"gravity.MobHurtMixin",
|
"gravity.MobHurtMixin",
|
||||||
|
"gravity.PathNavigationAccessor",
|
||||||
|
"gravity.PathNavigationDebugMixin",
|
||||||
"gravity.PlayerAttackMixin",
|
"gravity.PlayerAttackMixin",
|
||||||
"gravity.PlayerGravityMixin",
|
"gravity.PlayerGravityMixin",
|
||||||
"gravity.PlayerPoseFitMixin",
|
"gravity.PlayerPoseFitMixin",
|
||||||
"gravity.PlayerSneakMixin",
|
"gravity.PlayerSneakMixin",
|
||||||
"gravity.PathNavigationDebugMixin",
|
|
||||||
"gravity.PathNavigationAccessor",
|
|
||||||
"gravity.ProjectileGravityMixin",
|
"gravity.ProjectileGravityMixin",
|
||||||
|
"gravity.ServerChunkCacheAccessor",
|
||||||
|
"gravity.ServerEntityAccessor",
|
||||||
"gravity.ServerGamePacketListenerMixin",
|
"gravity.ServerGamePacketListenerMixin",
|
||||||
"gravity.ServerPlayerGravityMixin",
|
"gravity.ServerPlayerGravityMixin",
|
||||||
"gravity.ThrowableProjectileGravityMixin",
|
"gravity.ThrowableProjectileGravityMixin",
|
||||||
"gravity.ChunkMapAccessor",
|
|
||||||
"gravity.ServerChunkCacheAccessor",
|
|
||||||
"gravity.ServerEntityAccessor",
|
|
||||||
"gravity.TrackedEntityAccessor",
|
"gravity.TrackedEntityAccessor",
|
||||||
|
"multipart.EntityMultipartLifecycleMixin",
|
||||||
"stellaris.DimensionOxygenManagerMixin"
|
"stellaris.DimensionOxygenManagerMixin"
|
||||||
],
|
],
|
||||||
"client": [
|
"client": [
|
||||||
|
"client.ElythiaSkyMixin",
|
||||||
"client.ElytraModelAccessor",
|
"client.ElytraModelAccessor",
|
||||||
"client.LightningBoltRendererMixin",
|
"client.LightningBoltRendererMixin",
|
||||||
"client.ParalyzedMouseTurnMixin",
|
"client.ParalyzedMouseTurnMixin",
|
||||||
"client.ScreenEffectRendererFireVisualMixin",
|
"client.ScreenEffectRendererFireVisualMixin",
|
||||||
"client.SplashManagerMixin",
|
"client.SplashManagerMixin",
|
||||||
"client.WolfRendererGrimMixin",
|
|
||||||
"client.ElythiaSkyMixin",
|
|
||||||
"client.ThoraxisFogMixin",
|
"client.ThoraxisFogMixin",
|
||||||
|
"client.WolfRendererGrimMixin",
|
||||||
"gravity.client.CameraGravityMixin",
|
"gravity.client.CameraGravityMixin",
|
||||||
"gravity.client.ClientPacketListenerGravityMixin",
|
"gravity.client.ClientPacketListenerGravityMixin",
|
||||||
"gravity.client.EntityRenderDispatcherGravityMixin",
|
"gravity.client.EntityRenderDispatcherGravityMixin",
|
||||||
|
|||||||
@@ -0,0 +1,611 @@
|
|||||||
|
{
|
||||||
|
"format_version": "1.8.0",
|
||||||
|
"animations": {
|
||||||
|
"idle": {
|
||||||
|
"loop": true,
|
||||||
|
"animation_length": 2.5,
|
||||||
|
"bones": {
|
||||||
|
"body": {
|
||||||
|
"position": {
|
||||||
|
"0.0": {
|
||||||
|
"post": {
|
||||||
|
"vector": [0, 0.5, 0]
|
||||||
|
},
|
||||||
|
"lerp_mode": "catmullrom"
|
||||||
|
},
|
||||||
|
"2.5": {
|
||||||
|
"post": {
|
||||||
|
"vector": [0, 0.5, 0]
|
||||||
|
},
|
||||||
|
"lerp_mode": "catmullrom"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"antenna": {
|
||||||
|
"rotation": {
|
||||||
|
"0.0": {
|
||||||
|
"post": {
|
||||||
|
"vector": [40, 0, 0]
|
||||||
|
},
|
||||||
|
"lerp_mode": "catmullrom"
|
||||||
|
},
|
||||||
|
"1.25": {
|
||||||
|
"post": {
|
||||||
|
"vector": [50, 0, 0]
|
||||||
|
},
|
||||||
|
"lerp_mode": "catmullrom"
|
||||||
|
},
|
||||||
|
"2.5": {
|
||||||
|
"post": {
|
||||||
|
"vector": [40, 0, 0]
|
||||||
|
},
|
||||||
|
"lerp_mode": "catmullrom"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"frontLeftLeg": {
|
||||||
|
"rotation": {
|
||||||
|
"0.0": {
|
||||||
|
"post": {
|
||||||
|
"vector": [0, 0, -10]
|
||||||
|
},
|
||||||
|
"lerp_mode": "catmullrom"
|
||||||
|
},
|
||||||
|
"2.5": {
|
||||||
|
"post": {
|
||||||
|
"vector": [0, 0, -10]
|
||||||
|
},
|
||||||
|
"lerp_mode": "catmullrom"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"middleLeftLeg": {
|
||||||
|
"rotation": {
|
||||||
|
"0.0": {
|
||||||
|
"post": {
|
||||||
|
"vector": [0, 0, -10]
|
||||||
|
},
|
||||||
|
"lerp_mode": "catmullrom"
|
||||||
|
},
|
||||||
|
"2.5": {
|
||||||
|
"post": {
|
||||||
|
"vector": [0, 0, -10]
|
||||||
|
},
|
||||||
|
"lerp_mode": "catmullrom"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"backLeftLeg": {
|
||||||
|
"rotation": {
|
||||||
|
"0.0": {
|
||||||
|
"post": {
|
||||||
|
"vector": [0, 0, -10]
|
||||||
|
},
|
||||||
|
"lerp_mode": "catmullrom"
|
||||||
|
},
|
||||||
|
"2.5": {
|
||||||
|
"post": {
|
||||||
|
"vector": [0, 0, -10]
|
||||||
|
},
|
||||||
|
"lerp_mode": "catmullrom"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"frontRightLeg": {
|
||||||
|
"rotation": {
|
||||||
|
"0.0": {
|
||||||
|
"post": {
|
||||||
|
"vector": [0, 0, 10]
|
||||||
|
},
|
||||||
|
"lerp_mode": "catmullrom"
|
||||||
|
},
|
||||||
|
"2.5": {
|
||||||
|
"post": {
|
||||||
|
"vector": [0, 0, 10]
|
||||||
|
},
|
||||||
|
"lerp_mode": "catmullrom"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"middleRightLeg": {
|
||||||
|
"rotation": {
|
||||||
|
"0.0": {
|
||||||
|
"post": {
|
||||||
|
"vector": [0, 0, 10]
|
||||||
|
},
|
||||||
|
"lerp_mode": "catmullrom"
|
||||||
|
},
|
||||||
|
"2.5": {
|
||||||
|
"post": {
|
||||||
|
"vector": [0, 0, 10]
|
||||||
|
},
|
||||||
|
"lerp_mode": "catmullrom"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"backRightLeg": {
|
||||||
|
"rotation": {
|
||||||
|
"0.0": {
|
||||||
|
"post": {
|
||||||
|
"vector": [0, 0, 10]
|
||||||
|
},
|
||||||
|
"lerp_mode": "catmullrom"
|
||||||
|
},
|
||||||
|
"2.5": {
|
||||||
|
"post": {
|
||||||
|
"vector": [0, 0, 10]
|
||||||
|
},
|
||||||
|
"lerp_mode": "catmullrom"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"walk": {
|
||||||
|
"loop": true,
|
||||||
|
"animation_length": 1,
|
||||||
|
"bones": {
|
||||||
|
"body": {
|
||||||
|
"rotation": {
|
||||||
|
"0.0": {
|
||||||
|
"post": {
|
||||||
|
"vector": [0, -5, 0]
|
||||||
|
},
|
||||||
|
"lerp_mode": "catmullrom"
|
||||||
|
},
|
||||||
|
"0.5": {
|
||||||
|
"post": {
|
||||||
|
"vector": [0, 5, 0]
|
||||||
|
},
|
||||||
|
"lerp_mode": "catmullrom"
|
||||||
|
},
|
||||||
|
"1.0": {
|
||||||
|
"post": {
|
||||||
|
"vector": [0, -5, 0]
|
||||||
|
},
|
||||||
|
"lerp_mode": "catmullrom"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"position": {
|
||||||
|
"0.0": {
|
||||||
|
"post": {
|
||||||
|
"vector": [0, 0.5, 0]
|
||||||
|
},
|
||||||
|
"lerp_mode": "catmullrom"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"antenna": {
|
||||||
|
"rotation": {
|
||||||
|
"0.0": {
|
||||||
|
"post": {
|
||||||
|
"vector": [40, 0, 0]
|
||||||
|
},
|
||||||
|
"lerp_mode": "catmullrom"
|
||||||
|
},
|
||||||
|
"0.25": {
|
||||||
|
"post": {
|
||||||
|
"vector": [50, 0, 0]
|
||||||
|
},
|
||||||
|
"lerp_mode": "catmullrom"
|
||||||
|
},
|
||||||
|
"0.5": {
|
||||||
|
"post": {
|
||||||
|
"vector": [40, 0, 0]
|
||||||
|
},
|
||||||
|
"lerp_mode": "catmullrom"
|
||||||
|
},
|
||||||
|
"0.75": {
|
||||||
|
"post": {
|
||||||
|
"vector": [50, 0, 0]
|
||||||
|
},
|
||||||
|
"lerp_mode": "catmullrom"
|
||||||
|
},
|
||||||
|
"1.0": {
|
||||||
|
"post": {
|
||||||
|
"vector": [40, 0, 0]
|
||||||
|
},
|
||||||
|
"lerp_mode": "catmullrom"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"frontLeftLeg": {
|
||||||
|
"rotation": {
|
||||||
|
"0.0": {
|
||||||
|
"post": {
|
||||||
|
"vector": [9.9108, -44.4038, -14.137]
|
||||||
|
},
|
||||||
|
"lerp_mode": "catmullrom"
|
||||||
|
},
|
||||||
|
"0.25": {
|
||||||
|
"post": {
|
||||||
|
"vector": [0, 0, -10]
|
||||||
|
},
|
||||||
|
"lerp_mode": "catmullrom"
|
||||||
|
},
|
||||||
|
"0.5": {
|
||||||
|
"post": {
|
||||||
|
"vector": [-9.9108, 44.4038, -14.137]
|
||||||
|
},
|
||||||
|
"lerp_mode": "catmullrom"
|
||||||
|
},
|
||||||
|
"0.75": {
|
||||||
|
"post": {
|
||||||
|
"vector": [0, 0, 18.36]
|
||||||
|
},
|
||||||
|
"lerp_mode": "catmullrom"
|
||||||
|
},
|
||||||
|
"1.0": {
|
||||||
|
"post": {
|
||||||
|
"vector": [9.9108, -44.4038, -14.137]
|
||||||
|
},
|
||||||
|
"lerp_mode": "catmullrom"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"position": {
|
||||||
|
"0.0": {
|
||||||
|
"post": {
|
||||||
|
"vector": [0.75, 0, 0]
|
||||||
|
},
|
||||||
|
"lerp_mode": "catmullrom"
|
||||||
|
},
|
||||||
|
"0.25": {
|
||||||
|
"post": {
|
||||||
|
"vector": [0, 0, 0]
|
||||||
|
},
|
||||||
|
"lerp_mode": "catmullrom"
|
||||||
|
},
|
||||||
|
"0.5": {
|
||||||
|
"post": {
|
||||||
|
"vector": [0.75, 0, 0]
|
||||||
|
},
|
||||||
|
"lerp_mode": "catmullrom"
|
||||||
|
},
|
||||||
|
"0.75": {
|
||||||
|
"post": {
|
||||||
|
"vector": [0, 0, 0]
|
||||||
|
},
|
||||||
|
"lerp_mode": "catmullrom"
|
||||||
|
},
|
||||||
|
"1.0": {
|
||||||
|
"post": {
|
||||||
|
"vector": [0.75, 0, 0]
|
||||||
|
},
|
||||||
|
"lerp_mode": "catmullrom"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"middleLeftLeg": {
|
||||||
|
"rotation": {
|
||||||
|
"0.0": {
|
||||||
|
"post": {
|
||||||
|
"vector": [0, 0, -10]
|
||||||
|
},
|
||||||
|
"lerp_mode": "catmullrom"
|
||||||
|
},
|
||||||
|
"0.25": {
|
||||||
|
"post": {
|
||||||
|
"vector": [-9.9108, 44.4038, -14.137]
|
||||||
|
},
|
||||||
|
"lerp_mode": "catmullrom"
|
||||||
|
},
|
||||||
|
"0.5": {
|
||||||
|
"post": {
|
||||||
|
"vector": [0, 0, 18.36]
|
||||||
|
},
|
||||||
|
"lerp_mode": "catmullrom"
|
||||||
|
},
|
||||||
|
"0.75": {
|
||||||
|
"post": {
|
||||||
|
"vector": [9.9108, -44.4038, -14.137]
|
||||||
|
},
|
||||||
|
"lerp_mode": "catmullrom"
|
||||||
|
},
|
||||||
|
"1.0": {
|
||||||
|
"post": {
|
||||||
|
"vector": [0, 0, -10]
|
||||||
|
},
|
||||||
|
"lerp_mode": "catmullrom"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"position": {
|
||||||
|
"0.0": {
|
||||||
|
"post": {
|
||||||
|
"vector": [0, 0, 0]
|
||||||
|
},
|
||||||
|
"lerp_mode": "catmullrom"
|
||||||
|
},
|
||||||
|
"0.25": {
|
||||||
|
"post": {
|
||||||
|
"vector": [0.75, 0, 0]
|
||||||
|
},
|
||||||
|
"lerp_mode": "catmullrom"
|
||||||
|
},
|
||||||
|
"0.5": {
|
||||||
|
"post": {
|
||||||
|
"vector": [0, 0, 0]
|
||||||
|
},
|
||||||
|
"lerp_mode": "catmullrom"
|
||||||
|
},
|
||||||
|
"0.75": {
|
||||||
|
"post": {
|
||||||
|
"vector": [0.75, 0, 0]
|
||||||
|
},
|
||||||
|
"lerp_mode": "catmullrom"
|
||||||
|
},
|
||||||
|
"1.0": {
|
||||||
|
"post": {
|
||||||
|
"vector": [0, 0, 0]
|
||||||
|
},
|
||||||
|
"lerp_mode": "catmullrom"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"backLeftLeg": {
|
||||||
|
"rotation": {
|
||||||
|
"0.0": {
|
||||||
|
"post": {
|
||||||
|
"vector": [-9.9108, 44.4038, -14.137]
|
||||||
|
},
|
||||||
|
"lerp_mode": "catmullrom"
|
||||||
|
},
|
||||||
|
"0.25": {
|
||||||
|
"post": {
|
||||||
|
"vector": [0, 0, 18.36]
|
||||||
|
},
|
||||||
|
"lerp_mode": "catmullrom"
|
||||||
|
},
|
||||||
|
"0.5": {
|
||||||
|
"post": {
|
||||||
|
"vector": [9.9108, -44.4038, -14.137]
|
||||||
|
},
|
||||||
|
"lerp_mode": "catmullrom"
|
||||||
|
},
|
||||||
|
"0.75": {
|
||||||
|
"post": {
|
||||||
|
"vector": [0, 0, -10]
|
||||||
|
},
|
||||||
|
"lerp_mode": "catmullrom"
|
||||||
|
},
|
||||||
|
"1.0": {
|
||||||
|
"post": {
|
||||||
|
"vector": [-9.9108, 44.4038, -14.137]
|
||||||
|
},
|
||||||
|
"lerp_mode": "catmullrom"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"position": {
|
||||||
|
"0.0": {
|
||||||
|
"post": {
|
||||||
|
"vector": [0.75, 0, 0]
|
||||||
|
},
|
||||||
|
"lerp_mode": "catmullrom"
|
||||||
|
},
|
||||||
|
"0.25": {
|
||||||
|
"post": {
|
||||||
|
"vector": [0, 0, 0]
|
||||||
|
},
|
||||||
|
"lerp_mode": "catmullrom"
|
||||||
|
},
|
||||||
|
"0.5": {
|
||||||
|
"post": {
|
||||||
|
"vector": [0.75, 0, 0]
|
||||||
|
},
|
||||||
|
"lerp_mode": "catmullrom"
|
||||||
|
},
|
||||||
|
"0.75": {
|
||||||
|
"post": {
|
||||||
|
"vector": [0, 0, 0]
|
||||||
|
},
|
||||||
|
"lerp_mode": "catmullrom"
|
||||||
|
},
|
||||||
|
"1.0": {
|
||||||
|
"post": {
|
||||||
|
"vector": [0.75, 0, 0]
|
||||||
|
},
|
||||||
|
"lerp_mode": "catmullrom"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"frontRightLeg": {
|
||||||
|
"rotation": {
|
||||||
|
"0.0": {
|
||||||
|
"post": {
|
||||||
|
"vector": [-9.9108, -44.4038, 14.137]
|
||||||
|
},
|
||||||
|
"lerp_mode": "catmullrom"
|
||||||
|
},
|
||||||
|
"0.25": {
|
||||||
|
"post": {
|
||||||
|
"vector": [0, 0, -18.36]
|
||||||
|
},
|
||||||
|
"lerp_mode": "catmullrom"
|
||||||
|
},
|
||||||
|
"0.5": {
|
||||||
|
"post": {
|
||||||
|
"vector": [9.9108, 44.4038, 14.137]
|
||||||
|
},
|
||||||
|
"lerp_mode": "catmullrom"
|
||||||
|
},
|
||||||
|
"0.75": {
|
||||||
|
"post": {
|
||||||
|
"vector": [0, 0, 10]
|
||||||
|
},
|
||||||
|
"lerp_mode": "catmullrom"
|
||||||
|
},
|
||||||
|
"1.0": {
|
||||||
|
"post": {
|
||||||
|
"vector": [-9.9108, -44.4038, 14.137]
|
||||||
|
},
|
||||||
|
"lerp_mode": "catmullrom"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"position": {
|
||||||
|
"0.0": {
|
||||||
|
"post": {
|
||||||
|
"vector": [-0.75, 0, 0]
|
||||||
|
},
|
||||||
|
"lerp_mode": "catmullrom"
|
||||||
|
},
|
||||||
|
"0.25": {
|
||||||
|
"post": {
|
||||||
|
"vector": [0, 0, 0]
|
||||||
|
},
|
||||||
|
"lerp_mode": "catmullrom"
|
||||||
|
},
|
||||||
|
"0.5": {
|
||||||
|
"post": {
|
||||||
|
"vector": [-0.75, 0, 0]
|
||||||
|
},
|
||||||
|
"lerp_mode": "catmullrom"
|
||||||
|
},
|
||||||
|
"0.75": {
|
||||||
|
"post": {
|
||||||
|
"vector": [0, 0, 0]
|
||||||
|
},
|
||||||
|
"lerp_mode": "catmullrom"
|
||||||
|
},
|
||||||
|
"1.0": {
|
||||||
|
"post": {
|
||||||
|
"vector": [-0.75, 0, 0]
|
||||||
|
},
|
||||||
|
"lerp_mode": "catmullrom"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"middleRightLeg": {
|
||||||
|
"rotation": {
|
||||||
|
"0.0": {
|
||||||
|
"post": {
|
||||||
|
"vector": [0, 0, -18.36]
|
||||||
|
},
|
||||||
|
"lerp_mode": "catmullrom"
|
||||||
|
},
|
||||||
|
"0.25": {
|
||||||
|
"post": {
|
||||||
|
"vector": [9.9108, 44.4038, 14.137]
|
||||||
|
},
|
||||||
|
"lerp_mode": "catmullrom"
|
||||||
|
},
|
||||||
|
"0.5": {
|
||||||
|
"post": {
|
||||||
|
"vector": [0, 0, 10]
|
||||||
|
},
|
||||||
|
"lerp_mode": "catmullrom"
|
||||||
|
},
|
||||||
|
"0.75": {
|
||||||
|
"post": {
|
||||||
|
"vector": [-9.9108, -44.4038, 14.137]
|
||||||
|
},
|
||||||
|
"lerp_mode": "catmullrom"
|
||||||
|
},
|
||||||
|
"1.0": {
|
||||||
|
"post": {
|
||||||
|
"vector": [0, 0, -18.36]
|
||||||
|
},
|
||||||
|
"lerp_mode": "catmullrom"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"position": {
|
||||||
|
"0.0": {
|
||||||
|
"post": {
|
||||||
|
"vector": [0, 0, 0]
|
||||||
|
},
|
||||||
|
"lerp_mode": "catmullrom"
|
||||||
|
},
|
||||||
|
"0.25": {
|
||||||
|
"post": {
|
||||||
|
"vector": [-0.75, 0, 0]
|
||||||
|
},
|
||||||
|
"lerp_mode": "catmullrom"
|
||||||
|
},
|
||||||
|
"0.5": {
|
||||||
|
"post": {
|
||||||
|
"vector": [0, 0, 0]
|
||||||
|
},
|
||||||
|
"lerp_mode": "catmullrom"
|
||||||
|
},
|
||||||
|
"0.75": {
|
||||||
|
"post": {
|
||||||
|
"vector": [-0.75, 0, 0]
|
||||||
|
},
|
||||||
|
"lerp_mode": "catmullrom"
|
||||||
|
},
|
||||||
|
"1.0": {
|
||||||
|
"post": {
|
||||||
|
"vector": [0, 0, 0]
|
||||||
|
},
|
||||||
|
"lerp_mode": "catmullrom"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"backRightLeg": {
|
||||||
|
"rotation": {
|
||||||
|
"0.0": {
|
||||||
|
"post": {
|
||||||
|
"vector": [9.9108, 44.4038, 14.137]
|
||||||
|
},
|
||||||
|
"lerp_mode": "catmullrom"
|
||||||
|
},
|
||||||
|
"0.25": {
|
||||||
|
"post": {
|
||||||
|
"vector": [0, 0, 10]
|
||||||
|
},
|
||||||
|
"lerp_mode": "catmullrom"
|
||||||
|
},
|
||||||
|
"0.5": {
|
||||||
|
"post": {
|
||||||
|
"vector": [-9.9108, -44.4038, 14.137]
|
||||||
|
},
|
||||||
|
"lerp_mode": "catmullrom"
|
||||||
|
},
|
||||||
|
"0.75": {
|
||||||
|
"post": {
|
||||||
|
"vector": [0, 0, -18.36]
|
||||||
|
},
|
||||||
|
"lerp_mode": "catmullrom"
|
||||||
|
},
|
||||||
|
"1.0": {
|
||||||
|
"post": {
|
||||||
|
"vector": [9.9108, 44.4038, 14.137]
|
||||||
|
},
|
||||||
|
"lerp_mode": "catmullrom"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"position": {
|
||||||
|
"0.0": {
|
||||||
|
"post": {
|
||||||
|
"vector": [-0.75, 0, 0]
|
||||||
|
},
|
||||||
|
"lerp_mode": "catmullrom"
|
||||||
|
},
|
||||||
|
"0.25": {
|
||||||
|
"post": {
|
||||||
|
"vector": [0, 0, 0]
|
||||||
|
},
|
||||||
|
"lerp_mode": "catmullrom"
|
||||||
|
},
|
||||||
|
"0.5": {
|
||||||
|
"post": {
|
||||||
|
"vector": [-0.75, 0, 0]
|
||||||
|
},
|
||||||
|
"lerp_mode": "catmullrom"
|
||||||
|
},
|
||||||
|
"0.75": {
|
||||||
|
"post": {
|
||||||
|
"vector": [0, 0, 0]
|
||||||
|
},
|
||||||
|
"lerp_mode": "catmullrom"
|
||||||
|
},
|
||||||
|
"1.0": {
|
||||||
|
"post": {
|
||||||
|
"vector": [-0.75, 0, 0]
|
||||||
|
},
|
||||||
|
"lerp_mode": "catmullrom"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,150 @@
|
|||||||
|
{
|
||||||
|
"multipart": [
|
||||||
|
{
|
||||||
|
"apply": {
|
||||||
|
"model": "antarchy:block/amber_lichen"
|
||||||
|
},
|
||||||
|
"when": {
|
||||||
|
"north": "true"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"apply": {
|
||||||
|
"model": "antarchy:block/amber_lichen"
|
||||||
|
},
|
||||||
|
"when": {
|
||||||
|
"down": "false",
|
||||||
|
"east": "false",
|
||||||
|
"north": "false",
|
||||||
|
"south": "false",
|
||||||
|
"up": "false",
|
||||||
|
"west": "false"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"apply": {
|
||||||
|
"model": "antarchy:block/amber_lichen",
|
||||||
|
"uvlock": true,
|
||||||
|
"y": 90
|
||||||
|
},
|
||||||
|
"when": {
|
||||||
|
"east": "true"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"apply": {
|
||||||
|
"model": "antarchy:block/amber_lichen",
|
||||||
|
"uvlock": true,
|
||||||
|
"y": 90
|
||||||
|
},
|
||||||
|
"when": {
|
||||||
|
"down": "false",
|
||||||
|
"east": "false",
|
||||||
|
"north": "false",
|
||||||
|
"south": "false",
|
||||||
|
"up": "false",
|
||||||
|
"west": "false"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"apply": {
|
||||||
|
"model": "antarchy:block/amber_lichen",
|
||||||
|
"uvlock": true,
|
||||||
|
"y": 180
|
||||||
|
},
|
||||||
|
"when": {
|
||||||
|
"south": "true"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"apply": {
|
||||||
|
"model": "antarchy:block/amber_lichen",
|
||||||
|
"uvlock": true,
|
||||||
|
"y": 180
|
||||||
|
},
|
||||||
|
"when": {
|
||||||
|
"down": "false",
|
||||||
|
"east": "false",
|
||||||
|
"north": "false",
|
||||||
|
"south": "false",
|
||||||
|
"up": "false",
|
||||||
|
"west": "false"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"apply": {
|
||||||
|
"model": "antarchy:block/amber_lichen",
|
||||||
|
"uvlock": true,
|
||||||
|
"y": 270
|
||||||
|
},
|
||||||
|
"when": {
|
||||||
|
"west": "true"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"apply": {
|
||||||
|
"model": "antarchy:block/amber_lichen",
|
||||||
|
"uvlock": true,
|
||||||
|
"y": 270
|
||||||
|
},
|
||||||
|
"when": {
|
||||||
|
"down": "false",
|
||||||
|
"east": "false",
|
||||||
|
"north": "false",
|
||||||
|
"south": "false",
|
||||||
|
"up": "false",
|
||||||
|
"west": "false"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"apply": {
|
||||||
|
"model": "antarchy:block/amber_lichen",
|
||||||
|
"uvlock": true,
|
||||||
|
"x": 270
|
||||||
|
},
|
||||||
|
"when": {
|
||||||
|
"up": "true"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"apply": {
|
||||||
|
"model": "antarchy:block/amber_lichen",
|
||||||
|
"uvlock": true,
|
||||||
|
"x": 270
|
||||||
|
},
|
||||||
|
"when": {
|
||||||
|
"down": "false",
|
||||||
|
"east": "false",
|
||||||
|
"north": "false",
|
||||||
|
"south": "false",
|
||||||
|
"up": "false",
|
||||||
|
"west": "false"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"apply": {
|
||||||
|
"model": "antarchy:block/amber_lichen",
|
||||||
|
"uvlock": true,
|
||||||
|
"x": 90
|
||||||
|
},
|
||||||
|
"when": {
|
||||||
|
"down": "true"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"apply": {
|
||||||
|
"model": "antarchy:block/amber_lichen",
|
||||||
|
"uvlock": true,
|
||||||
|
"x": 90
|
||||||
|
},
|
||||||
|
"when": {
|
||||||
|
"down": "false",
|
||||||
|
"east": "false",
|
||||||
|
"north": "false",
|
||||||
|
"south": "false",
|
||||||
|
"up": "false",
|
||||||
|
"west": "false"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
"variants": {
|
||||||
|
"": {
|
||||||
|
"model": "antarchy:block/amber_moss_block"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,154 @@
|
|||||||
|
{
|
||||||
|
"multipart": [
|
||||||
|
{
|
||||||
|
"apply": {
|
||||||
|
"model": "antarchy:block/amber_moss_carpet"
|
||||||
|
},
|
||||||
|
"when": {
|
||||||
|
"bottom": "true"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"apply": {
|
||||||
|
"model": "antarchy:block/amber_moss_carpet"
|
||||||
|
},
|
||||||
|
"when": {
|
||||||
|
"bottom": "false",
|
||||||
|
"east": "none",
|
||||||
|
"north": "none",
|
||||||
|
"south": "none",
|
||||||
|
"west": "none"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"apply": {
|
||||||
|
"model": "antarchy:block/amber_moss_carpet_side_tall"
|
||||||
|
},
|
||||||
|
"when": {
|
||||||
|
"north": "tall"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"apply": {
|
||||||
|
"model": "antarchy:block/amber_moss_carpet_side_small"
|
||||||
|
},
|
||||||
|
"when": {
|
||||||
|
"north": "low"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"apply": {
|
||||||
|
"model": "antarchy:block/amber_moss_carpet_side_tall"
|
||||||
|
},
|
||||||
|
"when": {
|
||||||
|
"bottom": "false",
|
||||||
|
"east": "none",
|
||||||
|
"north": "none",
|
||||||
|
"south": "none",
|
||||||
|
"west": "none"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"apply": {
|
||||||
|
"model": "antarchy:block/amber_moss_carpet_side_tall",
|
||||||
|
"uvlock": true,
|
||||||
|
"y": 90
|
||||||
|
},
|
||||||
|
"when": {
|
||||||
|
"east": "tall"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"apply": {
|
||||||
|
"model": "antarchy:block/amber_moss_carpet_side_small",
|
||||||
|
"uvlock": true,
|
||||||
|
"y": 90
|
||||||
|
},
|
||||||
|
"when": {
|
||||||
|
"east": "low"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"apply": {
|
||||||
|
"model": "antarchy:block/amber_moss_carpet_side_tall",
|
||||||
|
"uvlock": true,
|
||||||
|
"y": 90
|
||||||
|
},
|
||||||
|
"when": {
|
||||||
|
"bottom": "false",
|
||||||
|
"east": "none",
|
||||||
|
"north": "none",
|
||||||
|
"south": "none",
|
||||||
|
"west": "none"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"apply": {
|
||||||
|
"model": "antarchy:block/amber_moss_carpet_side_tall",
|
||||||
|
"uvlock": true,
|
||||||
|
"y": 180
|
||||||
|
},
|
||||||
|
"when": {
|
||||||
|
"south": "tall"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"apply": {
|
||||||
|
"model": "antarchy:block/amber_moss_carpet_side_small",
|
||||||
|
"uvlock": true,
|
||||||
|
"y": 180
|
||||||
|
},
|
||||||
|
"when": {
|
||||||
|
"south": "low"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"apply": {
|
||||||
|
"model": "antarchy:block/amber_moss_carpet_side_tall",
|
||||||
|
"uvlock": true,
|
||||||
|
"y": 180
|
||||||
|
},
|
||||||
|
"when": {
|
||||||
|
"bottom": "false",
|
||||||
|
"east": "none",
|
||||||
|
"north": "none",
|
||||||
|
"south": "none",
|
||||||
|
"west": "none"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"apply": {
|
||||||
|
"model": "antarchy:block/amber_moss_carpet_side_tall",
|
||||||
|
"uvlock": true,
|
||||||
|
"y": 270
|
||||||
|
},
|
||||||
|
"when": {
|
||||||
|
"west": "tall"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"apply": {
|
||||||
|
"model": "antarchy:block/amber_moss_carpet_side_small",
|
||||||
|
"uvlock": true,
|
||||||
|
"y": 270
|
||||||
|
},
|
||||||
|
"when": {
|
||||||
|
"west": "low"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"apply": {
|
||||||
|
"model": "antarchy:block/amber_moss_carpet_side_tall",
|
||||||
|
"uvlock": true,
|
||||||
|
"y": 270
|
||||||
|
},
|
||||||
|
"when": {
|
||||||
|
"bottom": "false",
|
||||||
|
"east": "none",
|
||||||
|
"north": "none",
|
||||||
|
"south": "none",
|
||||||
|
"west": "none"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
{
|
||||||
|
"variants": {
|
||||||
|
"axis=x": {
|
||||||
|
"model": "antarchy:block/chiten_block",
|
||||||
|
"x": 90,
|
||||||
|
"y": 90
|
||||||
|
},
|
||||||
|
"axis=y": {
|
||||||
|
"model": "antarchy:block/chiten_block"
|
||||||
|
},
|
||||||
|
"axis=z": {
|
||||||
|
"model": "antarchy:block/chiten_block",
|
||||||
|
"x": 90
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,120 @@
|
|||||||
|
{
|
||||||
|
"multipart": [
|
||||||
|
{
|
||||||
|
"apply": {
|
||||||
|
"model": "antarchy:block/creepvine"
|
||||||
|
},
|
||||||
|
"when": {
|
||||||
|
"north": "true"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"apply": {
|
||||||
|
"model": "antarchy:block/creepvine"
|
||||||
|
},
|
||||||
|
"when": {
|
||||||
|
"east": "false",
|
||||||
|
"north": "false",
|
||||||
|
"south": "false",
|
||||||
|
"up": "false",
|
||||||
|
"west": "false"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"apply": {
|
||||||
|
"model": "antarchy:block/creepvine",
|
||||||
|
"uvlock": true,
|
||||||
|
"y": 90
|
||||||
|
},
|
||||||
|
"when": {
|
||||||
|
"east": "true"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"apply": {
|
||||||
|
"model": "antarchy:block/creepvine",
|
||||||
|
"uvlock": true,
|
||||||
|
"y": 90
|
||||||
|
},
|
||||||
|
"when": {
|
||||||
|
"east": "false",
|
||||||
|
"north": "false",
|
||||||
|
"south": "false",
|
||||||
|
"up": "false",
|
||||||
|
"west": "false"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"apply": {
|
||||||
|
"model": "antarchy:block/creepvine",
|
||||||
|
"uvlock": true,
|
||||||
|
"y": 180
|
||||||
|
},
|
||||||
|
"when": {
|
||||||
|
"south": "true"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"apply": {
|
||||||
|
"model": "antarchy:block/creepvine",
|
||||||
|
"uvlock": true,
|
||||||
|
"y": 180
|
||||||
|
},
|
||||||
|
"when": {
|
||||||
|
"east": "false",
|
||||||
|
"north": "false",
|
||||||
|
"south": "false",
|
||||||
|
"up": "false",
|
||||||
|
"west": "false"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"apply": {
|
||||||
|
"model": "antarchy:block/creepvine",
|
||||||
|
"uvlock": true,
|
||||||
|
"y": 270
|
||||||
|
},
|
||||||
|
"when": {
|
||||||
|
"west": "true"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"apply": {
|
||||||
|
"model": "antarchy:block/creepvine",
|
||||||
|
"uvlock": true,
|
||||||
|
"y": 270
|
||||||
|
},
|
||||||
|
"when": {
|
||||||
|
"east": "false",
|
||||||
|
"north": "false",
|
||||||
|
"south": "false",
|
||||||
|
"up": "false",
|
||||||
|
"west": "false"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"apply": {
|
||||||
|
"model": "antarchy:block/creepvine",
|
||||||
|
"uvlock": true,
|
||||||
|
"x": 270
|
||||||
|
},
|
||||||
|
"when": {
|
||||||
|
"up": "true"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"apply": {
|
||||||
|
"model": "antarchy:block/creepvine",
|
||||||
|
"uvlock": true,
|
||||||
|
"x": 270
|
||||||
|
},
|
||||||
|
"when": {
|
||||||
|
"east": "false",
|
||||||
|
"north": "false",
|
||||||
|
"south": "false",
|
||||||
|
"up": "false",
|
||||||
|
"west": "false"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
"variants": {
|
||||||
|
"": {
|
||||||
|
"model": "antarchy:block/myrmite"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -4,312 +4,491 @@
|
|||||||
{
|
{
|
||||||
"description": {
|
"description": {
|
||||||
"identifier": "geometry.unknown",
|
"identifier": "geometry.unknown",
|
||||||
"texture_width": 256,
|
"texture_width": 1024,
|
||||||
"texture_height": 256,
|
"texture_height": 1024,
|
||||||
"visible_bounds_width": 8,
|
"visible_bounds_width": 15,
|
||||||
"visible_bounds_height": 7,
|
"visible_bounds_height": 34,
|
||||||
"visible_bounds_offset": [0, 1.5, 0]
|
"visible_bounds_offset": [0, 0, 0]
|
||||||
},
|
},
|
||||||
"bones": [
|
"bones": [
|
||||||
{
|
{
|
||||||
"name": "bone",
|
"name": "Kraken",
|
||||||
"pivot": [0, 46.50635, 20.87778]
|
"pivot": [0, 51, -8]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "head",
|
"name": "head",
|
||||||
"parent": "bone",
|
"parent": "Kraken",
|
||||||
"pivot": [0, 48.23333, 11.63333],
|
"pivot": [0, 51, -8],
|
||||||
"cubes": [
|
"cubes": [
|
||||||
{"origin": [-9, 48, -3], "size": [5, 5, 6], "uv": [20, 103]},
|
{"origin": [-46.5, 57, -57], "size": [93, 32, 32], "uv": [286, 184]},
|
||||||
{"origin": [-7, 39, -5], "size": [14, 8, 17], "uv": [54, 49]},
|
{"origin": [-33, 51, -49], "size": [66, 35, 77], "uv": [0, 184]}
|
||||||
{"origin": [-8, 47, -2], "size": [16, 8, 14], "uv": [96, 0]},
|
|
||||||
{"origin": [-7, 55, -1], "size": [14, 2, 11], "uv": [0, 90]},
|
|
||||||
{"origin": [-9, 47, -3], "size": [5, 2, 6], "inflate": 0.1, "uv": [112, 93]},
|
|
||||||
{"origin": [-9, 52, -3], "size": [5, 2, 6], "inflate": 0.1, "uv": [116, 49]},
|
|
||||||
{"origin": [4, 47, -3], "size": [5, 2, 6], "inflate": 0.1, "uv": [112, 93], "mirror": true},
|
|
||||||
{"origin": [4, 48, -3], "size": [5, 5, 6], "uv": [20, 103], "mirror": true},
|
|
||||||
{"origin": [4, 52, -3], "size": [5, 2, 6], "inflate": 0.1, "uv": [116, 49], "mirror": true},
|
|
||||||
{"origin": [-5.5, 35, -8], "size": [11, 5, 6], "uv": [96, 38]},
|
|
||||||
{"origin": [-4.5, 40, -7], "size": [9, 9, 2], "uv": [112, 74]},
|
|
||||||
{"origin": [-4.5, 47, -5], "size": [9, 5, 3], "uv": [112, 85]}
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "mouth",
|
"name": "mouth",
|
||||||
"parent": "head",
|
"parent": "head",
|
||||||
"pivot": [0, 35.1, -6],
|
"pivot": [0, 51, -23.9],
|
||||||
"cubes": [
|
"cubes": [
|
||||||
{"origin": [-5, 30, -8], "size": [0, 5, 4], "uv": [42, 103]},
|
{"origin": [-6.5, 20, -44.4], "size": [13, 33, 24], "uv": [169, 296]}
|
||||||
{"origin": [-3, 30, -8], "size": [0, 5, 4], "uv": [42, 103]},
|
|
||||||
{"origin": [3, 30, -8], "size": [0, 5, 4], "uv": [42, 103]},
|
|
||||||
{"origin": [-1, 30, -8], "size": [0, 5, 4], "uv": [42, 103]},
|
|
||||||
{"origin": [1, 30, -8], "size": [0, 5, 4], "uv": [42, 103]},
|
|
||||||
{"origin": [5, 30, -8], "size": [0, 5, 4], "uv": [42, 103]}
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "cranium",
|
"name": "jaw",
|
||||||
|
"parent": "mouth",
|
||||||
|
"pivot": [0, 51, -22.4],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [-6.5, 22, -22.4], "size": [13, 31, 16], "inflate": -0.1, "uv": [340, 0]},
|
||||||
|
{"origin": [-5.5, 22, -29.65], "size": [0, 31, 8], "inflate": -0.1, "uv": [323, -6]},
|
||||||
|
{"origin": [5.5, 22, -29.65], "size": [0, 31, 8], "inflate": -0.1, "uv": [323, -6], "mirror": true}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "head_top",
|
||||||
"parent": "head",
|
"parent": "head",
|
||||||
"pivot": [0, 47.5, 12],
|
"pivot": [0, 79.25, -6.25],
|
||||||
"cubes": [
|
"cubes": [
|
||||||
{"origin": [-10, 38, 8], "size": [20, 21, 28], "pivot": [0, 47.5, 12], "rotation": [15, 0, 0], "uv": [0, 0]},
|
{"origin": [-42.5, 79, -49], "size": [85, 99, 85], "uv": [0, 0]},
|
||||||
{"origin": [-12, 40, 10], "size": [2, 16, 25], "pivot": [-2, 47.5, 12], "rotation": [15, 0, 0], "uv": [0, 49]},
|
{"origin": [5.5, 79, 13], "size": [103, 172, 0], "uv": [399, 0]},
|
||||||
{"origin": [10, 40, 10], "size": [2, 16, 25], "pivot": [2, 47.5, 12], "rotation": [15, 0, 0], "uv": [0, 49], "mirror": true}
|
{"origin": [-108.5, 79, 13], "size": [103, 172, 0], "uv": [399, 0], "mirror": true},
|
||||||
|
{"origin": [-24, 172, -30], "size": [48, 48, 48], "uv": [286, 248]}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "cranium_2",
|
"name": "right_eye",
|
||||||
"parent": "cranium",
|
"parent": "head",
|
||||||
"pivot": [0, 53.55, 32.5],
|
"pivot": [-53, 73, -41],
|
||||||
"cubes": [
|
"cubes": [
|
||||||
{"origin": [-9, 46, 32], "size": [18, 16, 11], "uv": [54, 74]}
|
{"origin": [-59.5, 58, -56], "size": [13, 30, 30], "uv": [0, 296]}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "cranium_3",
|
"name": "left_eye",
|
||||||
"parent": "cranium_2",
|
"parent": "head",
|
||||||
"pivot": [0, 49.1, 41.5],
|
"pivot": [53, 73, -41],
|
||||||
"cubes": [
|
"cubes": [
|
||||||
{"origin": [-5, 44.6, 40], "size": [10, 9, 7], "pivot": [0, 49.1, 43.5], "rotation": [-22.5, 0, 0], "uv": [96, 22]}
|
{"origin": [46.5, 58, -56], "size": [13, 30, 30], "uv": [0, 296], "mirror": true}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Tentacles",
|
"name": "l_shoulder",
|
||||||
"parent": "bone",
|
"parent": "head",
|
||||||
"pivot": [0, 45.64286, 8.5]
|
"pivot": [31.1875, 61.375, -12.5],
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Tentacles_Left",
|
|
||||||
"parent": "Tentacles",
|
|
||||||
"pivot": [6.78571, 45.64286, 25.5]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Tentacle_1_Left",
|
|
||||||
"parent": "Tentacles_Left",
|
|
||||||
"pivot": [6.78571, 38.64286, 1.5],
|
|
||||||
"cubes": [
|
"cubes": [
|
||||||
{"origin": [4, 16, -2], "size": [5, 23, 7], "uv": [74, 101]},
|
{"origin": [25, 14, -29], "size": [17, 47, 33], "uv": [0, 356]}
|
||||||
{"origin": [4.5, 11, -1.5], "size": [4, 5, 6], "uv": [98, 114]}
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Tentacle_part_1_left",
|
"name": "l_arm",
|
||||||
"parent": "Tentacle_1_Left",
|
"parent": "l_shoulder",
|
||||||
"pivot": [6.9, 11, 1.5],
|
"pivot": [30.85714, 13.92857, -12.5],
|
||||||
"cubes": [
|
"cubes": [
|
||||||
{"origin": [4, -14, -2], "size": [5, 25, 7], "uv": [50, 101]},
|
{"origin": [25, -34, -26], "size": [14, 48, 27], "uv": [86, 296]}
|
||||||
{"origin": [4.5, -19, -1.5], "size": [4, 5, 6], "uv": [20, 114]}
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Tentacle_hand_1_left",
|
"name": "l_arm2",
|
||||||
"parent": "Tentacle_part_1_left",
|
"parent": "l_arm",
|
||||||
"pivot": [5, -21, -1],
|
"pivot": [30.66667, -34.00833, -12.5],
|
||||||
"cubes": [
|
"cubes": [
|
||||||
{"origin": [4, -25, -2], "size": [5, 6, 7], "uv": [98, 101]},
|
{"origin": [25, -82, -23], "size": [14, 48, 21], "uv": [100, 371]}
|
||||||
{"origin": [6, -33, -2], "size": [3, 8, 7], "uv": [0, 103]},
|
|
||||||
{"origin": [6, -34, -1], "size": [3, 1, 5], "uv": [116, 57]}
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Tentacle_1_Left2",
|
"name": "l_arm3",
|
||||||
"parent": "Tentacles_Left",
|
"parent": "l_arm2",
|
||||||
"pivot": [6.78571, 39.64286, 9.5],
|
"pivot": [30.4, -82, -12.5],
|
||||||
"cubes": [
|
"cubes": [
|
||||||
{"origin": [4, 17, 6], "size": [5, 23, 7], "uv": [74, 101]},
|
{"origin": [25, -130, -23], "size": [14, 48, 21], "uv": [170, 371]}
|
||||||
{"origin": [4.5, 12, 6.5], "size": [4, 5, 6], "uv": [98, 114]}
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Tentacle_part_1_left2",
|
"name": "l_arm4",
|
||||||
"parent": "Tentacle_1_Left2",
|
"parent": "l_arm3",
|
||||||
"pivot": [6.9, 12, 9.5],
|
"pivot": [30, -129.975, -12.5],
|
||||||
"cubes": [
|
"cubes": [
|
||||||
{"origin": [4, -13, 6], "size": [5, 25, 7], "uv": [50, 101]},
|
{"origin": [25, -178, -21], "size": [12, 48, 17], "uv": [243, 330]}
|
||||||
{"origin": [4.5, -18, 6.5], "size": [4, 5, 6], "uv": [20, 114]}
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Tentacle_hand_1_left2",
|
"name": "l_hand",
|
||||||
"parent": "Tentacle_part_1_left2",
|
"parent": "l_arm4",
|
||||||
"pivot": [5, -20, 7],
|
"pivot": [29.66667, -177.99167, -12.5],
|
||||||
"cubes": [
|
"cubes": [
|
||||||
{"origin": [4, -24, 6], "size": [5, 6, 7], "uv": [98, 101]},
|
{"origin": [25, -203, -19], "size": [9, 25, 13], "uv": [242, 398]}
|
||||||
{"origin": [6, -32, 6], "size": [3, 8, 7], "uv": [0, 103]},
|
|
||||||
{"origin": [6, -33, 7], "size": [3, 1, 5], "uv": [116, 57]}
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Tentacle_1_Left3",
|
"name": "l_hand2",
|
||||||
"parent": "Tentacles_Left",
|
"parent": "l_hand",
|
||||||
"pivot": [6.78571, 41.64286, 17.5],
|
"pivot": [29.75, -203, -12.5],
|
||||||
"cubes": [
|
"cubes": [
|
||||||
{"origin": [4, 19, 14], "size": [5, 23, 7], "uv": [74, 101]},
|
{"origin": [25, -244, -33], "size": [11, 41, 41], "uv": [310, 409]}
|
||||||
{"origin": [4.5, 14, 14.5], "size": [4, 5, 6], "uv": [98, 114]}
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Tentacle_part_1_left3",
|
"name": "l_hand_tip",
|
||||||
"parent": "Tentacle_1_Left3",
|
"parent": "l_hand2",
|
||||||
"pivot": [6.9, 14, 17.5],
|
"pivot": [29, -244, -12.5],
|
||||||
"cubes": [
|
"cubes": [
|
||||||
{"origin": [4, -11, 14], "size": [5, 25, 7], "uv": [50, 101]},
|
{"origin": [25, -265, -26], "size": [8, 21, 27], "uv": [172, 468]}
|
||||||
{"origin": [4.5, -16, 14.5], "size": [4, 5, 6], "uv": [20, 114]}
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Tentacle_hand_1_left3",
|
"name": "center_tentacule",
|
||||||
"parent": "Tentacle_part_1_left3",
|
"parent": "head",
|
||||||
"pivot": [5, -18, 15],
|
"pivot": [0, 58.375, -52.5],
|
||||||
|
"rotation": [0, 90, 0],
|
||||||
"cubes": [
|
"cubes": [
|
||||||
{"origin": [4, -22, 14], "size": [5, 6, 7], "uv": [98, 101]},
|
{"origin": [-6.1875, 11, -69], "size": [17, 47, 33], "uv": [0, 436]}
|
||||||
{"origin": [6, -30, 14], "size": [3, 8, 7], "uv": [0, 103]},
|
|
||||||
{"origin": [6, -31, 15], "size": [3, 1, 5], "uv": [116, 57]}
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Tentacle_1_Left4",
|
"name": "center_tentacule2",
|
||||||
"parent": "Tentacles_Left",
|
"parent": "center_tentacule",
|
||||||
"pivot": [6.78571, 43.64286, 25.5],
|
"pivot": [1.48214, 10.92857, -52.5],
|
||||||
"cubes": [
|
"cubes": [
|
||||||
{"origin": [4, 21, 22], "size": [5, 23, 7], "uv": [74, 101]},
|
{"origin": [-6.1875, -37, -66], "size": [14, 48, 27], "uv": [86, 296]}
|
||||||
{"origin": [4.5, 16, 22.5], "size": [4, 5, 6], "uv": [98, 114]}
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Tentacle_part_1_left4",
|
"name": "center_tentacule3",
|
||||||
"parent": "Tentacle_1_Left4",
|
"parent": "center_tentacule2",
|
||||||
"pivot": [6.9, 16, 25.5],
|
"pivot": [1.29167, -37.00833, -52.5],
|
||||||
"cubes": [
|
"cubes": [
|
||||||
{"origin": [4, -9, 22], "size": [5, 25, 7], "uv": [50, 101]},
|
{"origin": [-6.1875, -85, -63], "size": [14, 48, 21], "uv": [100, 371]}
|
||||||
{"origin": [4.5, -14, 22.5], "size": [4, 5, 6], "uv": [20, 114]}
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Tentacle_hand_1_left4",
|
"name": "center_tentacule4",
|
||||||
"parent": "Tentacle_part_1_left4",
|
"parent": "center_tentacule3",
|
||||||
"pivot": [5, -16, 23],
|
"pivot": [1.025, -85, -52.5],
|
||||||
"cubes": [
|
"cubes": [
|
||||||
{"origin": [4, -20, 22], "size": [5, 6, 7], "uv": [98, 101]},
|
{"origin": [-6.1875, -133, -63], "size": [14, 48, 21], "uv": [170, 371]}
|
||||||
{"origin": [6, -28, 22], "size": [3, 8, 7], "uv": [0, 103]},
|
|
||||||
{"origin": [6, -29, 23], "size": [3, 1, 5], "uv": [116, 57]}
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Tentacles_Right",
|
"name": "center_tentacule5",
|
||||||
"parent": "Tentacles",
|
"parent": "center_tentacule4",
|
||||||
"pivot": [-6.78571, 45.64286, 25.5]
|
"pivot": [-0.375, -132.975, -52.5],
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Tentacle_1_Right",
|
|
||||||
"parent": "Tentacles_Right",
|
|
||||||
"pivot": [-6.78571, 38.64286, 1.5],
|
|
||||||
"cubes": [
|
"cubes": [
|
||||||
{"origin": [-9, 16, -2], "size": [5, 23, 7], "uv": [74, 101], "mirror": true},
|
{"origin": [-6.1875, -181, -61], "size": [12, 48, 17], "uv": [243, 330]}
|
||||||
{"origin": [-8.5, 11, -1.5], "size": [4, 5, 6], "uv": [98, 114], "mirror": true}
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Tentacle_part_1_right",
|
"name": "center_tentacule6",
|
||||||
"parent": "Tentacle_1_Right",
|
"parent": "center_tentacule5",
|
||||||
"pivot": [-6.9, 11, 1.5],
|
"pivot": [-0.70833, -180.99167, -52.5],
|
||||||
"cubes": [
|
"cubes": [
|
||||||
{"origin": [-9, -14, -2], "size": [5, 25, 7], "uv": [50, 101], "mirror": true},
|
{"origin": [-6.1875, -206, -59], "size": [9, 25, 13], "uv": [242, 398]}
|
||||||
{"origin": [-8.5, -19, -1.5], "size": [4, 5, 6], "uv": [20, 114], "mirror": true}
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Tentacle_hand_1_right",
|
"name": "center_tentacule_back",
|
||||||
"parent": "Tentacle_part_1_right",
|
"parent": "head",
|
||||||
"pivot": [-5, -21, -1],
|
"pivot": [0, 58.375, 24.5],
|
||||||
|
"rotation": [0, -90, 0],
|
||||||
"cubes": [
|
"cubes": [
|
||||||
{"origin": [-9, -25, -2], "size": [5, 6, 7], "uv": [98, 101], "mirror": true},
|
{"origin": [-6.1875, 11, 8], "size": [17, 47, 33], "uv": [0, 436]}
|
||||||
{"origin": [-9, -33, -2], "size": [3, 8, 7], "uv": [0, 103], "mirror": true},
|
|
||||||
{"origin": [-9, -34, -1], "size": [3, 1, 5], "uv": [116, 57], "mirror": true}
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Tentacle_1_Right2",
|
"name": "center_tentacule_back2",
|
||||||
"parent": "Tentacles_Right",
|
"parent": "center_tentacule_back",
|
||||||
"pivot": [-6.78571, 39.64286, 9.5],
|
"pivot": [1.48214, 10.92857, 24.5],
|
||||||
"cubes": [
|
"cubes": [
|
||||||
{"origin": [-9, 17, 6], "size": [5, 23, 7], "uv": [74, 101], "mirror": true},
|
{"origin": [-6.1875, -37, 11], "size": [14, 48, 27], "uv": [86, 296]}
|
||||||
{"origin": [-8.5, 12, 6.5], "size": [4, 5, 6], "uv": [98, 114], "mirror": true}
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Tentacle_part_1_right2",
|
"name": "center_tentacule_back3",
|
||||||
"parent": "Tentacle_1_Right2",
|
"parent": "center_tentacule_back2",
|
||||||
"pivot": [-6.9, 12, 9.5],
|
"pivot": [1.29167, -37.00833, 24.5],
|
||||||
"cubes": [
|
"cubes": [
|
||||||
{"origin": [-9, -13, 6], "size": [5, 25, 7], "uv": [50, 101], "mirror": true},
|
{"origin": [-6.1875, -85, 14], "size": [14, 48, 21], "uv": [100, 371]}
|
||||||
{"origin": [-8.5, -18, 6.5], "size": [4, 5, 6], "uv": [20, 114], "mirror": true}
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Tentacle_hand_1_right2",
|
"name": "center_tentacule_back4",
|
||||||
"parent": "Tentacle_part_1_right2",
|
"parent": "center_tentacule_back3",
|
||||||
"pivot": [-5, -20, 7],
|
"pivot": [1.025, -85, 24.5],
|
||||||
"cubes": [
|
"cubes": [
|
||||||
{"origin": [-9, -24, 6], "size": [5, 6, 7], "uv": [98, 101], "mirror": true},
|
{"origin": [-6.1875, -133, 14], "size": [14, 48, 21], "uv": [170, 371]}
|
||||||
{"origin": [-9, -32, 6], "size": [3, 8, 7], "uv": [0, 103], "mirror": true},
|
|
||||||
{"origin": [-9, -33, 7], "size": [3, 1, 5], "uv": [116, 57], "mirror": true}
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Tentacle_1_Right3",
|
"name": "center_tentacule_back5",
|
||||||
"parent": "Tentacles_Right",
|
"parent": "center_tentacule_back4",
|
||||||
"pivot": [-6.78571, 41.64286, 17.5],
|
"pivot": [-0.375, -132.975, 24.5],
|
||||||
"cubes": [
|
"cubes": [
|
||||||
{"origin": [-9, 19, 14], "size": [5, 23, 7], "uv": [74, 101], "mirror": true},
|
{"origin": [-6.1875, -181, 16], "size": [12, 48, 17], "uv": [243, 330]}
|
||||||
{"origin": [-8.5, 14, 14.5], "size": [4, 5, 6], "uv": [98, 114], "mirror": true}
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Tentacle_part_1_right3",
|
"name": "center_tentacule_back6",
|
||||||
"parent": "Tentacle_1_Right3",
|
"parent": "center_tentacule_back5",
|
||||||
"pivot": [-6.9, 14, 17.5],
|
"pivot": [-0.70833, -180.99167, 24.5],
|
||||||
"cubes": [
|
"cubes": [
|
||||||
{"origin": [-9, -11, 14], "size": [5, 25, 7], "uv": [50, 101], "mirror": true},
|
{"origin": [-6.1875, -206, 18], "size": [9, 25, 13], "uv": [242, 398]}
|
||||||
{"origin": [-8.5, -16, 14.5], "size": [4, 5, 6], "uv": [20, 114], "mirror": true}
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Tentacle_hand_1_right3",
|
"name": "l_back_tentacule",
|
||||||
"parent": "Tentacle_part_1_right3",
|
"parent": "head",
|
||||||
"pivot": [-5, -18, 15],
|
"pivot": [22.1875, 58.375, 14.5],
|
||||||
|
"rotation": [0, -90, 0],
|
||||||
"cubes": [
|
"cubes": [
|
||||||
{"origin": [-9, -22, 14], "size": [5, 6, 7], "uv": [98, 101], "mirror": true},
|
{"origin": [16, 11, -2], "size": [17, 47, 33], "uv": [0, 356]}
|
||||||
{"origin": [-9, -30, 14], "size": [3, 8, 7], "uv": [0, 103], "mirror": true},
|
|
||||||
{"origin": [-9, -31, 15], "size": [3, 1, 5], "uv": [116, 57], "mirror": true}
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Tentacle_1_Right4",
|
"name": "l_back_tentacule2",
|
||||||
"parent": "Tentacles_Right",
|
"parent": "l_back_tentacule",
|
||||||
"pivot": [-6.78571, 43.64286, 25.5],
|
"pivot": [21.85714, 10.92857, 14.5],
|
||||||
"cubes": [
|
"cubes": [
|
||||||
{"origin": [-9, 21, 22], "size": [5, 23, 7], "uv": [74, 101], "mirror": true},
|
{"origin": [16, -37, 1], "size": [14, 48, 27], "uv": [86, 296]}
|
||||||
{"origin": [-8.5, 16, 22.5], "size": [4, 5, 6], "uv": [98, 114], "mirror": true}
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Tentacle_part_1_right4",
|
"name": "l_back_tentacule3",
|
||||||
"parent": "Tentacle_1_Right4",
|
"parent": "l_back_tentacule2",
|
||||||
"pivot": [-6.9, 16, 25.5],
|
"pivot": [21.66667, -37.00833, 14.5],
|
||||||
"cubes": [
|
"cubes": [
|
||||||
{"origin": [-9, -9, 22], "size": [5, 25, 7], "uv": [50, 101], "mirror": true},
|
{"origin": [16, -85, 4], "size": [14, 48, 21], "uv": [100, 371]}
|
||||||
{"origin": [-8.5, -14, 22.5], "size": [4, 5, 6], "uv": [20, 114], "mirror": true}
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Tentacle_hand_1_right4",
|
"name": "l_back_tentacule4",
|
||||||
"parent": "Tentacle_part_1_right4",
|
"parent": "l_back_tentacule3",
|
||||||
"pivot": [-5, -16, 23],
|
"pivot": [21.4, -85, 14.5],
|
||||||
"cubes": [
|
"cubes": [
|
||||||
{"origin": [-9, -20, 22], "size": [5, 6, 7], "uv": [98, 101], "mirror": true},
|
{"origin": [16, -133, 4], "size": [14, 48, 21], "uv": [170, 371]}
|
||||||
{"origin": [-9, -28, 22], "size": [3, 8, 7], "uv": [0, 103], "mirror": true},
|
]
|
||||||
{"origin": [-9, -29, 23], "size": [3, 1, 5], "uv": [116, 57], "mirror": true}
|
},
|
||||||
|
{
|
||||||
|
"name": "l_back_tentacule5",
|
||||||
|
"parent": "l_back_tentacule4",
|
||||||
|
"pivot": [21, -132.975, 14.5],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [16, -181, 6], "size": [12, 48, 17], "uv": [243, 330]}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "l_back_tentacule6",
|
||||||
|
"parent": "l_back_tentacule5",
|
||||||
|
"pivot": [20.66667, -180.99167, 14.5],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [16, -206, 8], "size": [9, 25, 13], "uv": [242, 398]}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "r_back_tentacule",
|
||||||
|
"parent": "head",
|
||||||
|
"pivot": [-22.1875, 58.375, 14.5],
|
||||||
|
"rotation": [0, 90, 0],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [-33, 11, -2], "size": [17, 47, 33], "uv": [0, 356], "mirror": true}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "r_back_tentacule2",
|
||||||
|
"parent": "r_back_tentacule",
|
||||||
|
"pivot": [-21.85714, 10.92857, 14.5],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [-30, -37, 1], "size": [14, 48, 27], "uv": [86, 296], "mirror": true}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "r_back_tentacule3",
|
||||||
|
"parent": "r_back_tentacule2",
|
||||||
|
"pivot": [-21.66667, -37.00833, 14.5],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [-30, -85, 4], "size": [14, 48, 21], "uv": [100, 371], "mirror": true}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "r_back_tentacule4",
|
||||||
|
"parent": "r_back_tentacule3",
|
||||||
|
"pivot": [-21.4, -85, 14.5],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [-30, -133, 4], "size": [14, 48, 21], "uv": [170, 371], "mirror": true}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "r_back_tentacule5",
|
||||||
|
"parent": "r_back_tentacule4",
|
||||||
|
"pivot": [-21, -132.975, 14.5],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [-28, -181, 6], "size": [12, 48, 17], "uv": [243, 330], "mirror": true}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "r_back_tentacule6",
|
||||||
|
"parent": "r_back_tentacule5",
|
||||||
|
"pivot": [-20.66667, -180.99167, 14.5],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [-25, -206, 8], "size": [9, 25, 13], "uv": [242, 398], "mirror": true}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "r_tentacule",
|
||||||
|
"parent": "head",
|
||||||
|
"pivot": [-28.1875, 58.375, -42.5],
|
||||||
|
"rotation": [0, -90, 0],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [-39, 11, -59], "size": [17, 47, 33], "uv": [0, 356], "mirror": true}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "r_tentacule2",
|
||||||
|
"parent": "r_tentacule",
|
||||||
|
"pivot": [-27.85714, 10.92857, -42.5],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [-36, -37, -56], "size": [14, 48, 27], "uv": [86, 296], "mirror": true}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "r_tentacule3",
|
||||||
|
"parent": "r_tentacule2",
|
||||||
|
"pivot": [-27.66667, -37.00833, -42.5],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [-36, -85, -53], "size": [14, 48, 21], "uv": [100, 371], "mirror": true}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "r_tentacule4",
|
||||||
|
"parent": "r_tentacule3",
|
||||||
|
"pivot": [-27.4, -85, -42.5],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [-36, -133, -53], "size": [14, 48, 21], "uv": [170, 371], "mirror": true}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "r_tentacule5",
|
||||||
|
"parent": "r_tentacule4",
|
||||||
|
"pivot": [-27, -132.975, -42.5],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [-34, -181, -51], "size": [12, 48, 17], "uv": [243, 330], "mirror": true}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "r_tentacule6",
|
||||||
|
"parent": "r_tentacule5",
|
||||||
|
"pivot": [-26.66667, -180.99167, -42.5],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [-31, -206, -49], "size": [9, 25, 13], "uv": [242, 398], "mirror": true}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "l_tentacule",
|
||||||
|
"parent": "head",
|
||||||
|
"pivot": [28.1875, 58.375, -42.5],
|
||||||
|
"rotation": [0, 90, 0],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [22, 11, -59], "size": [17, 47, 33], "uv": [0, 356]}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "l_tentacule2",
|
||||||
|
"parent": "l_tentacule",
|
||||||
|
"pivot": [27.85714, 10.92857, -42.5],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [22, -37, -56], "size": [14, 48, 27], "uv": [86, 296]}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "l_tentacule3",
|
||||||
|
"parent": "l_tentacule2",
|
||||||
|
"pivot": [27.66667, -37.00833, -42.5],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [22, -85, -53], "size": [14, 48, 21], "uv": [100, 371]}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "l_tentacule4",
|
||||||
|
"parent": "l_tentacule3",
|
||||||
|
"pivot": [27.4, -85, -42.5],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [22, -133, -53], "size": [14, 48, 21], "uv": [170, 371]}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "l_tentacule5",
|
||||||
|
"parent": "l_tentacule4",
|
||||||
|
"pivot": [27, -132.975, -42.5],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [22, -181, -51], "size": [12, 48, 17], "uv": [243, 330]}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "l_tentacule6",
|
||||||
|
"parent": "l_tentacule5",
|
||||||
|
"pivot": [26.66667, -180.99167, -42.5],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [22, -206, -49], "size": [9, 25, 13], "uv": [242, 398]}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "r_shoulder",
|
||||||
|
"parent": "head",
|
||||||
|
"pivot": [-31.1875, 61.375, -12.5],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [-42, 14, -29], "size": [17, 47, 33], "uv": [0, 356], "mirror": true}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "r_arm",
|
||||||
|
"parent": "r_shoulder",
|
||||||
|
"pivot": [-30.85714, 13.92857, -12.5],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [-39, -34, -26], "size": [14, 48, 27], "uv": [86, 296], "mirror": true}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "r_arm2",
|
||||||
|
"parent": "r_arm",
|
||||||
|
"pivot": [-30.66667, -34.00833, -12.5],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [-39, -82, -23], "size": [14, 48, 21], "uv": [100, 371], "mirror": true}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "r_arm3",
|
||||||
|
"parent": "r_arm2",
|
||||||
|
"pivot": [-30.4, -82, -12.5],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [-39, -130, -23], "size": [14, 48, 21], "uv": [170, 371], "mirror": true}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "r_arm4",
|
||||||
|
"parent": "r_arm3",
|
||||||
|
"pivot": [-30, -129.975, -12.5],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [-37, -178, -21], "size": [12, 48, 17], "uv": [243, 330], "mirror": true}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "r_hand",
|
||||||
|
"parent": "r_arm4",
|
||||||
|
"pivot": [-29.66667, -177.99167, -12.5],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [-34, -203, -19], "size": [9, 25, 13], "uv": [242, 398], "mirror": true}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "r_hand2",
|
||||||
|
"parent": "r_hand",
|
||||||
|
"pivot": [-29.75, -203, -12.5],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [-36, -244, -33], "size": [11, 41, 41], "uv": [310, 409], "mirror": true}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "r_hand_tip",
|
||||||
|
"parent": "r_hand2",
|
||||||
|
"pivot": [-29, -244, -12.5],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [-33, -265, -26], "size": [8, 21, 27], "uv": [172, 468], "mirror": true}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -0,0 +1,318 @@
|
|||||||
|
{
|
||||||
|
"format_version": "1.12.0",
|
||||||
|
"minecraft:geometry": [
|
||||||
|
{
|
||||||
|
"description": {
|
||||||
|
"identifier": "geometry.unknown",
|
||||||
|
"texture_width": 256,
|
||||||
|
"texture_height": 256,
|
||||||
|
"visible_bounds_width": 8,
|
||||||
|
"visible_bounds_height": 7,
|
||||||
|
"visible_bounds_offset": [0, 1.5, 0]
|
||||||
|
},
|
||||||
|
"bones": [
|
||||||
|
{
|
||||||
|
"name": "bone",
|
||||||
|
"pivot": [0, 46.50635, 20.87778]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "head",
|
||||||
|
"parent": "bone",
|
||||||
|
"pivot": [0, 48.23333, 11.63333],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [-9, 48, -3], "size": [5, 5, 6], "uv": [20, 103]},
|
||||||
|
{"origin": [-7, 39, -5], "size": [14, 8, 17], "uv": [54, 49]},
|
||||||
|
{"origin": [-8, 47, -2], "size": [16, 8, 14], "uv": [96, 0]},
|
||||||
|
{"origin": [-7, 55, -1], "size": [14, 2, 11], "uv": [0, 90]},
|
||||||
|
{"origin": [-9, 47, -3], "size": [5, 2, 6], "inflate": 0.1, "uv": [112, 93]},
|
||||||
|
{"origin": [-9, 52, -3], "size": [5, 2, 6], "inflate": 0.1, "uv": [116, 49]},
|
||||||
|
{"origin": [4, 47, -3], "size": [5, 2, 6], "inflate": 0.1, "uv": [112, 93], "mirror": true},
|
||||||
|
{"origin": [4, 48, -3], "size": [5, 5, 6], "uv": [20, 103], "mirror": true},
|
||||||
|
{"origin": [4, 52, -3], "size": [5, 2, 6], "inflate": 0.1, "uv": [116, 49], "mirror": true},
|
||||||
|
{"origin": [-5.5, 35, -8], "size": [11, 5, 6], "uv": [96, 38]},
|
||||||
|
{"origin": [-4.5, 40, -7], "size": [9, 9, 2], "uv": [112, 74]},
|
||||||
|
{"origin": [-4.5, 47, -5], "size": [9, 5, 3], "uv": [112, 85]}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "mouth",
|
||||||
|
"parent": "head",
|
||||||
|
"pivot": [0, 35.1, -6],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [-5, 30, -8], "size": [0, 5, 4], "uv": [42, 103]},
|
||||||
|
{"origin": [-3, 30, -8], "size": [0, 5, 4], "uv": [42, 103]},
|
||||||
|
{"origin": [3, 30, -8], "size": [0, 5, 4], "uv": [42, 103]},
|
||||||
|
{"origin": [-1, 30, -8], "size": [0, 5, 4], "uv": [42, 103]},
|
||||||
|
{"origin": [1, 30, -8], "size": [0, 5, 4], "uv": [42, 103]},
|
||||||
|
{"origin": [5, 30, -8], "size": [0, 5, 4], "uv": [42, 103]}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "cranium",
|
||||||
|
"parent": "head",
|
||||||
|
"pivot": [0, 47.5, 12],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [-10, 38, 8], "size": [20, 21, 28], "pivot": [0, 47.5, 12], "rotation": [15, 0, 0], "uv": [0, 0]},
|
||||||
|
{"origin": [-12, 40, 10], "size": [2, 16, 25], "pivot": [-2, 47.5, 12], "rotation": [15, 0, 0], "uv": [0, 49]},
|
||||||
|
{"origin": [10, 40, 10], "size": [2, 16, 25], "pivot": [2, 47.5, 12], "rotation": [15, 0, 0], "uv": [0, 49], "mirror": true}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "cranium_2",
|
||||||
|
"parent": "cranium",
|
||||||
|
"pivot": [0, 53.55, 32.5],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [-9, 46, 32], "size": [18, 16, 11], "uv": [54, 74]}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "cranium_3",
|
||||||
|
"parent": "cranium_2",
|
||||||
|
"pivot": [0, 49.1, 41.5],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [-5, 44.6, 40], "size": [10, 9, 7], "pivot": [0, 49.1, 43.5], "rotation": [-22.5, 0, 0], "uv": [96, 22]}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Tentacles",
|
||||||
|
"parent": "bone",
|
||||||
|
"pivot": [0, 45.64286, 8.5]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Tentacles_Left",
|
||||||
|
"parent": "Tentacles",
|
||||||
|
"pivot": [6.78571, 45.64286, 25.5]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Tentacle_1_Left",
|
||||||
|
"parent": "Tentacles_Left",
|
||||||
|
"pivot": [6.78571, 38.64286, 1.5],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [4, 16, -2], "size": [5, 23, 7], "uv": [74, 101]},
|
||||||
|
{"origin": [4.5, 11, -1.5], "size": [4, 5, 6], "uv": [98, 114]}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Tentacle_part_1_left",
|
||||||
|
"parent": "Tentacle_1_Left",
|
||||||
|
"pivot": [6.9, 11, 1.5],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [4, -14, -2], "size": [5, 25, 7], "uv": [50, 101]},
|
||||||
|
{"origin": [4.5, -19, -1.5], "size": [4, 5, 6], "uv": [20, 114]}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Tentacle_hand_1_left",
|
||||||
|
"parent": "Tentacle_part_1_left",
|
||||||
|
"pivot": [5, -21, -1],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [4, -25, -2], "size": [5, 6, 7], "uv": [98, 101]},
|
||||||
|
{"origin": [6, -33, -2], "size": [3, 8, 7], "uv": [0, 103]},
|
||||||
|
{"origin": [6, -34, -1], "size": [3, 1, 5], "uv": [116, 57]}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Tentacle_1_Left2",
|
||||||
|
"parent": "Tentacles_Left",
|
||||||
|
"pivot": [6.78571, 39.64286, 9.5],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [4, 17, 6], "size": [5, 23, 7], "uv": [74, 101]},
|
||||||
|
{"origin": [4.5, 12, 6.5], "size": [4, 5, 6], "uv": [98, 114]}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Tentacle_part_1_left2",
|
||||||
|
"parent": "Tentacle_1_Left2",
|
||||||
|
"pivot": [6.9, 12, 9.5],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [4, -13, 6], "size": [5, 25, 7], "uv": [50, 101]},
|
||||||
|
{"origin": [4.5, -18, 6.5], "size": [4, 5, 6], "uv": [20, 114]}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Tentacle_hand_1_left2",
|
||||||
|
"parent": "Tentacle_part_1_left2",
|
||||||
|
"pivot": [5, -20, 7],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [4, -24, 6], "size": [5, 6, 7], "uv": [98, 101]},
|
||||||
|
{"origin": [6, -32, 6], "size": [3, 8, 7], "uv": [0, 103]},
|
||||||
|
{"origin": [6, -33, 7], "size": [3, 1, 5], "uv": [116, 57]}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Tentacle_1_Left3",
|
||||||
|
"parent": "Tentacles_Left",
|
||||||
|
"pivot": [6.78571, 41.64286, 17.5],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [4, 19, 14], "size": [5, 23, 7], "uv": [74, 101]},
|
||||||
|
{"origin": [4.5, 14, 14.5], "size": [4, 5, 6], "uv": [98, 114]}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Tentacle_part_1_left3",
|
||||||
|
"parent": "Tentacle_1_Left3",
|
||||||
|
"pivot": [6.9, 14, 17.5],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [4, -11, 14], "size": [5, 25, 7], "uv": [50, 101]},
|
||||||
|
{"origin": [4.5, -16, 14.5], "size": [4, 5, 6], "uv": [20, 114]}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Tentacle_hand_1_left3",
|
||||||
|
"parent": "Tentacle_part_1_left3",
|
||||||
|
"pivot": [5, -18, 15],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [4, -22, 14], "size": [5, 6, 7], "uv": [98, 101]},
|
||||||
|
{"origin": [6, -30, 14], "size": [3, 8, 7], "uv": [0, 103]},
|
||||||
|
{"origin": [6, -31, 15], "size": [3, 1, 5], "uv": [116, 57]}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Tentacle_1_Left4",
|
||||||
|
"parent": "Tentacles_Left",
|
||||||
|
"pivot": [6.78571, 43.64286, 25.5],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [4, 21, 22], "size": [5, 23, 7], "uv": [74, 101]},
|
||||||
|
{"origin": [4.5, 16, 22.5], "size": [4, 5, 6], "uv": [98, 114]}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Tentacle_part_1_left4",
|
||||||
|
"parent": "Tentacle_1_Left4",
|
||||||
|
"pivot": [6.9, 16, 25.5],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [4, -9, 22], "size": [5, 25, 7], "uv": [50, 101]},
|
||||||
|
{"origin": [4.5, -14, 22.5], "size": [4, 5, 6], "uv": [20, 114]}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Tentacle_hand_1_left4",
|
||||||
|
"parent": "Tentacle_part_1_left4",
|
||||||
|
"pivot": [5, -16, 23],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [4, -20, 22], "size": [5, 6, 7], "uv": [98, 101]},
|
||||||
|
{"origin": [6, -28, 22], "size": [3, 8, 7], "uv": [0, 103]},
|
||||||
|
{"origin": [6, -29, 23], "size": [3, 1, 5], "uv": [116, 57]}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Tentacles_Right",
|
||||||
|
"parent": "Tentacles",
|
||||||
|
"pivot": [-6.78571, 45.64286, 25.5]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Tentacle_1_Right",
|
||||||
|
"parent": "Tentacles_Right",
|
||||||
|
"pivot": [-6.78571, 38.64286, 1.5],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [-9, 16, -2], "size": [5, 23, 7], "uv": [74, 101], "mirror": true},
|
||||||
|
{"origin": [-8.5, 11, -1.5], "size": [4, 5, 6], "uv": [98, 114], "mirror": true}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Tentacle_part_1_right",
|
||||||
|
"parent": "Tentacle_1_Right",
|
||||||
|
"pivot": [-6.9, 11, 1.5],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [-9, -14, -2], "size": [5, 25, 7], "uv": [50, 101], "mirror": true},
|
||||||
|
{"origin": [-8.5, -19, -1.5], "size": [4, 5, 6], "uv": [20, 114], "mirror": true}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Tentacle_hand_1_right",
|
||||||
|
"parent": "Tentacle_part_1_right",
|
||||||
|
"pivot": [-5, -21, -1],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [-9, -25, -2], "size": [5, 6, 7], "uv": [98, 101], "mirror": true},
|
||||||
|
{"origin": [-9, -33, -2], "size": [3, 8, 7], "uv": [0, 103], "mirror": true},
|
||||||
|
{"origin": [-9, -34, -1], "size": [3, 1, 5], "uv": [116, 57], "mirror": true}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Tentacle_1_Right2",
|
||||||
|
"parent": "Tentacles_Right",
|
||||||
|
"pivot": [-6.78571, 39.64286, 9.5],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [-9, 17, 6], "size": [5, 23, 7], "uv": [74, 101], "mirror": true},
|
||||||
|
{"origin": [-8.5, 12, 6.5], "size": [4, 5, 6], "uv": [98, 114], "mirror": true}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Tentacle_part_1_right2",
|
||||||
|
"parent": "Tentacle_1_Right2",
|
||||||
|
"pivot": [-6.9, 12, 9.5],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [-9, -13, 6], "size": [5, 25, 7], "uv": [50, 101], "mirror": true},
|
||||||
|
{"origin": [-8.5, -18, 6.5], "size": [4, 5, 6], "uv": [20, 114], "mirror": true}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Tentacle_hand_1_right2",
|
||||||
|
"parent": "Tentacle_part_1_right2",
|
||||||
|
"pivot": [-5, -20, 7],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [-9, -24, 6], "size": [5, 6, 7], "uv": [98, 101], "mirror": true},
|
||||||
|
{"origin": [-9, -32, 6], "size": [3, 8, 7], "uv": [0, 103], "mirror": true},
|
||||||
|
{"origin": [-9, -33, 7], "size": [3, 1, 5], "uv": [116, 57], "mirror": true}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Tentacle_1_Right3",
|
||||||
|
"parent": "Tentacles_Right",
|
||||||
|
"pivot": [-6.78571, 41.64286, 17.5],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [-9, 19, 14], "size": [5, 23, 7], "uv": [74, 101], "mirror": true},
|
||||||
|
{"origin": [-8.5, 14, 14.5], "size": [4, 5, 6], "uv": [98, 114], "mirror": true}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Tentacle_part_1_right3",
|
||||||
|
"parent": "Tentacle_1_Right3",
|
||||||
|
"pivot": [-6.9, 14, 17.5],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [-9, -11, 14], "size": [5, 25, 7], "uv": [50, 101], "mirror": true},
|
||||||
|
{"origin": [-8.5, -16, 14.5], "size": [4, 5, 6], "uv": [20, 114], "mirror": true}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Tentacle_hand_1_right3",
|
||||||
|
"parent": "Tentacle_part_1_right3",
|
||||||
|
"pivot": [-5, -18, 15],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [-9, -22, 14], "size": [5, 6, 7], "uv": [98, 101], "mirror": true},
|
||||||
|
{"origin": [-9, -30, 14], "size": [3, 8, 7], "uv": [0, 103], "mirror": true},
|
||||||
|
{"origin": [-9, -31, 15], "size": [3, 1, 5], "uv": [116, 57], "mirror": true}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Tentacle_1_Right4",
|
||||||
|
"parent": "Tentacles_Right",
|
||||||
|
"pivot": [-6.78571, 43.64286, 25.5],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [-9, 21, 22], "size": [5, 23, 7], "uv": [74, 101], "mirror": true},
|
||||||
|
{"origin": [-8.5, 16, 22.5], "size": [4, 5, 6], "uv": [98, 114], "mirror": true}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Tentacle_part_1_right4",
|
||||||
|
"parent": "Tentacle_1_Right4",
|
||||||
|
"pivot": [-6.9, 16, 25.5],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [-9, -9, 22], "size": [5, 25, 7], "uv": [50, 101], "mirror": true},
|
||||||
|
{"origin": [-8.5, -14, 22.5], "size": [4, 5, 6], "uv": [20, 114], "mirror": true}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Tentacle_hand_1_right4",
|
||||||
|
"parent": "Tentacle_part_1_right4",
|
||||||
|
"pivot": [-5, -16, 23],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [-9, -20, 22], "size": [5, 6, 7], "uv": [98, 101], "mirror": true},
|
||||||
|
{"origin": [-9, -28, 22], "size": [3, 8, 7], "uv": [0, 103], "mirror": true},
|
||||||
|
{"origin": [-9, -29, 23], "size": [3, 1, 5], "uv": [116, 57], "mirror": true}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,232 @@
|
|||||||
|
{
|
||||||
|
"format_version": "1.12.0",
|
||||||
|
"minecraft:geometry": [
|
||||||
|
{
|
||||||
|
"description": {
|
||||||
|
"identifier": "geometry.spitbug",
|
||||||
|
"texture_width": 256,
|
||||||
|
"texture_height": 256,
|
||||||
|
"visible_bounds_width": 6,
|
||||||
|
"visible_bounds_height": 5.5,
|
||||||
|
"visible_bounds_offset": [0, 2.25, 0]
|
||||||
|
},
|
||||||
|
"bones": [
|
||||||
|
{
|
||||||
|
"name": "root",
|
||||||
|
"pivot": [0, 0, 0]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "body",
|
||||||
|
"parent": "root",
|
||||||
|
"pivot": [0, 36, 0],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [-9.5, 36, -18], "size": [19, 18, 37], "uv": [0, 124]},
|
||||||
|
{"origin": [-9.5, 54, -39], "size": [19, 7, 63], "uv": [0, 0]},
|
||||||
|
{"origin": [-9.5, 44, 19], "size": [19, 10, 5], "uv": [112, 175]},
|
||||||
|
{"origin": [-3.5, 52, -52], "size": [7, 7, 13], "uv": [0, 179]},
|
||||||
|
{"origin": [-1.5, 47, -51], "size": [3, 5, 0], "uv": [58, 207]},
|
||||||
|
{"origin": [-5.5, 59, -45], "size": [11, 2, 6], "uv": [108, 190]},
|
||||||
|
{"origin": [-12.5, 36, -16], "size": [3, 18, 33], "uv": [112, 124]},
|
||||||
|
{"origin": [9.5, 36, -16], "size": [3, 18, 33], "uv": [146, 70]},
|
||||||
|
{"origin": [-9.5, 36, -26], "size": [19, 4, 8], "uv": [164, 45]},
|
||||||
|
{"origin": [-11.5, 36, -30], "size": [2, 6, 14], "uv": [76, 179]},
|
||||||
|
{"origin": [-10.5, 36, -35], "size": [3, 7, 5], "uv": [168, 196]},
|
||||||
|
{"origin": [-8.5, 38, -51], "size": [2, 5, 16], "uv": [40, 179]},
|
||||||
|
{"origin": [6.5, 38, -51], "size": [2, 5, 16], "uv": [40, 179], "mirror": true},
|
||||||
|
{"origin": [7.5, 36, -35], "size": [3, 7, 5], "uv": [168, 196], "mirror": true},
|
||||||
|
{"origin": [9.5, 36, -30], "size": [2, 6, 14], "uv": [76, 179], "mirror": true},
|
||||||
|
{"origin": [-9.5, 50, -35], "size": [3, 4, 17], "uv": [160, 175]},
|
||||||
|
{"origin": [6.5, 50, -35], "size": [3, 4, 17], "uv": [160, 175], "mirror": true},
|
||||||
|
{"origin": [-7.5, 49, -39], "size": [5, 5, 4], "uv": [184, 196]},
|
||||||
|
{"origin": [-3.5, 49, -51], "size": [2, 3, 12], "uv": [184, 157]},
|
||||||
|
{"origin": [1.5, 49, -51], "size": [2, 3, 12], "uv": [184, 157], "mirror": true},
|
||||||
|
{"origin": [2.5, 49, -39], "size": [5, 5, 4], "uv": [184, 196], "mirror": true},
|
||||||
|
{"origin": [-6, 36, -35], "size": [12, 1, 9], "uv": [184, 136]},
|
||||||
|
{"origin": [-11.5, 32, -35], "size": [23, 4, 50], "uv": [0, 70]},
|
||||||
|
{"origin": [-8.5, 34, -53], "size": [17, 4, 18], "uv": [164, 0]},
|
||||||
|
{"origin": [-5.5, 38, -52], "size": [11, 5, 0], "uv": [227, 32]},
|
||||||
|
{"origin": [-8.5, 29, -53], "size": [17, 5, 0], "uv": [189, 22]}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "rightEye",
|
||||||
|
"parent": "body",
|
||||||
|
"pivot": [-11, 45.5, -17],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [-12, 45.5, -19], "size": [3, 3, 3], "uv": [142, 190]}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "leftEye",
|
||||||
|
"parent": "body",
|
||||||
|
"pivot": [11, 45.5, -17],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [9, 45.5, -19], "size": [3, 3, 3], "uv": [142, 190], "mirror": true}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "rightGrip",
|
||||||
|
"parent": "body",
|
||||||
|
"pivot": [-11.5, 54, -16],
|
||||||
|
"rotation": [0, 0, 90],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [-15.5, 53, -28], "size": [8, 3, 12], "uv": [184, 121]}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "leftGrip",
|
||||||
|
"parent": "body",
|
||||||
|
"pivot": [11.5, 54, -16],
|
||||||
|
"rotation": [0, 0, -90],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [7.5, 53, -28], "size": [8, 3, 12], "uv": [184, 121], "mirror": true}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "backRightThigh",
|
||||||
|
"parent": "root",
|
||||||
|
"pivot": [-11.5, 37, 10],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [-20.5, 33, 8], "size": [9, 4, 4], "uv": [142, 196]}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "backRightKnee",
|
||||||
|
"parent": "backRightThigh",
|
||||||
|
"pivot": [-20.5, 37, 10],
|
||||||
|
"rotation": [0, 0, -90],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [-34.5, 32, 7], "size": [14, 5, 6], "inflate": 0.025, "uv": [184, 146]}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "backRightLeg",
|
||||||
|
"parent": "backRightKnee",
|
||||||
|
"pivot": [-34.5, 32, 10],
|
||||||
|
"rotation": [0, 0, 90],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [-53.5, 32, 8], "size": [19, 4, 4], "uv": [164, 57]}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "backRightFoot",
|
||||||
|
"parent": "backRightLeg",
|
||||||
|
"pivot": [-53.5, 32, 10],
|
||||||
|
"rotation": [0, 0, -90],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [-67.5, 30, 9], "size": [14, 2, 2], "inflate": 0.025, "uv": [164, 65]},
|
||||||
|
{"origin": [-76.5, 30, 10], "size": [9, 2, 0], "uv": [146, 121]}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "backLeftThigh",
|
||||||
|
"parent": "root",
|
||||||
|
"pivot": [11.5, 37, 10],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [11.5, 33, 8], "size": [9, 4, 4], "uv": [142, 196]}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "backLeftKnee",
|
||||||
|
"parent": "backLeftThigh",
|
||||||
|
"pivot": [20.5, 37, 10],
|
||||||
|
"rotation": [0, 0, 90],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [20.5, 32, 7], "size": [14, 5, 6], "inflate": 0.025, "uv": [184, 146]}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "backLeftLeg",
|
||||||
|
"parent": "backLeftKnee",
|
||||||
|
"pivot": [34.5, 32, 10],
|
||||||
|
"rotation": [0, 0, -90],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [34.5, 32, 8], "size": [19, 4, 4], "uv": [164, 57]}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "backLeftFoot",
|
||||||
|
"parent": "backLeftLeg",
|
||||||
|
"pivot": [53.5, 32, 10],
|
||||||
|
"rotation": [0, 0, 90],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [53.5, 30, 9], "size": [14, 2, 2], "inflate": 0.025, "uv": [164, 65]},
|
||||||
|
{"origin": [67.5, 30, 10], "size": [9, 2, 0], "uv": [146, 121], "mirror": true}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "frontRightThigh",
|
||||||
|
"parent": "root",
|
||||||
|
"pivot": [-11.5, 37, -10],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [-20.5, 33, -12], "size": [9, 4, 4], "uv": [142, 196]}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "frontRightKnee",
|
||||||
|
"parent": "frontRightThigh",
|
||||||
|
"pivot": [-20.5, 37, -10],
|
||||||
|
"rotation": [0, 0, -90],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [-34.5, 32, -13], "size": [14, 5, 6], "inflate": 0.025, "uv": [184, 146]}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "frontRightLeg",
|
||||||
|
"parent": "frontRightKnee",
|
||||||
|
"pivot": [-34.5, 32, -10],
|
||||||
|
"rotation": [0, 0, 90],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [-53.5, 32, -12], "size": [19, 4, 4], "uv": [164, 57]}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "frontRightFoot",
|
||||||
|
"parent": "frontRightLeg",
|
||||||
|
"pivot": [-53.5, 32, -10],
|
||||||
|
"rotation": [0, 0, -90],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [-67.5, 30, -11], "size": [14, 2, 2], "inflate": 0.025, "uv": [164, 65]},
|
||||||
|
{"origin": [-76.5, 30, -10], "size": [9, 2, 0], "uv": [146, 121]}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "frontLeftThigh",
|
||||||
|
"parent": "root",
|
||||||
|
"pivot": [11.5, 37, -10],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [11.5, 33, -12], "size": [9, 4, 4], "uv": [142, 196]}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "frontLeftKnee",
|
||||||
|
"parent": "frontLeftThigh",
|
||||||
|
"pivot": [20.5, 37, -10],
|
||||||
|
"rotation": [0, 0, 90],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [20.5, 32, -13], "size": [14, 5, 6], "inflate": 0.025, "uv": [184, 146]}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "frontLeftLeg",
|
||||||
|
"parent": "frontLeftKnee",
|
||||||
|
"pivot": [34.5, 32, -10],
|
||||||
|
"rotation": [0, 0, -90],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [34.5, 32, -12], "size": [19, 4, 4], "uv": [164, 57]}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "frontLeftFoot",
|
||||||
|
"parent": "frontLeftLeg",
|
||||||
|
"pivot": [53.5, 32, -10],
|
||||||
|
"rotation": [0, 0, 90],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [53.5, 30, -11], "size": [14, 2, 2], "inflate": 0.025, "uv": [164, 65]},
|
||||||
|
{"origin": [67.5, 30, -10], "size": [9, 2, 0], "uv": [146, 121], "mirror": true}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,85 @@
|
|||||||
|
{
|
||||||
|
"format_version": "1.12.0",
|
||||||
|
"minecraft:geometry": [
|
||||||
|
{
|
||||||
|
"description": {
|
||||||
|
"identifier": "geometry.stinkbug",
|
||||||
|
"texture_width": 32,
|
||||||
|
"texture_height": 32,
|
||||||
|
"visible_bounds_width": 2,
|
||||||
|
"visible_bounds_height": 1.5,
|
||||||
|
"visible_bounds_offset": [0, 0.25, 0]
|
||||||
|
},
|
||||||
|
"bones": [
|
||||||
|
{
|
||||||
|
"name": "root",
|
||||||
|
"pivot": [0, 0, 0]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "body",
|
||||||
|
"parent": "root",
|
||||||
|
"pivot": [0, 2, 0],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [-3, 0, -5], "size": [6, 4, 10], "uv": [0, 0]}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "antenna",
|
||||||
|
"parent": "body",
|
||||||
|
"pivot": [0, 4, -4],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [-2, 4, -5], "size": [4, 2, 1], "uv": [0, 14]}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "frontLeftLeg",
|
||||||
|
"parent": "body",
|
||||||
|
"pivot": [-3, 0, -4],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [-6, 0, -5], "size": [3, 0, 2], "uv": [10, 14]}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "frontRightLeg",
|
||||||
|
"parent": "body",
|
||||||
|
"pivot": [3, 0, -4],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [3, 0, -5], "size": [3, 0, 2], "uv": [10, 14], "mirror": true}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "middleLeftLeg",
|
||||||
|
"parent": "body",
|
||||||
|
"pivot": [-3, 0, 0],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [-6, 0, -1], "size": [3, 0, 2], "uv": [10, 14]}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "middleRightLeg",
|
||||||
|
"parent": "body",
|
||||||
|
"pivot": [3, 0, 0],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [3, 0, -1], "size": [3, 0, 2], "uv": [10, 14], "mirror": true}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "backLeftLeg",
|
||||||
|
"parent": "body",
|
||||||
|
"pivot": [-3, 0, 4],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [-6, 0, 3], "size": [3, 0, 2], "uv": [10, 14]}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "backRightLeg",
|
||||||
|
"parent": "body",
|
||||||
|
"pivot": [3, 0, 4],
|
||||||
|
"cubes": [
|
||||||
|
{"origin": [3, 0, 3], "size": [3, 0, 2], "uv": [10, 14], "mirror": true}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -24,14 +24,20 @@
|
|||||||
"block.antarchy.hushweed": "Hushweed",
|
"block.antarchy.hushweed": "Hushweed",
|
||||||
"block.antarchy.umbral_moss_block": "Umbral Moss Block",
|
"block.antarchy.umbral_moss_block": "Umbral Moss Block",
|
||||||
"block.antarchy.umbral_moss_carpet": "Umbral Moss Carpet",
|
"block.antarchy.umbral_moss_carpet": "Umbral Moss Carpet",
|
||||||
|
"block.antarchy.amber_moss_block": "Amber Moss Block",
|
||||||
|
"block.antarchy.amber_moss_carpet": "Amber Moss Carpet",
|
||||||
|
"block.antarchy.amber_lichen": "Amber Lichen",
|
||||||
"block.antarchy.duplicator_sapling": "Duplicator Sapling",
|
"block.antarchy.duplicator_sapling": "Duplicator Sapling",
|
||||||
|
"block.antarchy.creepvine": "Creepvine",
|
||||||
"block.antarchy.duct_tape": "Duct Tape",
|
"block.antarchy.duct_tape": "Duct Tape",
|
||||||
"block.antarchy.infested_rooted_dirt": "Infested Rooted Dirt",
|
"block.antarchy.infested_rooted_dirt": "Infested Rooted Dirt",
|
||||||
"block.antarchy.infested_coarse_dirt": "Infested Coarse Dirt",
|
"block.antarchy.infested_coarse_dirt": "Infested Coarse Dirt",
|
||||||
"block.antarchy.nyxite": "Nyxite",
|
"block.antarchy.nyxite": "Nyxite",
|
||||||
|
"block.antarchy.myrmite": "Myrmite",
|
||||||
"block.antarchy.polished_nyxite": "Polished Nyxite",
|
"block.antarchy.polished_nyxite": "Polished Nyxite",
|
||||||
"block.antarchy.chiseled_nyxite": "Chiseled Nyxite",
|
"block.antarchy.chiseled_nyxite": "Chiseled Nyxite",
|
||||||
"block.antarchy.nyxite_bricks": "Nyxite Bricks",
|
"block.antarchy.nyxite_bricks": "Nyxite Bricks",
|
||||||
|
"block.antarchy.chiten_block": "Chiten Block",
|
||||||
"block.antarchy.shellstone": "Shellstone",
|
"block.antarchy.shellstone": "Shellstone",
|
||||||
"block.antarchy.polished_shellstone": "Polished Shellstone",
|
"block.antarchy.polished_shellstone": "Polished Shellstone",
|
||||||
"block.antarchy.shellstone_bricks": "Shellstone Bricks",
|
"block.antarchy.shellstone_bricks": "Shellstone Bricks",
|
||||||
@@ -146,6 +152,7 @@
|
|||||||
"entity.antarchy.missile_squid": "Missile Squid",
|
"entity.antarchy.missile_squid": "Missile Squid",
|
||||||
"entity.antarchy.nightmare": "Nightmare",
|
"entity.antarchy.nightmare": "Nightmare",
|
||||||
"entity.antarchy.bed_bug": "Bed Bug",
|
"entity.antarchy.bed_bug": "Bed Bug",
|
||||||
|
"entity.antarchy.stink_bug": "Stink Bug",
|
||||||
"entity.antarchy.jumpy_bug": "Jumpy Bug",
|
"entity.antarchy.jumpy_bug": "Jumpy Bug",
|
||||||
"entity.antarchy.wasp": "Wasp",
|
"entity.antarchy.wasp": "Wasp",
|
||||||
"entity.antarchy.bomber": "Bomber",
|
"entity.antarchy.bomber": "Bomber",
|
||||||
@@ -163,6 +170,8 @@
|
|||||||
"subtitles.antarchy.mantis_fly_loop": "Mantis wings buzz",
|
"subtitles.antarchy.mantis_fly_loop": "Mantis wings buzz",
|
||||||
"item.antarchy.big_bertha": "Big Bertha",
|
"item.antarchy.big_bertha": "Big Bertha",
|
||||||
"item.antarchy.wasp_nest": "Wasp Nest",
|
"item.antarchy.wasp_nest": "Wasp Nest",
|
||||||
|
"item.antarchy.stink_bug": "Stink Bug",
|
||||||
|
"item.antarchy.stink_bug_spawn_egg": "Stink Bug Spawn Egg",
|
||||||
"item.antarchy.wasp_spawn_egg": "Wasp Spawn Egg",
|
"item.antarchy.wasp_spawn_egg": "Wasp Spawn Egg",
|
||||||
"item.antarchy.bomber_spawn_egg": "Bomber Spawn Egg",
|
"item.antarchy.bomber_spawn_egg": "Bomber Spawn Egg",
|
||||||
"item.antarchy.jumpy_bug_spawn_egg": "Jumpy Bug Spawn Egg",
|
"item.antarchy.jumpy_bug_spawn_egg": "Jumpy Bug Spawn Egg",
|
||||||
@@ -257,6 +266,13 @@
|
|||||||
"item.antarchy.hushweed": "Hushweed",
|
"item.antarchy.hushweed": "Hushweed",
|
||||||
"item.antarchy.umbral_moss_block": "Umbral Moss Block",
|
"item.antarchy.umbral_moss_block": "Umbral Moss Block",
|
||||||
"item.antarchy.umbral_moss_carpet": "Umbral Moss Carpet",
|
"item.antarchy.umbral_moss_carpet": "Umbral Moss Carpet",
|
||||||
|
"item.antarchy.amber_moss_block": "Amber Moss Block",
|
||||||
|
"item.antarchy.amber_moss_carpet": "Amber Moss Carpet",
|
||||||
|
"item.antarchy.amber_lichen": "Amber Lichen",
|
||||||
|
"item.antarchy.creepvine": "Creepvine",
|
||||||
|
"item.antarchy.chiten": "Chiten",
|
||||||
|
"item.antarchy.chiten_block": "Chiten Block",
|
||||||
|
"item.antarchy.myrmite": "Myrmite",
|
||||||
"item.antarchy.torchflower_bush": "Torchflower Bush",
|
"item.antarchy.torchflower_bush": "Torchflower Bush",
|
||||||
"block.antarchy.torchflower_bush": "Torchflower Bush",
|
"block.antarchy.torchflower_bush": "Torchflower Bush",
|
||||||
"item.antarchy.mud_pie": "Mud Pie",
|
"item.antarchy.mud_pie": "Mud Pie",
|
||||||
@@ -402,6 +418,7 @@
|
|||||||
"effect.antarchy.dread": "Dread",
|
"effect.antarchy.dread": "Dread",
|
||||||
"effect.antarchy.paralyzed": "Paralyzed",
|
"effect.antarchy.paralyzed": "Paralyzed",
|
||||||
"effect.antarchy.inverted": "Inverted",
|
"effect.antarchy.inverted": "Inverted",
|
||||||
|
"effect.antarchy.stinky": "Stinky",
|
||||||
"effect.antarchy.shrinking": "Shrinking",
|
"effect.antarchy.shrinking": "Shrinking",
|
||||||
"effect.antarchy.growth": "Growth",
|
"effect.antarchy.growth": "Growth",
|
||||||
"effect.antarchy.bloodglass_ward": "Bloodglass Ward",
|
"effect.antarchy.bloodglass_ward": "Bloodglass Ward",
|
||||||
@@ -461,6 +478,8 @@
|
|||||||
"advancements.antarchy.soups_up.description": "Eat Cloud Shark Fin Soup.",
|
"advancements.antarchy.soups_up.description": "Eat Cloud Shark Fin Soup.",
|
||||||
"advancements.antarchy.in_the_upside_down.title": "In the Upside Down",
|
"advancements.antarchy.in_the_upside_down.title": "In the Upside Down",
|
||||||
"advancements.antarchy.in_the_upside_down.description": "Become inverted for the first time.",
|
"advancements.antarchy.in_the_upside_down.description": "Become inverted for the first time.",
|
||||||
|
"advancements.antarchy.whoever_smelt_it_dealt_it.title": "Whoever smelt it, dealt it",
|
||||||
|
"advancements.antarchy.whoever_smelt_it_dealt_it.description": "Get Stinky for the first time.",
|
||||||
"advancements.antarchy.ultimate_armor.title": "Ultimate Protection",
|
"advancements.antarchy.ultimate_armor.title": "Ultimate Protection",
|
||||||
"advancements.antarchy.ultimate_armor.description": "Collect the full set of Ultimate Armor.",
|
"advancements.antarchy.ultimate_armor.description": "Collect the full set of Ultimate Armor.",
|
||||||
"advancements.antarchy.ultimate_bow.title": "Bowhemian Rhapsody",
|
"advancements.antarchy.ultimate_bow.title": "Bowhemian Rhapsody",
|
||||||
@@ -665,6 +684,14 @@
|
|||||||
"item.minecraft.lingering_potion.effect.long_dread": "Lingering Potion of Dread",
|
"item.minecraft.lingering_potion.effect.long_dread": "Lingering Potion of Dread",
|
||||||
"item.minecraft.tipped_arrow.effect.dread": "Arrow of Dread",
|
"item.minecraft.tipped_arrow.effect.dread": "Arrow of Dread",
|
||||||
"item.minecraft.tipped_arrow.effect.long_dread": "Arrow of Dread",
|
"item.minecraft.tipped_arrow.effect.long_dread": "Arrow of Dread",
|
||||||
|
"item.minecraft.potion.effect.stinky": "Potion of Stink",
|
||||||
|
"item.minecraft.potion.effect.long_stinky": "Potion of Stink",
|
||||||
|
"item.minecraft.splash_potion.effect.stinky": "Splash Potion of Stink",
|
||||||
|
"item.minecraft.splash_potion.effect.long_stinky": "Splash Potion of Stink",
|
||||||
|
"item.minecraft.lingering_potion.effect.stinky": "Lingering Potion of Stink",
|
||||||
|
"item.minecraft.lingering_potion.effect.long_stinky": "Lingering Potion of Stink",
|
||||||
|
"item.minecraft.tipped_arrow.effect.stinky": "Arrow of Stink",
|
||||||
|
"item.minecraft.tipped_arrow.effect.long_stinky": "Arrow of Stink",
|
||||||
"item.minecraft.potion.effect.haste": "Potion of Haste",
|
"item.minecraft.potion.effect.haste": "Potion of Haste",
|
||||||
"item.minecraft.potion.effect.strong_haste": "Potion of Haste II",
|
"item.minecraft.potion.effect.strong_haste": "Potion of Haste II",
|
||||||
"item.minecraft.splash_potion.effect.haste": "Splash Potion of Haste",
|
"item.minecraft.splash_potion.effect.haste": "Splash Potion of Haste",
|
||||||
|
|||||||
@@ -0,0 +1,17 @@
|
|||||||
|
{
|
||||||
|
"ambientocclusion": false,
|
||||||
|
"textures": {
|
||||||
|
"particle": "antarchy:block/amber_moss/amber_lichen",
|
||||||
|
"glow_lichen": "antarchy:block/amber_moss/amber_lichen"
|
||||||
|
},
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"from": [0, 0, 0.1],
|
||||||
|
"to": [16, 16, 0.1],
|
||||||
|
"faces": {
|
||||||
|
"north": { "uv": [16, 0, 0, 16], "texture": "#glow_lichen" },
|
||||||
|
"south": { "uv": [0, 0, 16, 16], "texture": "#glow_lichen" }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"parent": "minecraft:block/cube_all",
|
||||||
|
"textures": {
|
||||||
|
"all": "antarchy:block/amber_moss/amber_moss_block"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"parent": "minecraft:block/carpet",
|
||||||
|
"textures": {
|
||||||
|
"wool": "antarchy:block/amber_moss/amber_moss_carpet"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"parent": "minecraft:block/mossy_carpet_side",
|
||||||
|
"textures": {
|
||||||
|
"side": "antarchy:block/amber_moss/amber_moss_carpet"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
"ambientocclusion": true,
|
||||||
|
"textures": {
|
||||||
|
"particle": "#side",
|
||||||
|
"side": "antarchy:block/amber_moss/amber_moss_carpet"
|
||||||
|
},
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"from": [0, 0, 0.1],
|
||||||
|
"to": [16, 16, 0.1],
|
||||||
|
"shade": true,
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [16, 0, 0, 16], "texture": "#side"},
|
||||||
|
"south": {"uv": [0, 0, 16, 16], "texture": "#side"}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
"parent": "minecraft:block/cube_column",
|
||||||
|
"textures": {
|
||||||
|
"end": "antarchy:block/chiten_block",
|
||||||
|
"side": "antarchy:block/chiten_block"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
"ambientocclusion": false,
|
||||||
|
"textures": {
|
||||||
|
"particle": "antarchy:block/creepvine",
|
||||||
|
"vine": "antarchy:block/creepvine"
|
||||||
|
},
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"from": [0, 0, 0.8],
|
||||||
|
"to": [16, 16, 0.8],
|
||||||
|
"shade": false,
|
||||||
|
"faces": {
|
||||||
|
"north": { "uv": [16, 0, 0, 16], "texture": "#vine", "tintindex": 0 },
|
||||||
|
"south": { "uv": [0, 0, 16, 16], "texture": "#vine", "tintindex": 0 }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"parent": "minecraft:block/cube_all",
|
||||||
|
"textures": {
|
||||||
|
"all": "antarchy:block/myrmite"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"parent": "minecraft:item/generated",
|
||||||
|
"textures": {
|
||||||
|
"layer0": "antarchy:block/amber_moss/amber_lichen"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"parent": "antarchy:block/amber_moss_block"
|
||||||
|
}
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"parent": "antarchy:block/amber_moss_carpet"
|
||||||
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"parent": "minecraft:item/generated",
|
||||||
|
"textures": {
|
||||||
|
"layer0": "antarchy:item/chiten"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"parent": "antarchy:block/chiten_block"
|
||||||
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"parent": "minecraft:item/generated",
|
||||||
|
"textures": {
|
||||||
|
"layer0": "antarchy:block/creepvine"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"parent": "antarchy:block/myrmite"
|
||||||
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"parent": "minecraft:item/generated",
|
||||||
|
"textures": {
|
||||||
|
"layer0": "antarchy:item/stink_bug"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"parent": "minecraft:item/template_spawn_egg"
|
||||||
|
}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"textures": [
|
||||||
|
"antarchy:stinky_gas/stinky_gas_01",
|
||||||
|
"antarchy:stinky_gas/stinky_gas_02",
|
||||||
|
"antarchy:stinky_gas/stinky_gas_03",
|
||||||
|
"antarchy:stinky_gas/stinky_gas_04",
|
||||||
|
"antarchy:stinky_gas/stinky_gas_05",
|
||||||
|
"antarchy:stinky_gas/stinky_gas_06",
|
||||||
|
"antarchy:stinky_gas/stinky_gas_07",
|
||||||
|
"antarchy:stinky_gas/stinky_gas_08"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
Before Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 674 B |
|
After Width: | Height: | Size: 308 B |
|
After Width: | Height: | Size: 356 B |
|
After Width: | Height: | Size: 300 B |
|
After Width: | Height: | Size: 337 B |
|
After Width: | Height: | Size: 356 B |
|
After Width: | Height: | Size: 348 B |
|
After Width: | Height: | Size: 323 B |
|
After Width: | Height: | Size: 293 B |
|
After Width: | Height: | Size: 255 B |
|
After Width: | Height: | Size: 185 B |
@@ -0,0 +1,39 @@
|
|||||||
|
{
|
||||||
|
"parent": "minecraft:adventure/root",
|
||||||
|
"criteria": {
|
||||||
|
"become_stinky": {
|
||||||
|
"conditions": {
|
||||||
|
"effects": {
|
||||||
|
"antarchy:stinky": {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"trigger": "minecraft:effects_changed"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"display": {
|
||||||
|
"announce_to_chat": true,
|
||||||
|
"description": {
|
||||||
|
"translate": "advancements.antarchy.whoever_smelt_it_dealt_it.description"
|
||||||
|
},
|
||||||
|
"frame": "task",
|
||||||
|
"icon": {
|
||||||
|
"count": 1,
|
||||||
|
"id": "minecraft:potion",
|
||||||
|
"components": {
|
||||||
|
"minecraft:potion_contents": {
|
||||||
|
"potion": "antarchy:stinky"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"show_toast": true,
|
||||||
|
"title": {
|
||||||
|
"translate": "advancements.antarchy.whoever_smelt_it_dealt_it.title"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"requirements": [
|
||||||
|
[
|
||||||
|
"become_stinky"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"sends_telemetry_event": true
|
||||||
|
}
|
||||||
@@ -391,6 +391,102 @@
|
|||||||
"depth": 0.85,
|
"depth": 0.85,
|
||||||
"offset": 0.0
|
"offset": 0.0
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"biome": "antarchy:elythia_ocean",
|
||||||
|
"parameters": {
|
||||||
|
"temperature": 0.65,
|
||||||
|
"humidity": 0.90,
|
||||||
|
"continentalness": -0.50,
|
||||||
|
"erosion": 0.30,
|
||||||
|
"weirdness": 0.0,
|
||||||
|
"depth": 0.0,
|
||||||
|
"offset": 0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"biome": "antarchy:elythia_ocean",
|
||||||
|
"parameters": {
|
||||||
|
"temperature": 0.60,
|
||||||
|
"humidity": 0.88,
|
||||||
|
"continentalness": -0.55,
|
||||||
|
"erosion": 0.25,
|
||||||
|
"weirdness": -0.40,
|
||||||
|
"depth": 0.0,
|
||||||
|
"offset": 0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"biome": "antarchy:elythia_ocean",
|
||||||
|
"parameters": {
|
||||||
|
"temperature": 0.70,
|
||||||
|
"humidity": 0.92,
|
||||||
|
"continentalness": -0.45,
|
||||||
|
"erosion": 0.35,
|
||||||
|
"weirdness": 0.40,
|
||||||
|
"depth": 0.0,
|
||||||
|
"offset": 0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"biome": "antarchy:elythia_ocean",
|
||||||
|
"parameters": {
|
||||||
|
"temperature": 0.65,
|
||||||
|
"humidity": 0.90,
|
||||||
|
"continentalness": -0.50,
|
||||||
|
"erosion": 0.30,
|
||||||
|
"weirdness": 0.0,
|
||||||
|
"depth": 0.5,
|
||||||
|
"offset": 0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"biome": "antarchy:elythia_ocean",
|
||||||
|
"parameters": {
|
||||||
|
"temperature": 0.60,
|
||||||
|
"humidity": 0.88,
|
||||||
|
"continentalness": -0.55,
|
||||||
|
"erosion": 0.25,
|
||||||
|
"weirdness": -0.40,
|
||||||
|
"depth": 0.5,
|
||||||
|
"offset": 0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"biome": "antarchy:elythia_beach",
|
||||||
|
"parameters": {
|
||||||
|
"temperature": 0.68,
|
||||||
|
"humidity": 0.91,
|
||||||
|
"continentalness": -0.08,
|
||||||
|
"erosion": 0.50,
|
||||||
|
"weirdness": 0.0,
|
||||||
|
"depth": 0.0,
|
||||||
|
"offset": 0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"biome": "antarchy:elythia_beach",
|
||||||
|
"parameters": {
|
||||||
|
"temperature": 0.65,
|
||||||
|
"humidity": 0.89,
|
||||||
|
"continentalness": -0.05,
|
||||||
|
"erosion": 0.60,
|
||||||
|
"weirdness": -0.30,
|
||||||
|
"depth": 0.0,
|
||||||
|
"offset": 0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"biome": "antarchy:elythia_beach",
|
||||||
|
"parameters": {
|
||||||
|
"temperature": 0.70,
|
||||||
|
"humidity": 0.93,
|
||||||
|
"continentalness": -0.02,
|
||||||
|
"erosion": 0.55,
|
||||||
|
"weirdness": 0.30,
|
||||||
|
"depth": 0.0,
|
||||||
|
"offset": 0.0
|
||||||
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,25 @@
|
|||||||
|
{
|
||||||
|
"type": "minecraft:block",
|
||||||
|
"pools": [
|
||||||
|
{
|
||||||
|
"conditions": [
|
||||||
|
{
|
||||||
|
"condition": "minecraft:match_tool",
|
||||||
|
"predicate": {
|
||||||
|
"items": [
|
||||||
|
"minecraft:shears"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"entries": [
|
||||||
|
{
|
||||||
|
"type": "minecraft:item",
|
||||||
|
"name": "antarchy:amber_lichen"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"rolls": 1.0
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"random_sequence": "antarchy:blocks/amber_lichen"
|
||||||
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
{
|
||||||
|
"type": "minecraft:block",
|
||||||
|
"pools": [
|
||||||
|
{
|
||||||
|
"conditions": [
|
||||||
|
{
|
||||||
|
"condition": "minecraft:survives_explosion"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"entries": [
|
||||||
|
{
|
||||||
|
"type": "minecraft:item",
|
||||||
|
"name": "antarchy:amber_moss_block"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"rolls": 1.0
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"random_sequence": "antarchy:blocks/amber_moss_block"
|
||||||
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
{
|
||||||
|
"type": "minecraft:block",
|
||||||
|
"pools": [
|
||||||
|
{
|
||||||
|
"conditions": [
|
||||||
|
{
|
||||||
|
"condition": "minecraft:survives_explosion"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"entries": [
|
||||||
|
{
|
||||||
|
"type": "minecraft:item",
|
||||||
|
"name": "antarchy:amber_moss_carpet"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"rolls": 1.0
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"random_sequence": "antarchy:blocks/amber_moss_carpet"
|
||||||
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
{
|
||||||
|
"type": "minecraft:block",
|
||||||
|
"pools": [
|
||||||
|
{
|
||||||
|
"conditions": [
|
||||||
|
{
|
||||||
|
"condition": "minecraft:survives_explosion"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"entries": [
|
||||||
|
{
|
||||||
|
"type": "minecraft:item",
|
||||||
|
"name": "antarchy:chiten_block"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"rolls": 1.0
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"random_sequence": "antarchy:blocks/chiten_block"
|
||||||
|
}
|
||||||
@@ -0,0 +1,91 @@
|
|||||||
|
{
|
||||||
|
"type": "minecraft:block",
|
||||||
|
"pools": [
|
||||||
|
{
|
||||||
|
"entries": [
|
||||||
|
{
|
||||||
|
"type": "minecraft:alternatives",
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"type": "minecraft:item",
|
||||||
|
"conditions": [
|
||||||
|
{
|
||||||
|
"condition": "minecraft:block_state_property",
|
||||||
|
"block": "antarchy:creeping_horror_egg",
|
||||||
|
"properties": {
|
||||||
|
"eggs": "4"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"functions": [
|
||||||
|
{
|
||||||
|
"function": "minecraft:set_count",
|
||||||
|
"count": 4.0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"function": "minecraft:explosion_decay"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "antarchy:creeping_horror_egg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "minecraft:item",
|
||||||
|
"conditions": [
|
||||||
|
{
|
||||||
|
"condition": "minecraft:block_state_property",
|
||||||
|
"block": "antarchy:creeping_horror_egg",
|
||||||
|
"properties": {
|
||||||
|
"eggs": "3"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"functions": [
|
||||||
|
{
|
||||||
|
"function": "minecraft:set_count",
|
||||||
|
"count": 3.0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"function": "minecraft:explosion_decay"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "antarchy:creeping_horror_egg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "minecraft:item",
|
||||||
|
"conditions": [
|
||||||
|
{
|
||||||
|
"condition": "minecraft:block_state_property",
|
||||||
|
"block": "antarchy:creeping_horror_egg",
|
||||||
|
"properties": {
|
||||||
|
"eggs": "2"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"functions": [
|
||||||
|
{
|
||||||
|
"function": "minecraft:set_count",
|
||||||
|
"count": 2.0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"function": "minecraft:explosion_decay"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "antarchy:creeping_horror_egg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "minecraft:item",
|
||||||
|
"functions": [
|
||||||
|
{
|
||||||
|
"function": "minecraft:explosion_decay"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "antarchy:creeping_horror_egg"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"rolls": 1.0
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"random_sequence": "minecraft:blocks/turtle_egg"
|
||||||
|
}
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
{
|
||||||
|
"type": "minecraft:block",
|
||||||
|
"pools": [
|
||||||
|
{
|
||||||
|
"conditions": [
|
||||||
|
{
|
||||||
|
"condition": "minecraft:match_tool",
|
||||||
|
"predicate": {
|
||||||
|
"items": [
|
||||||
|
"minecraft:shears"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"entries": [
|
||||||
|
{
|
||||||
|
"type": "minecraft:item",
|
||||||
|
"name": "antarchy:creepvine"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"rolls": 1.0
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"random_sequence": "antarchy:blocks/creepvine"
|
||||||
|
}
|
||||||
@@ -0,0 +1,91 @@
|
|||||||
|
{
|
||||||
|
"type": "minecraft:block",
|
||||||
|
"pools": [
|
||||||
|
{
|
||||||
|
"entries": [
|
||||||
|
{
|
||||||
|
"type": "minecraft:alternatives",
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"type": "minecraft:item",
|
||||||
|
"conditions": [
|
||||||
|
{
|
||||||
|
"condition": "minecraft:block_state_property",
|
||||||
|
"block": "antarchy:lurking_terror_egg",
|
||||||
|
"properties": {
|
||||||
|
"eggs": "4"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"functions": [
|
||||||
|
{
|
||||||
|
"function": "minecraft:set_count",
|
||||||
|
"count": 4.0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"function": "minecraft:explosion_decay"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "antarchy:lurking_terror_egg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "minecraft:item",
|
||||||
|
"conditions": [
|
||||||
|
{
|
||||||
|
"condition": "minecraft:block_state_property",
|
||||||
|
"block": "antarchy:lurking_terror_egg",
|
||||||
|
"properties": {
|
||||||
|
"eggs": "3"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"functions": [
|
||||||
|
{
|
||||||
|
"function": "minecraft:set_count",
|
||||||
|
"count": 3.0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"function": "minecraft:explosion_decay"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "antarchy:lurking_terror_egg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "minecraft:item",
|
||||||
|
"conditions": [
|
||||||
|
{
|
||||||
|
"condition": "minecraft:block_state_property",
|
||||||
|
"block": "antarchy:lurking_terror_egg",
|
||||||
|
"properties": {
|
||||||
|
"eggs": "2"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"functions": [
|
||||||
|
{
|
||||||
|
"function": "minecraft:set_count",
|
||||||
|
"count": 2.0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"function": "minecraft:explosion_decay"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "antarchy:lurking_terror_egg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "minecraft:item",
|
||||||
|
"functions": [
|
||||||
|
{
|
||||||
|
"function": "minecraft:explosion_decay"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "antarchy:lurking_terror_egg"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"rolls": 1.0
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"random_sequence": "minecraft:blocks/turtle_egg"
|
||||||
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
{
|
||||||
|
"type": "minecraft:block",
|
||||||
|
"pools": [
|
||||||
|
{
|
||||||
|
"conditions": [
|
||||||
|
{
|
||||||
|
"condition": "minecraft:survives_explosion"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"entries": [
|
||||||
|
{
|
||||||
|
"type": "minecraft:item",
|
||||||
|
"name": "antarchy:myrmite"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"rolls": 1.0
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"random_sequence": "antarchy:blocks/myrmite"
|
||||||
|
}
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
{
|
||||||
|
"type": "minecraft:entity",
|
||||||
|
"pools": [
|
||||||
|
{
|
||||||
|
"rolls": 1.0,
|
||||||
|
"entries": [
|
||||||
|
{
|
||||||
|
"type": "minecraft:item",
|
||||||
|
"name": "antarchy:stink_bug"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"functions": [
|
||||||
|
{
|
||||||
|
"function": "minecraft:set_count",
|
||||||
|
"count": {
|
||||||
|
"type": "minecraft:uniform",
|
||||||
|
"min": 1.0,
|
||||||
|
"max": 1.0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"random_sequence": "antarchy:entities/stink_bug"
|
||||||
|
}
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"function": "minecraft:looting_enchant",
|
"function": "minecraft:enchanted_count_increase",
|
||||||
"count": {
|
"count": {
|
||||||
"type": "minecraft:uniform",
|
"type": "minecraft:uniform",
|
||||||
"min": 0.0,
|
"min": 0.0,
|
||||||
|
|||||||
@@ -0,0 +1,17 @@
|
|||||||
|
{
|
||||||
|
"type": "minecraft:crafting_shaped",
|
||||||
|
"category": "building",
|
||||||
|
"key": {
|
||||||
|
"#": {
|
||||||
|
"item": "antarchy:amber_moss_block"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"pattern": [
|
||||||
|
"#",
|
||||||
|
"#"
|
||||||
|
],
|
||||||
|
"result": {
|
||||||
|
"count": 3,
|
||||||
|
"id": "antarchy:amber_moss_carpet"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
{
|
||||||
|
"type": "minecraft:crafting_shaped",
|
||||||
|
"category": "building",
|
||||||
|
"key": {
|
||||||
|
"#": {
|
||||||
|
"item": "antarchy:chiten"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"pattern": [
|
||||||
|
"##",
|
||||||
|
"##"
|
||||||
|
],
|
||||||
|
"result": {
|
||||||
|
"count": 1,
|
||||||
|
"id": "antarchy:chiten_block"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
{
|
||||||
|
"type": "minecraft:crafting_shaped",
|
||||||
|
"category": "building",
|
||||||
|
"key": {
|
||||||
|
"#": {
|
||||||
|
"item": "antarchy:umbral_moss_block"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"pattern": [
|
||||||
|
"#",
|
||||||
|
"#"
|
||||||
|
],
|
||||||
|
"result": {
|
||||||
|
"count": 3,
|
||||||
|
"id": "antarchy:umbral_moss_carpet"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"replace": false,
|
||||||
|
"values": [
|
||||||
|
"minecraft:enderman",
|
||||||
|
"minecraft:piglin",
|
||||||
|
"minecraft:piglin",
|
||||||
|
"minecraft:hoglin",
|
||||||
|
"minecraft:piglin_brute"
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -8,6 +8,8 @@
|
|||||||
"antarchy:torchflower_fields",
|
"antarchy:torchflower_fields",
|
||||||
"antarchy:moleworm_caves",
|
"antarchy:moleworm_caves",
|
||||||
"antarchy:ouranwood_forest",
|
"antarchy:ouranwood_forest",
|
||||||
"antarchy:sparse_ouranwood_forest"
|
"antarchy:sparse_ouranwood_forest",
|
||||||
|
"antarchy:elythia_ocean",
|
||||||
|
"antarchy:elythia_beach"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,68 @@
|
|||||||
|
{
|
||||||
|
"has_precipitation": false,
|
||||||
|
"temperature": 0.68,
|
||||||
|
"downfall": 0.96,
|
||||||
|
"effects": {
|
||||||
|
"fog_color": 8084735,
|
||||||
|
"water_color": 5021432,
|
||||||
|
"water_fog_color": 2502722,
|
||||||
|
"sky_color": 8084735,
|
||||||
|
"foliage_color": 2867501,
|
||||||
|
"grass_color": 4304168,
|
||||||
|
"grass_color_modifier": "none",
|
||||||
|
"mood_sound": {
|
||||||
|
"sound": "minecraft:ambient.crimson_forest.mood",
|
||||||
|
"tick_delay": 7000,
|
||||||
|
"block_search_extent": 8,
|
||||||
|
"offset": 2.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"spawn_costs": {},
|
||||||
|
"carvers": {
|
||||||
|
"air": [],
|
||||||
|
"liquid": []
|
||||||
|
},
|
||||||
|
"features": [
|
||||||
|
[],
|
||||||
|
[],
|
||||||
|
[],
|
||||||
|
[],
|
||||||
|
[],
|
||||||
|
[],
|
||||||
|
[
|
||||||
|
"minecraft:ore_coal_upper",
|
||||||
|
"minecraft:ore_coal_lower",
|
||||||
|
"minecraft:ore_iron_upper",
|
||||||
|
"minecraft:ore_iron_middle",
|
||||||
|
"minecraft:ore_iron_small",
|
||||||
|
"minecraft:ore_gold",
|
||||||
|
"minecraft:ore_gold_lower",
|
||||||
|
"minecraft:ore_redstone",
|
||||||
|
"minecraft:ore_redstone_lower",
|
||||||
|
"minecraft:ore_diamond",
|
||||||
|
"minecraft:ore_diamond_medium",
|
||||||
|
"minecraft:ore_diamond_large",
|
||||||
|
"minecraft:ore_diamond_buried",
|
||||||
|
"minecraft:ore_lapis",
|
||||||
|
"minecraft:ore_lapis_buried",
|
||||||
|
"minecraft:ore_copper"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"antarchy:elythia_underground"
|
||||||
|
],
|
||||||
|
[],
|
||||||
|
[],
|
||||||
|
[]
|
||||||
|
],
|
||||||
|
"creature_spawn_probability": 0.04,
|
||||||
|
"spawners": {
|
||||||
|
"monster": [],
|
||||||
|
"creature": [],
|
||||||
|
"ambient": [],
|
||||||
|
"axolotls": [],
|
||||||
|
"underground_water_creature": [],
|
||||||
|
"water_creature": [],
|
||||||
|
"water_ambient": [],
|
||||||
|
"misc": []
|
||||||
|
}
|
||||||
|
}
|
||||||