• Recently Browsing

    No registered users viewing this page.

  • Posts

    • I finished setting up my first custom basic entity, but the model for the entity isn't rendering when I summon the entity in. I'm guessing I can attribute it to the fact that the model isn't being linked to the renderer in any way. Here is the code snippet where I think this should be happening, and yet I can't seem to make it happen. What am I doing wrong?   public class EmpowermentEntityRenderer extends EntityRenderer<EmpowermentEntity> { protected static final ResourceLocation TEXTURE = new ResourceLocation(BlueMagic.MOD_ID, "textures/entity/empowerment_entity.png"); public EmpowermentEntityRenderer(EntityRendererManager renderManager) { // this is what works super(renderManager); // this is supposed to be how I pass the model instance to the renderer super // (no super constructor matching the arguments below) // super(renderManager, new EmpowermentEntityModel<>(), 0.0f); } @Override public ResourceLocation getEntityTexture(EmpowermentEntity entity){ return TEXTURE; } }
    • 1.12 is no longer supported on this forum. Please update to a modern version of Minecraft to receive support.
    • Thanks for the link! I do not know if I had the right approach to implementing this idea, but so far I copied the AbstractChestedHorseEntity.java script and started to replace a lot of keywords with their PigEntity equivalent. I also copied a script for the container of the PigEntity and the screen of the PigEntity. Below will be the code: public abstract class AbstractChestedPigEntity extends PigEntity { private static final DataParameter<Boolean> DATA_ID_CHEST = EntityDataManager.createKey(com.educationalmoose.pighatmod.entity.passive.pig.AbstractChestedPigEntity.class, DataSerializers.BOOLEAN); protected AbstractChestedPigEntity(EntityType<? extends com.educationalmoose.pighatmod.entity.passive.pig.AbstractChestedPigEntity> type, World worldIn) { super(type, worldIn); } protected void registerData() { super.registerData(); this.dataManager.register(DATA_ID_CHEST, false); } public static AttributeModifierMap.MutableAttribute registerAttributes() { return registerAttributes().func_233815_a_(Attributes.field_233821_d_, (double)0.175F).func_233815_a_(Attributes.field_233830_m_, 0.5D); } public boolean hasChest() { return this.dataManager.get(DATA_ID_CHEST); } public void setChested(boolean chested) { this.dataManager.set(DATA_ID_CHEST, chested); } /** * Returns the Y offset from the entity's position for any entity riding this one. */ public double getMountedYOffset() { return super.getMountedYOffset() - 0.25D; } protected void dropInventory() { super.dropInventory(); if (this.hasChest()) { if (!this.world.isRemote) { this.entityDropItem(Blocks.CHEST); } this.setChested(false); } } public void writeAdditional(CompoundNBT compound) { super.writeAdditional(compound); compound.putBoolean("ChestedPig", this.hasChest()); if (this.hasChest()) { ListNBT listnbt = new ListNBT(); compound.put("Items", listnbt); } } /** * (abstract) Protected helper method to read subclass entity data from NBT. */ public void readAdditional(CompoundNBT compound) { super.readAdditional(compound); this.setChested(compound.getBoolean("ChestedPig")); if (this.hasChest()) { ListNBT listnbt = compound.getList("Items", 10); } } public boolean replaceItemInInventory(int inventorySlot, ItemStack itemStackIn) { if (inventorySlot == 499) { if (this.hasChest() && itemStackIn.isEmpty()) { this.setChested(false); return true; } if (!this.hasChest()) { this.setChested(true); return true; } } return super.replaceItemInInventory(inventorySlot, itemStackIn); } /* public ActionResultType getEntityInteractionResult(PlayerEntity player, Hand hand) { ItemStack itemstack = player.getHeldItem(hand); if (!this.isChild()) { if (player.isSecondaryUseActive()) { this.openGUI(player); return ActionResultType.resultSuccessClient(this.world.isRemote); } } } */ public int getInventoryColumns() { return 1; } }   @OnlyIn(Dist.CLIENT) public class PigInventoryScreen extends ContainerScreen<PigInventoryContainer> { private static final ResourceLocation PIG_GUI_TEXTURES = new ResourceLocation("textures/gui/container/pig.png"); /** The EntityPig whose inventory is currently being accessed. */ private final PigEntity pigEntity; /** The mouse x-position recorded during the last rendered frame. */ private float mousePosx; /** The mouse y-position recorded during the last renderered frame. */ private float mousePosY; public PigInventoryScreen(PigInventoryContainer p_i51084_1_, PlayerInventory p_i51084_2_, PigEntity p_i51084_3_) { super(p_i51084_1_, p_i51084_2_, p_i51084_3_.getDisplayName()); this.pigEntity = p_i51084_3_; this.field_230711_n_ = false; } protected void func_230450_a_(MatrixStack p_230450_1_, float p_230450_2_, int p_230450_3_, int p_230450_4_) { RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); this.field_230706_i_.getTextureManager().bindTexture(PIG_GUI_TEXTURES); int i = (this.field_230708_k_ - this.xSize) / 2; int j = (this.field_230709_l_ - this.ySize) / 2; this.func_238474_b_(p_230450_1_, i, j, 0, 0, this.xSize, this.ySize); InventoryScreen.drawEntityOnScreen(i + 51, j + 60, 17, (float)(i + 51) - this.mousePosx, (float)(j + 75 - 50) - this.mousePosY, this.pigEntity); } public void func_230430_a_(MatrixStack p_230430_1_, int p_230430_2_, int p_230430_3_, float p_230430_4_) { this.func_230446_a_(p_230430_1_); this.mousePosx = (float)p_230430_2_; this.mousePosY = (float)p_230430_3_; super.func_230430_a_(p_230430_1_, p_230430_2_, p_230430_3_, p_230430_4_); this.func_230459_a_(p_230430_1_, p_230430_2_, p_230430_3_); } } public class PigInventoryContainer extends Container implements IForgeRegistryEntry<PigInventoryContainer> { private final IInventory pigInventory; private final PigEntity pig; public PigInventoryContainer(int p_i50077_1_, PlayerInventory playerInventory, IInventory hatPigInventory, final PigEntity hatPig) { super((ContainerType<?>)null, p_i50077_1_); this.pigInventory = hatPigInventory; this.pig = hatPig; int i = 3; hatPigInventory.openInventory(playerInventory.player); int j = -18; this.addSlot(new Slot(hatPigInventory, 0, 8, 18) { public int getSlotStackLimit() { return 1; } }); for(int i1 = 0; i1 < 3; ++i1) { for(int k1 = 0; k1 < 9; ++k1) { this.addSlot(new Slot(playerInventory, k1 + i1 * 9 + 9, 8 + k1 * 18, 102 + i1 * 18 + -18)); } } for(int j1 = 0; j1 < 9; ++j1) { this.addSlot(new Slot(playerInventory, j1, 8 + j1 * 18, 142)); } } /** * Determines whether supplied player can use this container */ public boolean canInteractWith(PlayerEntity playerIn) { return this.pigInventory.isUsableByPlayer(playerIn) && this.pig.isAlive() && this.pig.getDistance(playerIn) < 8.0F; } /** * Handle when the stack in slot {@code index} is shift-clicked. Normally this moves the stack between the player * inventory and the other inventory(s). */ public ItemStack transferStackInSlot(PlayerEntity playerIn, int index) { ItemStack itemstack = ItemStack.EMPTY; Slot slot = this.inventorySlots.get(index); if (slot != null && slot.getHasStack()) { ItemStack itemstack1 = slot.getStack(); itemstack = itemstack1.copy(); int i = this.pigInventory.getSizeInventory(); if (index < i) { if (!this.mergeItemStack(itemstack1, i, this.inventorySlots.size(), true)) { return ItemStack.EMPTY; } } else if (this.getSlot(1).isItemValid(itemstack1) && !this.getSlot(1).getHasStack()) { if (!this.mergeItemStack(itemstack1, 1, 2, false)) { return ItemStack.EMPTY; } } else if (this.getSlot(0).isItemValid(itemstack1)) { if (!this.mergeItemStack(itemstack1, 0, 1, false)) { return ItemStack.EMPTY; } } else if (i <= 2 || !this.mergeItemStack(itemstack1, 2, i, false)) { int j = i + 27; int k = j + 9; if (index >= j && index < k) { if (!this.mergeItemStack(itemstack1, i, j, false)) { return ItemStack.EMPTY; } } else if (index >= i && index < j) { if (!this.mergeItemStack(itemstack1, j, k, false)) { return ItemStack.EMPTY; } } else if (!this.mergeItemStack(itemstack1, j, j, false)) { return ItemStack.EMPTY; } return ItemStack.EMPTY; } if (itemstack1.isEmpty()) { slot.putStack(ItemStack.EMPTY); } else { slot.onSlotChanged(); } } return itemstack; } /** * Called when the container is closed. */ public void onContainerClosed(PlayerEntity playerIn) { super.onContainerClosed(playerIn); this.pigInventory.closeInventory(playerIn); } @Override public PigInventoryContainer setRegistryName(ResourceLocation name) { return null; } @Nullable @Override public ResourceLocation getRegistryName() { return null; } @Override public Class<PigInventoryContainer> getRegistryType() { return null; } }   Sorry if this was long, I'm also new to the website so if there is a better way to format this that is easier to read just let me know. The main problem I have right now is when I try to register the container, I followed a 1.15 tutorial for registering a container and it does not seem to be compatible with the PigInventoryContainer script because PigEntity cant be accessed  ublic class ModContainerTypes { public static final DeferredRegister<ContainerType<?>> CONTAINER_TYPES = DeferredRegister.create(ForgeRegistries.CONTAINERS, PigHatMod.MOD_ID); public static final RegistryObject<ContainerType<PigInventoryContainer>> PIG_INVENTORY_CONTAINER = CONTAINER_TYPES.register("pig_inventory_chest", () -> IForgeContainerType.create(PigInventoryContainer::new)); } @Mod.EventBusSubscriber(modid = PigHatMod.MOD_ID, bus = Mod.EventBusSubscriber.Bus.MOD, value = Dist.CLIENT) public class ClientEventBusSubscriber extends AnimalEntity { protected ClientEventBusSubscriber(EntityType<? extends AnimalEntity> type, World worldIn) { super(type, worldIn); } @SubscribeEvent public static void clientSetup(FMLClientSetupEvent event) { ScreenManager.registerFactory(ModContainerTypes.PIG_INVENTORY_CONTAINER.get(), PigInventoryScreen:: new); } @Nullable @Override public AgeableEntity func_241840_a(ServerWorld p_241840_1_, AgeableEntity p_241840_2_) { return null; } }  
    • Personally i find useful to look back also at pre 1.13 mods...because while many things changed (but not all) i can still get an idea of what should be done in order to get a certain result...then it would be up to your personal research to find, for example, what methods or classes are not existent anymore, what took their place and so on. For sure it would be easier to look at mods that were made for the most recent versions though, also due to the support you can get...it really depends on your familiarity with code and your will to search and find solutions by yourself
    • The one that is literally called debug.log   SoundFilters is broken, known issue: https://www.curseforge.com/minecraft/mc-mods/sound-filters/issues/14
  • Topics

  • Who's Online (See full list)