Fix enchantments, item lore handlers, add mob egg drop chance to lore text. Fix mob egg drop rates. Fix player head drop rates

This commit is contained in:
zontreck 2024-04-01 05:17:35 -07:00
parent 7e1f4eea48
commit afb21dd2c8
25 changed files with 121 additions and 558 deletions

View file

@ -168,6 +168,7 @@ dependencies {
runtimeOnly fg.deobf("curse.maven:mekanism-268560:5125665") runtimeOnly fg.deobf("curse.maven:mekanism-268560:5125665")
runtimeOnly fg.deobf("curse.maven:worldedit-225608:4586218") runtimeOnly fg.deobf("curse.maven:worldedit-225608:4586218")
runtimeOnly fg.deobf("curse.maven:jei-238222:5101366") runtimeOnly fg.deobf("curse.maven:jei-238222:5101366")
runtimeOnly fg.deobf("curse.maven:nbtedit-reborn-678133:5082493")
// Example mod dependency with JEI - using fg.deobf() ensures the dependency is remapped to your development mappings // Example mod dependency with JEI - using fg.deobf() ensures the dependency is remapped to your development mappings
// The JEI API is declared for compile time use, while the full JEI artifact is used at runtime // The JEI API is declared for compile time use, while the full JEI artifact is used at runtime

View file

@ -48,7 +48,7 @@ mod_name=Thresholds
# The license of the mod. Review your options at https://choosealicense.com/. All Rights Reserved is the default. # The license of the mod. Review your options at https://choosealicense.com/. All Rights Reserved is the default.
mod_license=GPLv3 mod_license=GPLv3
# The mod version. See https://semver.org/ # The mod version. See https://semver.org/
mod_version=1201.4.040124.0234 mod_version=1201.4.040124.0514
# The group ID for the mod. It is only important when publishing as an artifact to a Maven repository. # The group ID for the mod. It is only important when publishing as an artifact to a Maven repository.
# This should match the base package used for the mod sources. # This should match the base package used for the mod sources.
# See https://maven.apache.org/guides/mini/guide-naming-conventions.html # See https://maven.apache.org/guides/mini/guide-naming-conventions.html

View file

@ -1,7 +1,8 @@
package dev.zontreck.otemod.blocks.entity; package dev.zontreck.otemod.blocks.entity;
import dev.zontreck.libzontreck.items.InputItemStackHandler;
import dev.zontreck.libzontreck.items.OutputItemStackHandler;
import dev.zontreck.libzontreck.util.ChatHelpers; import dev.zontreck.libzontreck.util.ChatHelpers;
import dev.zontreck.otemod.implementation.OutputItemStackHandler;
import dev.zontreck.otemod.implementation.compressor.CompressionChamberMenu; import dev.zontreck.otemod.implementation.compressor.CompressionChamberMenu;
import dev.zontreck.otemod.implementation.energy.IThresholdsEnergy; import dev.zontreck.otemod.implementation.energy.IThresholdsEnergy;
import dev.zontreck.otemod.implementation.energy.OTEEnergy; import dev.zontreck.otemod.implementation.energy.OTEEnergy;
@ -19,17 +20,14 @@ import net.minecraft.world.entity.player.Inventory;
import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.player.Player;
import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.inventory.AbstractContainerMenu;
import net.minecraft.world.inventory.ContainerData; import net.minecraft.world.inventory.ContainerData;
import net.minecraft.world.inventory.SimpleContainerData;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Items; import net.minecraft.world.item.Items;
import net.minecraft.world.level.Level; import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.capabilities.ForgeCapabilities; import net.minecraftforge.common.capabilities.ForgeCapabilities;
import net.minecraftforge.common.util.LazyOptional; import net.minecraftforge.common.util.LazyOptional;
import net.minecraftforge.energy.EnergyStorage;
import net.minecraftforge.energy.IEnergyStorage; import net.minecraftforge.energy.IEnergyStorage;
import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.IItemHandler;
import net.minecraftforge.items.ItemStackHandler; import net.minecraftforge.items.ItemStackHandler;
@ -47,6 +45,8 @@ public class CompressionChamberBlockEntity extends BlockEntity implements MenuPr
super(ModEntities.COMPRESSION_CHAMBER.get(), pPos, pBlockState); super(ModEntities.COMPRESSION_CHAMBER.get(), pPos, pBlockState);
outputSlot = new OutputItemStackHandler(outputItems); outputSlot = new OutputItemStackHandler(outputItems);
inputSlot = new InputItemStackHandler(itemsHandler);
data = new ContainerData() { data = new ContainerData() {
@Override @Override
public int get(int i) { public int get(int i) {
@ -91,6 +91,7 @@ public class CompressionChamberBlockEntity extends BlockEntity implements MenuPr
} }
}; };
private ItemStackHandler outputSlot; private ItemStackHandler outputSlot;
private ItemStackHandler inputSlot;
private final OTEEnergy ENERGY_STORAGE = new OTEEnergy(ENERGY_REQUIREMENT*3, ENERGY_REQUIREMENT*512) { private final OTEEnergy ENERGY_STORAGE = new OTEEnergy(ENERGY_REQUIREMENT*3, ENERGY_REQUIREMENT*512) {
@ -148,7 +149,7 @@ public class CompressionChamberBlockEntity extends BlockEntity implements MenuPr
public void onLoad() public void onLoad()
{ {
super.onLoad(); super.onLoad();
lazyItemHandler = LazyOptional.of(()->itemsHandler); lazyItemHandler = LazyOptional.of(()->inputSlot);
lazyOutputItems = LazyOptional.of(()->outputSlot); lazyOutputItems = LazyOptional.of(()->outputSlot);
lazyEnergyHandler = LazyOptional.of(()->ENERGY_STORAGE); lazyEnergyHandler = LazyOptional.of(()->ENERGY_STORAGE);
} }

View file

@ -1,6 +1,7 @@
package dev.zontreck.otemod.blocks.entity; package dev.zontreck.otemod.blocks.entity;
import dev.zontreck.otemod.implementation.OutputItemStackHandler; import dev.zontreck.libzontreck.items.InputItemStackHandler;
import dev.zontreck.libzontreck.items.OutputItemStackHandler;
import dev.zontreck.otemod.implementation.energy.IThresholdsEnergy; import dev.zontreck.otemod.implementation.energy.IThresholdsEnergy;
import dev.zontreck.otemod.implementation.energy.OTEEnergy; import dev.zontreck.otemod.implementation.energy.OTEEnergy;
import dev.zontreck.otemod.implementation.scrubber.ItemScrubberMenu; import dev.zontreck.otemod.implementation.scrubber.ItemScrubberMenu;
@ -58,6 +59,8 @@ public class ItemScrubberBlockEntity extends BlockEntity implements MenuProvider
} }
}; };
private ItemStackHandler outputSlot; private ItemStackHandler outputSlot;
private ItemStackHandler inputSlot;
private final OTEEnergy ENERGY_STORAGE = new OTEEnergy(ENERGY_REQ*3, ENERGY_REQ+512) { private final OTEEnergy ENERGY_STORAGE = new OTEEnergy(ENERGY_REQ*3, ENERGY_REQ+512) {
@ -78,6 +81,7 @@ public class ItemScrubberBlockEntity extends BlockEntity implements MenuProvider
public ItemScrubberBlockEntity(BlockPos pos, BlockState state) { public ItemScrubberBlockEntity(BlockPos pos, BlockState state) {
super(ModEntities.ITEM_SCRUBBER.get(), pos, state); super(ModEntities.ITEM_SCRUBBER.get(), pos, state);
outputSlot = new OutputItemStackHandler(outputItems); outputSlot = new OutputItemStackHandler(outputItems);
inputSlot = new InputItemStackHandler(itemsHandler);
this.data = new ContainerData() { this.data = new ContainerData() {
@ -148,7 +152,7 @@ public class ItemScrubberBlockEntity extends BlockEntity implements MenuProvider
public void onLoad() public void onLoad()
{ {
super.onLoad(); super.onLoad();
lazyItemHandler = LazyOptional.of(()->itemsHandler); lazyItemHandler = LazyOptional.of(()->inputSlot);
lazyOutputItems = LazyOptional.of(()->outputSlot); lazyOutputItems = LazyOptional.of(()->outputSlot);
lazyEnergyHandler = LazyOptional.of(()->ENERGY_STORAGE); lazyEnergyHandler = LazyOptional.of(()->ENERGY_STORAGE);
} }

View file

@ -1,7 +1,8 @@
package dev.zontreck.otemod.blocks.entity; package dev.zontreck.otemod.blocks.entity;
import dev.zontreck.libzontreck.items.InputItemStackHandler;
import dev.zontreck.libzontreck.items.OutputItemStackHandler;
import dev.zontreck.libzontreck.util.ItemUtils; import dev.zontreck.libzontreck.util.ItemUtils;
import dev.zontreck.otemod.implementation.OutputItemStackHandler;
import dev.zontreck.otemod.implementation.energy.IThresholdsEnergy; import dev.zontreck.otemod.implementation.energy.IThresholdsEnergy;
import dev.zontreck.otemod.implementation.energy.OTEEnergy; import dev.zontreck.otemod.implementation.energy.OTEEnergy;
import dev.zontreck.otemod.implementation.scrubber.MagicalScrubberMenu; import dev.zontreck.otemod.implementation.scrubber.MagicalScrubberMenu;
@ -63,6 +64,7 @@ public class MagicalScrubberBlockEntity extends BlockEntity implements MenuProvi
} }
}; };
private ItemStackHandler outputSlot; private ItemStackHandler outputSlot;
private ItemStackHandler inputSlot;
private final OTEEnergy ENERGY_STORAGE = new OTEEnergy(ENERGY_REQ*3, ENERGY_REQ+512) { private final OTEEnergy ENERGY_STORAGE = new OTEEnergy(ENERGY_REQ*3, ENERGY_REQ+512) {
@ -83,6 +85,7 @@ public class MagicalScrubberBlockEntity extends BlockEntity implements MenuProvi
public MagicalScrubberBlockEntity(BlockPos pos, BlockState state) { public MagicalScrubberBlockEntity(BlockPos pos, BlockState state) {
super(ModEntities.MAGICAL_SCRUBBER.get(), pos, state); super(ModEntities.MAGICAL_SCRUBBER.get(), pos, state);
outputSlot = new OutputItemStackHandler(outputItems); outputSlot = new OutputItemStackHandler(outputItems);
inputSlot = new InputItemStackHandler(itemsHandler);
this.data = new ContainerData() { this.data = new ContainerData() {
@ -153,7 +156,7 @@ public class MagicalScrubberBlockEntity extends BlockEntity implements MenuProvi
public void onLoad() public void onLoad()
{ {
super.onLoad(); super.onLoad();
lazyItemHandler = LazyOptional.of(()->itemsHandler); lazyItemHandler = LazyOptional.of(()->inputSlot);
lazyOutputItems = LazyOptional.of(()->outputSlot); lazyOutputItems = LazyOptional.of(()->outputSlot);
lazyEnergyHandler = LazyOptional.of(()->ENERGY_STORAGE); lazyEnergyHandler = LazyOptional.of(()->ENERGY_STORAGE);
} }

View file

@ -1,12 +1,10 @@
package dev.zontreck.otemod.blocks.entity; package dev.zontreck.otemod.blocks.entity;
import dev.zontreck.libzontreck.util.ItemUtils; import dev.zontreck.libzontreck.items.InputItemStackHandler;
import dev.zontreck.otemod.implementation.OutputItemStackHandler; import dev.zontreck.libzontreck.items.OutputItemStackHandler;
import dev.zontreck.otemod.implementation.energy.IThresholdsEnergy; import dev.zontreck.otemod.implementation.energy.IThresholdsEnergy;
import dev.zontreck.otemod.implementation.energy.OTEEnergy; import dev.zontreck.otemod.implementation.energy.OTEEnergy;
import dev.zontreck.otemod.implementation.scrubber.MagicalScrubberMenu;
import dev.zontreck.otemod.implementation.uncrafting.UncrafterMenu; import dev.zontreck.otemod.implementation.uncrafting.UncrafterMenu;
import dev.zontreck.otemod.items.PartialItem;
import dev.zontreck.otemod.networking.ModMessages; import dev.zontreck.otemod.networking.ModMessages;
import dev.zontreck.otemod.networking.packets.EnergySyncS2CPacket; import dev.zontreck.otemod.networking.packets.EnergySyncS2CPacket;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
@ -20,16 +18,7 @@ import net.minecraft.world.entity.player.Inventory;
import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.player.Player;
import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.inventory.AbstractContainerMenu;
import net.minecraft.world.inventory.ContainerData; import net.minecraft.world.inventory.ContainerData;
import net.minecraft.world.inventory.CraftingContainer;
import net.minecraft.world.item.EnchantedBookItem;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Items;
import net.minecraft.world.item.crafting.CraftingRecipe;
import net.minecraft.world.item.crafting.Recipe;
import net.minecraft.world.item.crafting.RecipeType;
import net.minecraft.world.item.enchantment.Enchantment;
import net.minecraft.world.item.enchantment.EnchantmentInstance;
import net.minecraft.world.level.Level; import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
@ -39,7 +28,6 @@ import net.minecraftforge.common.util.LazyOptional;
import net.minecraftforge.energy.IEnergyStorage; import net.minecraftforge.energy.IEnergyStorage;
import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.IItemHandler;
import net.minecraftforge.items.ItemStackHandler; import net.minecraftforge.items.ItemStackHandler;
import org.jetbrains.annotations.NotNull;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import java.util.*; import java.util.*;
@ -70,6 +58,7 @@ public class UncrafterBlockEntity extends BlockEntity implements MenuProvider, I
} }
}; };
private ItemStackHandler outputSlot; private ItemStackHandler outputSlot;
private ItemStackHandler inputSlot;
private final OTEEnergy ENERGY_STORAGE = new OTEEnergy(ENERGY_REQ*3, ENERGY_REQ+512) { private final OTEEnergy ENERGY_STORAGE = new OTEEnergy(ENERGY_REQ*3, ENERGY_REQ+512) {
@ -90,6 +79,7 @@ public class UncrafterBlockEntity extends BlockEntity implements MenuProvider, I
public UncrafterBlockEntity(BlockPos pos, BlockState state) { public UncrafterBlockEntity(BlockPos pos, BlockState state) {
super(ModEntities.UNCRAFTER.get(), pos, state); super(ModEntities.UNCRAFTER.get(), pos, state);
outputSlot = new OutputItemStackHandler(outputItems); outputSlot = new OutputItemStackHandler(outputItems);
inputSlot = new InputItemStackHandler(itemsHandler);
this.data = new ContainerData() { this.data = new ContainerData() {
@ -160,7 +150,7 @@ public class UncrafterBlockEntity extends BlockEntity implements MenuProvider, I
public void onLoad() public void onLoad()
{ {
super.onLoad(); super.onLoad();
lazyItemHandler = LazyOptional.of(()->itemsHandler); lazyItemHandler = LazyOptional.of(()->inputSlot);
lazyOutputItems = LazyOptional.of(()->outputSlot); lazyOutputItems = LazyOptional.of(()->outputSlot);
lazyEnergyHandler = LazyOptional.of(()->ENERGY_STORAGE); lazyEnergyHandler = LazyOptional.of(()->ENERGY_STORAGE);
} }

View file

@ -83,6 +83,7 @@ public class ServerConfig
tag.put(Cooldowns.TAG_NAME, cooldowns.save()); tag.put(Cooldowns.TAG_NAME, cooldowns.save());
tag.put(AntiGrief.TAG_NAME, antigrief.save()); tag.put(AntiGrief.TAG_NAME, antigrief.save());
tag.put(ChatOverrides.TAG_NAME, chatOverrides.save()); tag.put(ChatOverrides.TAG_NAME, chatOverrides.save());
tag.put(Drops.TAG_NAME, drops.save());
return tag; return tag;

View file

@ -10,8 +10,8 @@ public class Drops
public static final String TAG_PLAYER_HEAD_CHANCE = "playerHeadChance"; public static final String TAG_PLAYER_HEAD_CHANCE = "playerHeadChance";
public boolean enablePlayerHeadChance = true; public boolean enablePlayerHeadChance = true;
public float mobEggingChance = 0.25f; public int mobEggingChance = 5;
public float playerHeadChance=0.5f; public int playerHeadChance=10;
public CompoundTag save() public CompoundTag save()
@ -32,10 +32,10 @@ public class Drops
drops.enablePlayerHeadChance = tag.getBoolean(TAG_PLAYER_HEAD_DROPS); drops.enablePlayerHeadChance = tag.getBoolean(TAG_PLAYER_HEAD_DROPS);
if(tag.contains(TAG_SPAWN_EGG_CHANCE)) if(tag.contains(TAG_SPAWN_EGG_CHANCE))
drops.mobEggingChance = tag.getFloat(TAG_SPAWN_EGG_CHANCE); drops.mobEggingChance = tag.getInt(TAG_SPAWN_EGG_CHANCE);
if(tag.contains(TAG_PLAYER_HEAD_CHANCE)) if(tag.contains(TAG_PLAYER_HEAD_CHANCE))
drops.playerHeadChance = tag.getFloat(TAG_PLAYER_HEAD_CHANCE); drops.playerHeadChance = tag.getInt(TAG_PLAYER_HEAD_CHANCE);
return drops; return drops;
} }

View file

@ -7,6 +7,8 @@ import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.enchantment.Enchantment; import net.minecraft.world.item.enchantment.Enchantment;
import net.minecraft.world.item.enchantment.EnchantmentCategory; import net.minecraft.world.item.enchantment.EnchantmentCategory;
import java.util.Random;
public class MobEggEnchantment extends Enchantment public class MobEggEnchantment extends Enchantment
{ {
public static final String TAG_BIAS = "mob_egging_bias"; public static final String TAG_BIAS = "mob_egging_bias";
@ -59,17 +61,27 @@ public class MobEggEnchantment extends Enchantment
public static boolean givesEgg(int level, int bias) public static boolean givesEgg(int level, int bias)
{ {
double CHANCE = ServerConfig.drops.mobEggingChance * 100; int CHANCE = ServerConfig.drops.mobEggingChance;
CHANCE *= (level / 0.5); CHANCE += level;
CHANCE += bias; CHANCE += bias;
double rng = Math.random()*100000;
if(ServerConfig.general.debug) if(ServerConfig.general.debug)
{ {
OTEMod.LOGGER.info("Spawn Egg Chance (" + CHANCE + ") [" + rng + "]"); OTEMod.LOGGER.info("Spawn Egg Chance (" + CHANCE + ")");
} }
return (rng <= CHANCE); return rollChance((int)CHANCE);
}
public static boolean rollChance(int percent)
{
Random rng = new Random();
int test = rng.nextInt(100) + 1;
if(ServerConfig.general.debug)
{
OTEMod.LOGGER.info("Spawn Egg Dice Roll (" + test + " / " + percent + ")");
}
return test <= percent;
} }
} }

View file

@ -1,25 +1,14 @@
package dev.zontreck.otemod.entities; package dev.zontreck.otemod.entities;
import dev.zontreck.otemod.OTEMod; import dev.zontreck.otemod.OTEMod;
import dev.zontreck.otemod.entities.monsters.PossumEntity;
import dev.zontreck.otemod.items.ThrownMobCaptureBall;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.EntityType;
import net.minecraft.world.entity.MobCategory;
import net.minecraft.world.entity.projectile.Snowball;
import net.minecraft.world.entity.projectile.ThrowableItemProjectile;
import net.minecraftforge.eventbus.api.IEventBus; import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.ForgeRegistries; import net.minecraftforge.registries.ForgeRegistries;
import net.minecraftforge.registries.RegistryObject;
public class ModEntityTypes { public class ModEntityTypes {
public static final DeferredRegister<EntityType<?>> ENTITIES = DeferredRegister.create(ForgeRegistries.ENTITY_TYPES, OTEMod.MOD_ID); public static final DeferredRegister<EntityType<?>> ENTITIES = DeferredRegister.create(ForgeRegistries.ENTITY_TYPES, OTEMod.MOD_ID);
//public static final RegistryObject<EntityType<? extends PossumEntity>> POSSUM = ENTITIES.register("possum", ()-> EntityType.Builder.of(PossumEntity::new, MobCategory.CREATURE).sized(1.5f, 0.5f).build(new ResourceLocation(OTEMod.MOD_ID, "possum").toString()));
private static EntityType registerEntity(EntityType.Builder builder, String entityName) { private static EntityType registerEntity(EntityType.Builder builder, String entityName) {
return builder.build(entityName); return builder.build(entityName);
} }

View file

@ -1,59 +0,0 @@
package dev.zontreck.otemod.entities.monsters;
public class PossumEntity
{
/*
public PossumEntity(EntityType<? extends Animal> pEntityType, Level pLevel) {
super(pEntityType, pLevel);
//TODO Auto-generated constructor stub
}
private AnimationFactory factory = GeckoLibUtil.createFactory(this);
@Override
public AnimationFactory getFactory() {
return factory;
}
@Override
public PossumEntity getBreedOffspring(ServerLevel pLevel, AgeableMob pOtherParent) {
return (PossumEntity) ModEntityTypes.POSSUM.get().create(pLevel);
}
@Override
public boolean isFood(ItemStack pStack)
{
return pStack.is(Items.APPLE);
}
public static AttributeSupplier createAttributes() {
return Mob.createMobAttributes().add(Attributes.MAX_HEALTH, 12.0D).add(Attributes.MOVEMENT_SPEED, (double)0.2F).build();
}
private <E extends IAnimatable> PlayState predicate(AnimationEvent<E> ev)
{
if(ev.isMoving())
{
// change anim
return PlayState.CONTINUE;
}
ev.getController().setAnimation(new AnimationBuilder().addAnimation("animation.model.idle", ILoopType.EDefaultLoopTypes.LOOP));
return PlayState.CONTINUE;
}
@Override
public void registerControllers(AnimationData data) {
data.addAnimationController(new AnimationController<IAnimatable>(this, "controller", 0, this::predicate));
}
@Override
public void registerGoals()
{
this.goalSelector.addGoal(0, new FloatGoal(this));
this.goalSelector.addGoal(1, new WaterAvoidingRandomStrollGoal(this, 1));
}*/
}

View file

@ -1,22 +0,0 @@
package dev.zontreck.otemod.entities.monsters.client;
public class PossumModel
{
/*
@Override
public ResourceLocation getAnimationFileLocation(PossumEntity animatable) {
return new ResourceLocation(OTEMod.MOD_ID, "animations/possum.animation.json");
}
@Override
public ResourceLocation getModelLocation(PossumEntity object) {
return new ResourceLocation(OTEMod.MOD_ID, "geo/possum.geo.json");
}
@Override
public ResourceLocation getTextureLocation(PossumEntity object) {
return new ResourceLocation(OTEMod.MOD_ID, "textures/entity/possum_texture.png");
}*/
}

View file

@ -1,29 +0,0 @@
package dev.zontreck.otemod.entities.monsters.client;
public class PossumRenderer
{
/*
public PossumRenderer(EntityRendererProvider.Context renderManager) {
super(renderManager, new PossumModel());
this.shadowRadius=0.3f;
}
@Override
public ResourceLocation getTextureLocation(PossumEntity entity)
{
return new ResourceLocation(OTEMod.MOD_ID, "textures/entity/possum_texture.png");
}
@Override
public RenderType getRenderType(PossumEntity animatable, float partialTicks,
PoseStack stack, MultiBufferSource buffer,
VertexConsumer consumer, int packed, ResourceLocation loc)
{
return super.getRenderType(animatable, partialTicks, stack, buffer, consumer, packed, loc);
}
*/
}

View file

@ -17,6 +17,7 @@ import dev.zontreck.otemod.enchantments.ModEnchantments;
import dev.zontreck.otemod.implementation.DeathMessages; import dev.zontreck.otemod.implementation.DeathMessages;
import dev.zontreck.otemod.implementation.InventoryBackup; import dev.zontreck.otemod.implementation.InventoryBackup;
import dev.zontreck.otemod.implementation.Messages; import dev.zontreck.otemod.implementation.Messages;
import dev.zontreck.otemod.items.tags.ItemStatType;
import dev.zontreck.otemod.registry.ModDimensions; import dev.zontreck.otemod.registry.ModDimensions;
import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Component;
@ -28,6 +29,7 @@ import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.item.ItemEntity; import net.minecraft.world.entity.item.ItemEntity;
import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.SpawnEggItem;
import net.minecraft.world.item.enchantment.Enchantments; import net.minecraft.world.item.enchantment.Enchantments;
import net.minecraft.world.level.GameType; import net.minecraft.world.level.GameType;
import net.minecraftforge.common.ForgeSpawnEggItem; import net.minecraftforge.common.ForgeSpawnEggItem;
@ -73,12 +75,11 @@ public class EventHandler {
} }
// Calculate chance // Calculate chance
double base_chance = ServerConfig.drops.playerHeadChance; double base_chance = (ServerConfig.drops.playerHeadChance * 100);
base_chance += looting; base_chance += looting;
base_chance *= 100;
Random rng = new Random(); Random rng = new Random();
double num = rng.nextDouble(0,100000); int num = rng.nextInt(100) + 1;
if(num <= base_chance) if(num <= base_chance)
{ {
ItemStack head = HeadUtilities.get(profile.username, "").setHoverName(ChatHelpers.macro(profile.nickname+"'s Head")); ItemStack head = HeadUtilities.get(profile.username, "").setHoverName(ChatHelpers.macro(profile.nickname+"'s Head"));
@ -160,9 +161,13 @@ public class EventHandler {
// Check enchantment level for looting // Check enchantment level for looting
int level = ItemUtils.getEnchantmentLevel (Enchantments.MOB_LOOTING,stack); int level = ItemUtils.getEnchantmentLevel (Enchantments.MOB_LOOTING,stack);
if(level==3){ if(level==3){
ItemStack egg = new ItemStack(ForgeSpawnEggItem.fromEntityType(killed.getType())); ItemStack egg = new ItemStack(
ForgeSpawnEggItem.fromEntityType(killed.getType())
);
ev.getDrops().add(new ItemEntity(killed.level(), killed.getX(), killed.getY(), killed.getZ(), egg)); ev.getDrops().add(new ItemEntity(killed.level(), killed.getX(), killed.getY(), killed.getZ(), egg));
//LoreHandlers.updateItem(stack, ItemStatType.EGGING); LoreHandlers.updateItem(stack, ItemStatType.EGGING);
} }
}else{ }else{
bias += 1; bias += 1;

View file

@ -3,7 +3,11 @@ package dev.zontreck.otemod.events;
import dev.zontreck.libzontreck.lore.LoreContainer; import dev.zontreck.libzontreck.lore.LoreContainer;
import dev.zontreck.libzontreck.lore.LoreEntry; import dev.zontreck.libzontreck.lore.LoreEntry;
import dev.zontreck.libzontreck.util.ChatHelpers; import dev.zontreck.libzontreck.util.ChatHelpers;
import dev.zontreck.libzontreck.util.ItemUtils;
import dev.zontreck.otemod.OTEMod; import dev.zontreck.otemod.OTEMod;
import dev.zontreck.otemod.configs.snbt.ServerConfig;
import dev.zontreck.otemod.enchantments.MobEggEnchantment;
import dev.zontreck.otemod.enchantments.ModEnchantments;
import dev.zontreck.otemod.items.tags.ItemStatTag; import dev.zontreck.otemod.items.tags.ItemStatTag;
import dev.zontreck.otemod.items.tags.ItemStatType; import dev.zontreck.otemod.items.tags.ItemStatType;
import dev.zontreck.otemod.items.tags.ItemStatistics; import dev.zontreck.otemod.items.tags.ItemStatistics;
@ -75,7 +79,7 @@ public class LoreHandlers {
{ {
if(bs.is(Blocks.DIRT) || bs.is(Blocks.GRASS_BLOCK)) if(bs.is(Blocks.DIRT) || bs.is(Blocks.GRASS_BLOCK))
{ {
OTEMod.LOGGER.info("DIRT!"); //OTEMod.LOGGER.info("DIRT!");
updateItem(itemUsed, ItemStatType.HOE); updateItem(itemUsed, ItemStatType.HOE);
} }
} else if(sName.contains("shovel")) } else if(sName.contains("shovel"))
@ -98,7 +102,7 @@ public class LoreHandlers {
{ {
// Check the entity right-clicked, and the item in hand // Check the entity right-clicked, and the item in hand
OTEMod.LOGGER.info("Success"); //OTEMod.LOGGER.info("Success");
ServerPlayer sp = (ServerPlayer)ev.getEntity(); ServerPlayer sp = (ServerPlayer)ev.getEntity();
ItemStack itemUsed = sp.getMainHandItem(); ItemStack itemUsed = sp.getMainHandItem();
Entity target = ev.getTarget(); Entity target = ev.getTarget();
@ -149,6 +153,10 @@ public class LoreHandlers {
} }
if(ItemUtils.getEnchantmentLevel(ModEnchantments.MOB_EGGING_ENCHANTMENT.get(), weaponUsed) > 0) {
updateItem(weaponUsed, ItemStatType.EGG_CHANCE);
}
} }
// Only valid to be used by OTEMod // Only valid to be used by OTEMod
@ -159,31 +167,59 @@ public class LoreHandlers {
// Update the mob kill count // Update the mob kill count
CompoundTag props = weaponUsed.getTag(); CompoundTag props = weaponUsed.getTag();
if(props==null)props=new CompoundTag(); if(props==null){
CompoundTag container = props.getCompound(ItemStatTag.STATS_TAG+"_"+type.name().toLowerCase()); props=new CompoundTag();
weaponUsed.setTag(props);
}
String tagName = ItemStatTag.STATS_TAG + "_" + type.name().toLowerCase();
CompoundTag container = new CompoundTag();
if(!props.contains(tagName))
{
props.put(tagName, container);
}else container = props.getCompound(ItemStatTag.STATS_TAG+"_"+type.name().toLowerCase());
LoreContainer contain = new LoreContainer(weaponUsed); LoreContainer contain = new LoreContainer(weaponUsed);
ItemStatTag isTag; ItemStatTag isTag;
try{ try{
isTag = new ItemStatTag(type, container.getInt(ItemStatTag.STATS_TAG+"_"+type.name().toLowerCase())); isTag = new ItemStatTag(type, (container.contains("pos") ? container.getInt("pos") : contain.miscData.loreData.size()), container.getInt("value"));
}catch (Exception e){ }catch (Exception e){
isTag = new ItemStatTag(type, 0); isTag = new ItemStatTag(type, contain.miscData.loreData.size(), 0);
} }
isTag.increment(); if(type == ItemStatType.EGG_CHANCE)
{
int bias = weaponUsed.getTag().getInt(MobEggEnchantment.TAG_BIAS);
int level = ItemUtils.getEnchantmentLevel(ModEnchantments.MOB_EGGING_ENCHANTMENT.get(), weaponUsed);
double percent = ((ServerConfig.drops.mobEggingChance) + (level + bias));
isTag.setValue((int)percent);
}else isTag.increment();
LoreEntry entry; LoreEntry entry;
if(contain.miscData.loreData.size()==0) if(contain.miscData.loreData.size()==0)
{ {
// Missing entry // Missing entry
entry = new LoreEntry.Builder().text(ItemStatistics.makeText(isTag)).build(); entry = new LoreEntry.Builder().text(ItemStatistics.makeText(isTag)).build();
contain.miscData.loreData.add(entry); contain.miscData.loreData.add(entry);
}else { }else {
entry = contain.miscData.loreData.get(0); // Stat is set at 0 if(contain.miscData.loreData.size() == isTag.tagPosition)
entry.text = ItemStatistics.makeText(isTag); {
entry = new LoreEntry.Builder().text(ItemStatistics.makeText(isTag)).build();
contain.miscData.loreData.add(entry);
}else {
entry = contain.miscData.loreData.get(isTag.tagPosition); // Stat is set at 0
entry.text = ItemStatistics.makeText(isTag);
}
} }
// Update item // Update item
contain.commitLore(); contain.commitLore();
container.putInt("pos", isTag.tagPosition);
container.putInt("value", isTag.value);
weaponUsed.setTag(props);
}catch(Exception e) }catch(Exception e)
{ {
e.printStackTrace(); e.printStackTrace();

View file

@ -1,10 +1,6 @@
package dev.zontreck.otemod.events; package dev.zontreck.otemod.events;
import dev.zontreck.otemod.OTEMod; import dev.zontreck.otemod.OTEMod;
import dev.zontreck.otemod.entities.ModEntityTypes;
import dev.zontreck.otemod.entities.monsters.PossumEntity;
import net.minecraft.world.entity.EntityType;
import net.minecraft.world.entity.LivingEntity;
import net.minecraftforge.event.entity.EntityAttributeCreationEvent; import net.minecraftforge.event.entity.EntityAttributeCreationEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.Mod;

View file

@ -1,44 +0,0 @@
package dev.zontreck.otemod.implementation;
import net.minecraft.core.NonNullList;
import net.minecraft.world.item.ItemStack;
import net.minecraftforge.items.ItemStackHandler;
public class OutputItemStackHandler extends ItemStackHandler {
private final ItemStackHandler internalSlot;
public OutputItemStackHandler(ItemStackHandler hidden) {
super();
internalSlot = hidden;
}
@Override
public void setSize(int size) {
stacks = NonNullList.<ItemStack>withSize(size, ItemStack.EMPTY);
}
@Override
public void setStackInSlot(int slot, ItemStack stack) {
internalSlot.setStackInSlot(slot, stack);
}
@Override
public int getSlots() {
return internalSlot.getSlots();
}
@Override
public ItemStack getStackInSlot(int slot) {
return internalSlot.getStackInSlot(slot);
}
@Override
public ItemStack insertItem(int slot, ItemStack stack, boolean simulate) {
return stack;
}
@Override
public ItemStack extractItem(int slot, int amount, boolean simulate) {
return internalSlot.extractItem(slot, amount, simulate);
}
}

View file

@ -16,14 +16,10 @@ public class ModItems {
public static final RegistryObject<Item> IHAN_CRYSTAL = CreativeModeTabs.addToOTEModTab(ITEMS.register("ihan_crystal", () -> new IhanCrystal())); public static final RegistryObject<Item> IHAN_CRYSTAL = CreativeModeTabs.addToOTEModTab(ITEMS.register("ihan_crystal", () -> new IhanCrystal()));
public static final RegistryObject<Item> ETERNIUM_RAW_ORE = CreativeModeTabs.addToOTEModTab(ITEMS.register("eternium_ore", () -> new Item(new Item.Properties()))); public static final RegistryObject<Item> ETERNIUM_RAW_ORE = CreativeModeTabs.addToOTEModTab(ITEMS.register("eternium_ore", () -> new Item(new Item.Properties())));
public static final RegistryObject<Item> ETERNIUM_INGOT = CreativeModeTabs.addToOTEModTab(ITEMS.register("eternium_ingot", ()-> new SimpleFoiledItem(new Item.Properties()))); public static final RegistryObject<Item> ETERNIUM_INGOT = CreativeModeTabs.addToOTEModTab(ITEMS.register("eternium_ingot", ()-> new SimpleFoiledItem(new Item.Properties())));
public static final RegistryObject<Item> MELTED_ENDER_PEARL = CreativeModeTabs.addToOTEModTab(ITEMS.register("melted_ender_pearl", () -> new SimpleFoiledItem(new Item.Properties().stacksTo(64)))); public static final RegistryObject<Item> MELTED_ENDER_PEARL = CreativeModeTabs.addToOTEModTab(ITEMS.register("melted_ender_pearl", () -> new SimpleFoiledItem(new Item.Properties().stacksTo(64))));
public static final RegistryObject<Item> SINGULARITY = CreativeModeTabs.addToOTEModTab(ITEMS.register("singularity", () -> new UnstableSingularity(new Item.Properties().stacksTo(1)))); public static final RegistryObject<Item> SINGULARITY = CreativeModeTabs.addToOTEModTab(ITEMS.register("singularity", () -> new UnstableSingularity(new Item.Properties().stacksTo(1))));

View file

@ -5,12 +5,14 @@ import net.minecraft.nbt.CompoundTag;
public class ItemStatTag { public class ItemStatTag {
public static final String STATS_TAG = "stat"; public static final String STATS_TAG = "stat";
public ItemStatType type; public ItemStatType type;
public int tagPosition;
public int value; public int value;
public ItemStatTag(ItemStatType t, int tag) public ItemStatTag(ItemStatType t, int tagPos, int tag)
{ {
type = t; type = t;
value = tag; value = tag;
tagPosition = tagPos;
} }
public void increment(){ public void increment(){
@ -21,6 +23,11 @@ public class ItemStatTag {
value--; value--;
} }
public void setValue(int value)
{
this.value=value;
}
public void save(CompoundTag tag) public void save(CompoundTag tag)
{ {
tag.putInt(STATS_TAG+"_"+type.name().toLowerCase(), value); tag.putInt(STATS_TAG+"_"+type.name().toLowerCase(), value);

View file

@ -9,5 +9,6 @@ public enum ItemStatType {
SHOVELPATH, SHOVELPATH,
HOE, HOE,
SHEARS, SHEARS,
EGGING EGGING,
EGG_CHANCE
} }

View file

@ -11,6 +11,7 @@ public class ItemStatistics {
public static String makeText(ItemStatType type, int val) public static String makeText(ItemStatType type, int val)
{ {
String lore = ChatColor.doColors("!White!"); String lore = ChatColor.doColors("!White!");
String sAppend = "";
switch(type) switch(type)
{ {
case SWORD -> { case SWORD -> {
@ -38,10 +39,14 @@ public class ItemStatistics {
lore += "Sheep Shaved: "; lore += "Sheep Shaved: ";
} }
case EGGING -> { case EGGING -> {
lore += "Mobs Egged: "; lore += "Spawn Eggs Dropped: ";
}
case EGG_CHANCE -> {
lore += "Spawn Egg Chance: ";
sAppend = "!White!%";
} }
} }
lore += ChatColor.doColors("!Green!"+val); lore += ChatColor.doColors("!Green!"+val + sAppend);
return lore; return lore;
} }
} }

View file

@ -1,9 +0,0 @@
{
"format_version": "1.8.0",
"animations": {
"animation.model.idle": {
"loop": true
}
},
"geckolib_format_version": 2
}

View file

@ -1,321 +0,0 @@
{
"format_version": "1.12.0",
"minecraft:geometry": [
{
"description": {
"identifier": "geometry.unknown",
"texture_width": 64,
"texture_height": 64,
"visible_bounds_width": 3,
"visible_bounds_height": 2.5,
"visible_bounds_offset": [0, 0.75, 0]
},
"bones": [
{
"name": "tail",
"pivot": [5, 1, 10],
"cubes": [
{
"origin": [-7, 5, 1],
"size": [2, 1, 2],
"uv": {
"north": {"uv": [42, 57], "uv_size": [5, 5]},
"east": {"uv": [28, 58], "uv_size": [5, 6]},
"south": {"uv": [20, 58], "uv_size": [6, 6]},
"west": {"uv": [13, 59], "uv_size": [5, 5]},
"up": {"uv": [6, 59], "uv_size": [7, 5]},
"down": {"uv": [0, 64], "uv_size": [6, -5]}
}
},
{
"origin": [-7, 4, 2],
"size": [2, 1, 1],
"uv": {
"north": {"uv": [31, 59], "uv_size": [5, 5]},
"east": {"uv": [25, 58], "uv_size": [4, 6]},
"south": {"uv": [19, 58], "uv_size": [6, 6]},
"west": {"uv": [13, 59], "uv_size": [5, 5]},
"up": {"uv": [6, 59], "uv_size": [7, 5]},
"down": {"uv": [0, 64], "uv_size": [6, -5]}
}
},
{
"origin": [-7, 2, -1],
"size": [1, 1, 2],
"uv": {
"north": {"uv": [59, 56], "uv_size": [4, 5]},
"east": {"uv": [22, 58], "uv_size": [5, 6]},
"south": {"uv": [16, 58], "uv_size": [5, 6]},
"west": {"uv": [11, 59], "uv_size": [5, 5]},
"up": {"uv": [5, 59], "uv_size": [6, 5]},
"down": {"uv": [0, 64], "uv_size": [5, -5]}
}
},
{
"origin": [-7, 1, -2],
"size": [2, 1, 2],
"uv": {
"north": {"uv": [36, 55], "uv_size": [5, 5]},
"east": {"uv": [27, 58], "uv_size": [5, 6]},
"south": {"uv": [20, 58], "uv_size": [6, 6]},
"west": {"uv": [13, 59], "uv_size": [6, 5]},
"up": {"uv": [6, 59], "uv_size": [7, 5]},
"down": {"uv": [0, 64], "uv_size": [6, -5]}
}
},
{
"origin": [-6, 2, -2],
"size": [1, 1, 2],
"uv": {
"north": {"uv": [36, 58], "uv_size": [4, 5]},
"east": {"uv": [24, 58], "uv_size": [5, 6]},
"south": {"uv": [19, 58], "uv_size": [5, 6]},
"west": {"uv": [11, 59], "uv_size": [6, 5]},
"up": {"uv": [5, 59], "uv_size": [6, 5]},
"down": {"uv": [0, 64], "uv_size": [5, -5]}
}
},
{
"origin": [-7, 1, -3],
"size": [2, 1, 1],
"uv": {
"north": {"uv": [32, 58], "uv_size": [5, 5]},
"east": {"uv": [25, 58], "uv_size": [4, 6]},
"south": {"uv": [18, 58], "uv_size": [6, 6]},
"west": {"uv": [13, 60], "uv_size": [4, 4]},
"up": {"uv": [6, 60], "uv_size": [7, 4]},
"down": {"uv": [0, 64], "uv_size": [6, -4]}
}
},
{
"origin": [-8, 3, 0],
"size": [1, 2, 2],
"uv": {
"north": {"uv": [48, 58], "uv_size": [4, 6]},
"east": {"uv": [25, 57], "uv_size": [5, 7]},
"south": {"uv": [18, 57], "uv_size": [5, 7]},
"west": {"uv": [11, 59], "uv_size": [5, 5]},
"up": {"uv": [5, 59], "uv_size": [6, 5]},
"down": {"uv": [0, 64], "uv_size": [5, -5]}
}
},
{
"origin": [-7, 3, 1],
"size": [1, 2, 1],
"uv": {
"north": {"uv": [30, 57], "uv_size": [4, 6]},
"east": {"uv": [23, 57], "uv_size": [4, 7]},
"south": {"uv": [17, 57], "uv_size": [5, 7]},
"west": {"uv": [11, 60], "uv_size": [4, 4]},
"up": {"uv": [5, 60], "uv_size": [6, 4]},
"down": {"uv": [0, 64], "uv_size": [5, -4]}
}
},
{
"origin": [-7, 3, -1],
"size": [2, 2, 2],
"uv": {
"north": {"uv": [34, 57], "uv_size": [5, 6]},
"east": {"uv": [26, 57], "uv_size": [5, 7]},
"south": {"uv": [19, 57], "uv_size": [6, 7]},
"west": {"uv": [13, 59], "uv_size": [5, 5]},
"up": {"uv": [6, 59], "uv_size": [7, 5]},
"down": {"uv": [0, 64], "uv_size": [6, -5]}
}
},
{
"origin": [-9, 2, -2],
"size": [2, 2, 2],
"uv": {
"north": {"uv": [33, 57], "uv_size": [5, 6]},
"east": {"uv": [25, 57], "uv_size": [5, 7]},
"south": {"uv": [18, 57], "uv_size": [6, 7]},
"west": {"uv": [12, 59], "uv_size": [5, 5]},
"up": {"uv": [6, 59], "uv_size": [7, 5]},
"down": {"uv": [0, 64], "uv_size": [6, -5]}
}
},
{
"origin": [-7, 2, -3],
"size": [1, 1, 2],
"uv": {
"north": {"uv": [29, 56], "uv_size": [4, 5]},
"east": {"uv": [21, 58], "uv_size": [5, 6]},
"south": {"uv": [13, 58], "uv_size": [5, 6]},
"west": {"uv": [3, 59], "uv_size": [5, 5]},
"up": {"uv": [5, 59], "uv_size": [6, 5]},
"down": {"uv": [0, 64], "uv_size": [5, -5]}
}
},
{
"origin": [-8, 1, -6],
"size": [1, 1, 2],
"uv": {
"north": {"uv": [34, 56], "uv_size": [4, 5]},
"east": {"uv": [25, 58], "uv_size": [5, 6]},
"south": {"uv": [19, 58], "uv_size": [5, 6]},
"west": {"uv": [12, 59], "uv_size": [5, 5]},
"up": {"uv": [5, 59], "uv_size": [6, 5]},
"down": {"uv": [0, 64], "uv_size": [5, -5]}
}
},
{
"origin": [-8, 1, -4],
"size": [1, 2, 2],
"uv": {
"north": {"uv": [42, 57], "uv_size": [4, 6]},
"east": {"uv": [24, 57], "uv_size": [5, 7]},
"south": {"uv": [17, 57], "uv_size": [5, 7]},
"west": {"uv": [11, 59], "uv_size": [5, 5]},
"up": {"uv": [5, 59], "uv_size": [6, 5]},
"down": {"uv": [0, 64], "uv_size": [5, -5]}
}
},
{
"origin": [-8, -2, -8],
"size": [1, 1, 2],
"uv": {
"north": {"uv": [48, 57], "uv_size": [4, 5]},
"east": {"uv": [24, 58], "uv_size": [5, 6]},
"south": {"uv": [16, 58], "uv_size": [5, 6]},
"west": {"uv": [10, 60], "uv_size": [5, 4]},
"up": {"uv": [5, 59], "uv_size": [6, 5]},
"down": {"uv": [0, 64], "uv_size": [5, -5]}
}
},
{
"origin": [-7, 0, -5],
"size": [2, 2, 2],
"uv": {
"north": {"uv": [46, 58], "uv_size": [5, 4]},
"east": {"uv": [30, 61], "uv_size": [5, 3]},
"south": {"uv": [23, 58], "uv_size": [6, 6]},
"west": {"uv": [15, 60], "uv_size": [5, 4]},
"up": {"uv": [6, 58], "uv_size": [7, 6]},
"down": {"uv": [0, 64], "uv_size": [6, -6]}
}
},
{
"origin": [-8, 0, -7],
"size": [2, 1, 2],
"uv": {
"north": {"uv": [42, 56], "uv_size": [5, 5]},
"east": {"uv": [26, 58], "uv_size": [5, 6]},
"south": {"uv": [19, 58], "uv_size": [6, 6]},
"west": {"uv": [13, 60], "uv_size": [5, 4]},
"up": {"uv": [6, 59], "uv_size": [7, 5]},
"down": {"uv": [0, 64], "uv_size": [6, -5]}
}
},
{
"origin": [-7, -1, -7],
"size": [1, 1, 2],
"uv": {
"north": {"uv": [54, 59], "uv_size": [4, 5]},
"east": {"uv": [23, 58], "uv_size": [5, 6]},
"south": {"uv": [17, 58], "uv_size": [5, 6]},
"west": {"uv": [10, 60], "uv_size": [5, 4]},
"up": {"uv": [5, 59], "uv_size": [6, 5]},
"down": {"uv": [0, 64], "uv_size": [5, -5]}
}
},
{
"origin": [-8, -1, -8],
"size": [1, 1, 2],
"uv": {
"north": {"uv": [54, 58], "uv_size": [4, 5]},
"east": {"uv": [21, 58], "uv_size": [5, 6]},
"south": {"uv": [15, 58], "uv_size": [5, 6]},
"west": {"uv": [9, 60], "uv_size": [5, 4]},
"up": {"uv": [5, 59], "uv_size": [6, 5]},
"down": {"uv": [0, 64], "uv_size": [5, -5]}
}
},
{
"origin": [-9, -2, -8],
"size": [1, 2, 2],
"uv": {
"north": {"uv": [26, 58], "uv_size": [4, 6]},
"east": {"uv": [31, 57], "uv_size": [5, 7]},
"south": {"uv": [17, 57], "uv_size": [5, 7]},
"west": {"uv": [12, 59], "uv_size": [5, 5]},
"up": {"uv": [5, 59], "uv_size": [6, 5]},
"down": {"uv": [0, 64], "uv_size": [5, -5]}
}
}
]
},
{
"name": "body",
"pivot": [0, 0, 0],
"cubes": [
{
"origin": [-4, 3, 6],
"size": [7, 4, 1],
"uv": {
"north": {"uv": [3, 6], "uv_size": [7, 4]},
"east": {"uv": [7, 0], "uv_size": [3, 7]},
"south": {"uv": [14, 0], "uv_size": [7, 4]},
"west": {"uv": [24, 0], "uv_size": [3, 10]},
"up": {"uv": [11, 6], "uv_size": [12, 4]},
"down": {"uv": [41, 4], "uv_size": [7, -4]}
}
},
{
"origin": [-5, 1.75, -2],
"size": [9, 6, 8],
"uv": {
"north": {"uv": [8, 8], "uv_size": [9, 6]},
"east": {"uv": [0, 8], "uv_size": [8, 6]},
"south": {"uv": [25, 8], "uv_size": [9, 6]},
"west": {"uv": [17, 8], "uv_size": [8, 6]},
"up": {"uv": [8, 0], "uv_size": [9, 8]},
"down": {"uv": [17, 8], "uv_size": [9, -8]}
}
},
{
"origin": [-4, 2, -3],
"size": [7, 4, 1],
"uv": {
"north": {"uv": [10, 0], "uv_size": [10, 8]},
"east": {"uv": [27, 4], "uv_size": [2, 11]},
"south": {"uv": [0, 0], "uv_size": [11, 3]},
"west": {"uv": [22, 2], "uv_size": [3, 8]},
"up": {"uv": [18, 0], "uv_size": [7, 2]},
"down": {"uv": [29, 2], "uv_size": [7, -2]}
}
}
]
},
{
"name": "feet",
"pivot": [0, 0, 0],
"cubes": [
{"origin": [-5, 1, -1.9], "size": [3, 1, 3], "uv": [0, 16]},
{"origin": [-5, 1, 3], "size": [3, 1, 3], "uv": [0, 16]},
{"origin": [1, 1, -1.9], "size": [3, 1, 3], "uv": [0, 16]},
{"origin": [1, 1, 3.1], "size": [3, 1, 3], "uv": [0, 16]}
]
},
{
"name": "head",
"pivot": [0, 0, 0],
"cubes": [
{"origin": [2, 7, -1], "size": [4, 5, 6], "uv": [44, 5]},
{"origin": [6, 7, 0], "size": [1, 3, 4], "uv": [54, 0]},
{"origin": [7, 8, 1], "size": [1, 1, 2], "uv": [42, 5]},
{"origin": [1, 8, 0], "size": [1, 3, 4], "uv": [33, 0]}
]
},
{
"name": "ears",
"pivot": [0, 0, 0],
"cubes": [
{"origin": [3, 11, -2], "size": [1, 2, 2], "uv": [13, 16]},
{"origin": [3, 11, 4], "size": [1, 2, 2], "uv": [12, 16]}
]
}
]
}
]
}

View file

@ -1,8 +1,8 @@
{ {
"key.otemod.open_vault": "Opens Vault 0", "key.otemod.open_vault": "Opens Vault 0",
"key.category.otemod": "Only The Essentials", "key.category.otemod": "Thresholds",
"itemGroup.tabs.otemod": "OTEMod", "itemGroup.tabs.otemod": "Thresholds",
"item.minecraft.splash_potion.effect.flight": "Splash Potion of Flight", "item.minecraft.splash_potion.effect.flight": "Splash Potion of Flight",
"item.minecraft.lingering_potion.effect.flight": "Lingering Potion of Flight", "item.minecraft.lingering_potion.effect.flight": "Lingering Potion of Flight",

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 KiB