• Recently Browsing

    No registered users viewing this page.

  • Posts

    • Oh, I gotcha. I'll use the other entity renderer's as reference, thanks.
    • If you're not using a living entity, you'll have to implement the render method yourself in your renderer. Look at other non-living vanilla entity renderers for inspiration (BoatRenderer for example).
    • 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; } }  
  • Topics

  • Who's Online (See full list)