Jump to content

Budschie

Members
  • Posts

    172
  • Joined

  • Last visited

Everything posted by Budschie

  1. You don't need a potion effect for this. You can use livingEntity.setGlowing(true);
  2. So, this question seems to be stupid at first, @SubscribeEvent public static void onLoadChunk(ChunkEvent.Load event) { if(event.getChunk().getWorldForge() == null) { System.out.println("NULL!"); return; } StructureDataHandler.readChunk(event.getChunk().getPos(), event.getChunk().getWorldForge().getWorld()); } but it seems that the method event.getChunk().getWorldForge() returns pretty much always null, and the method event.getWorld().getWorld() seems to return null as well. Thanks for any help.
  3. I'm trying to add an ore to my deepnether dimension, but because my dimension uses own blocks, I need to somehow "extend" an FillerBlockType, but I have no clue how, and FillerBlockType.create will throw an exception.
  4. I've now implemented IContainerFactory , parsed the block pos into the custom packet buffer, and now it seemed to work: IContainerFactory implementation: registry.register(new ContainerType<DeepNetherBlastFurnaceContainer>(new IContainerFactory<DeepNetherBlastFurnaceContainer>() { @Override public DeepNetherBlastFurnaceContainer create(int windowId, PlayerInventory inv, PacketBuffer data) { if(data != null) { BlockPos tePos = new BlockPos(data.readInt(), data.readInt(), data.readInt()); TileEntity te = Minecraft.getInstance().world.getTileEntity(tePos); if(te != null && te instanceof DeepNetherBlastFurnaceTileEntity) { return new DeepNetherBlastFurnaceContainer(windowId, inv, ((DeepNetherBlastFurnaceTileEntity)te)); } } return new DeepNetherBlastFurnaceContainer(windowId, inv); } }).setRegistryName(new ResourceLocation(References.MODID, "nether_blast_furnace_container"))); Block Class: @Override public ActionResultType onBlockActivated(BlockState state, World worldIn, BlockPos pos, PlayerEntity player, Hand handIn, BlockRayTraceResult p_225533_6_) { if(!worldIn.isBlockLoaded(pos)) { return ActionResultType.FAIL; } if(!worldIn.isRemote) { TileEntity te = worldIn.getTileEntity(pos); if(te != null && te instanceof DeepNetherBlastFurnaceTileEntity) { NetworkHooks.openGui((ServerPlayerEntity) player, ((INamedContainerProvider)te), new Consumer<PacketBuffer>() { @Override public void accept(PacketBuffer t) { t.writeInt(pos.getX()); t.writeInt(pos.getY()); t.writeInt(pos.getZ()); } }); } } return ActionResultType.SUCCESS; } Thanks.
  5. Maybe I should just get the ItemStackHandler on the client side by parsing the block pos of the tile entity into the extra data packet and processing it on the client side.
  6. So, I've changed my registry class a bit, it now looks like this: Registry class: @EventBusSubscriber(bus = Bus.MOD) public class ContainerRegistry { @SubscribeEvent public static void registerContainer(RegistryEvent.Register<ContainerType<?>> event) { IForgeRegistry<ContainerType<?>> registry = event.getRegistry(); registry.register(new ContainerType<DeepNetherBlastFurnaceContainer>(DeepNetherBlastFurnaceContainer::new).setRegistryName(new ResourceLocation(References.MODID, "nether_blast_furnace_container"))); } } Container class: public class DeepNetherBlastFurnaceContainer extends Container { @ObjectHolder(value = References.MODID+":nether_blast_furnace_container") public static final ContainerType<DeepNetherBlastFurnaceContainer> TYPE = null; PlayerInventory playerInv; ItemStackHandler iStackHandler; public DeepNetherBlastFurnaceContainer(int id, PlayerInventory playerInv, ItemStackHandler teInventory) { super(TYPE, id); this.playerInv = playerInv; this.iStackHandler = teInventory; this.addSlot(new SlotItemHandler(iStackHandler, 1, 56, 17)); this.addSlot(new SlotItemHandler(iStackHandler, 0, 56, 53)); this.addSlot(new SlotItemHandler(iStackHandler, 2, 116, 35)); for (int i = 0; i < 3; ++i) { for (int j = 0; j < 9; ++j) { this.addSlot(new Slot(playerInv, j + i * 9 + 9, 8 + j * 18, 84 + i * 18)); } } for (int k = 0; k < 9; ++k) { this.addSlot(new Slot(playerInv, k, 8 + k * 18, 142)); } } public DeepNetherBlastFurnaceContainer(int id, PlayerInventory playerInv) { super(TYPE, id); this.playerInv = playerInv; } @Override public boolean canInteractWith(PlayerEntity playerIn) { return true; } } I've did some debugging too, and the problem seems to be that the constructor without the ItemStackHandler gets called on the client side.
  7. Well, you could do something like this: @EventBusSubscriber(bus = Bus.FORGE) public class GuiHandler { @SubscribeEvent public static void onRenderGui(GuiScreenEvent.DrawScreenEvent.Pre event) { // Checks if the gui is an exact instance of InventoryScreen if(event.getGui().getClass() == InventoryScreen.class) { // Cancel the event event.setCanceled(true); // Draws "test" Minecraft.getInstance().fontRenderer.drawString("test", 200, 200, 3997696); // Render your own stuff } } }
  8. I've recently tried to add a tile entity with a gui and a container. To add a slot for the tile entity, I need to access it, but I have no idea how... Container: public class DeepNetherBlastFurnaceContainer extends Container { public static final ContainerType<DeepNetherBlastFurnaceContainer> TYPE = new ContainerType<DeepNetherBlastFurnaceContainer>(DeepNetherBlastFurnaceContainer::new); PlayerInventory playerInv; ItemStackHandler iStackHandler; public DeepNetherBlastFurnaceContainer(int id, PlayerInventory playerInv, ItemStackHandler teInventory) { super(TYPE, id); this.playerInv = playerInv; this.iStackHandler = teInventory; this.addSlot(new SlotItemHandler(iStackHandler, 1, 56, 17)); this.addSlot(new SlotItemHandler(iStackHandler, 0, 56, 53)); this.addSlot(new SlotItemHandler(iStackHandler, 2, 116, 35)); for (int i = 0; i < 3; ++i) { for (int j = 0; j < 9; ++j) { this.addSlot(new Slot(playerInv, j + i * 9 + 9, 8 + j * 18, 84 + i * 18)); } } for (int k = 0; k < 9; ++k) { this.addSlot(new Slot(playerInv, k, 8 + k * 18, 142)); } } public DeepNetherBlastFurnaceContainer(int id, PlayerInventory playerInv) { super(TYPE, id); this.playerInv = playerInv; } @Override public boolean canInteractWith(PlayerEntity playerIn) { return true; } } The code to open the container: @Override public ActionResultType onBlockActivated(BlockState state, World worldIn, BlockPos pos, PlayerEntity player, Hand handIn, BlockRayTraceResult p_225533_6_) { if(!worldIn.isBlockLoaded(pos)) { return ActionResultType.FAIL; } if(!worldIn.isRemote) { TileEntity te = worldIn.getTileEntity(pos); if(te != null && te instanceof DeepNetherBlastFurnaceTileEntity) { NetworkHooks.openGui((ServerPlayerEntity) player, ((INamedContainerProvider)te), pos); } } return ActionResultType.SUCCESS; } TileEntity: public class DeepNetherBlastFurnaceTileEntity extends TileEntity implements ICapabilityProvider, INamedContainerProvider { //Code @Override public Container createMenu(int p_createMenu_1_, PlayerInventory p_createMenu_2_, PlayerEntity p_createMenu_3_) { return new DeepNetherBlastFurnaceContainer(p_createMenu_1_, p_createMenu_2_, this.inventory); } @Override public ITextComponent getDisplayName() { return new StringTextComponent("Test String"); } }
  9. What librarys did you reference?
  10. Can I see the code (of the new version)? Maybe it's just a little syntax error?
  11. 1. Create an folder outside of your mod directory. 2. Open that folder in eclipse. 3. Choose File -> Import -> Gradle -> Existing Gradle Project -> Set the project root directory to your mod directory (not your newly created folder) 4. Click on Finish.
  12. Did you import the mod directory as an existing gradlew project into eclipse? "gradlew eclipse" doesn't seem to work anymore.
  13. You can read all of this in the README.txt file in your mod directory.
  14. You can just look this up in the README.txt file.
  15. @Mixu_78 It's now called "genEclipseRuns"!
  16. Well, that sounds like an issue with the dependencies...
  17. I always wondered why there are two seperate event busses. Do they have any purpose?
  18. In my rewrite of my old DeepNetherMod I'm currently trying to recreate the render class of the "shadow entity" from my old mod which looked like this: The code that I used to tint the ghosts and make them transparent looked like this: @Override public void doRender(EntityShadow entity, double x, double y, double z, float entityYaw, float partialTicks) { GlStateManager.enableBlend(); GlStateManager.enableAlpha(); GlStateManager.color(0.2f, 0.2f, 1.0f, entity.getTransparency()); super.doRender(entity, x, y, z, entityYaw, partialTicks); GlStateManager.color(1.0f, 1.0f, 1.0f, 0.5f); GlStateManager.disableBlend(); GlStateManager.disableAlpha(); } The code I used in my rewrite was: GlStateManager.enableBlend(); GlStateManager.enableAlphaTest(); GlStateManager.color4f(0.2f, 0.2f, 1.0f, 1.0f); super.render(entityIn, entityYaw, partialTicks, matrixStackIn, bufferIn, packedLightIn); GlStateManager.disableBlend(); GlStateManager.disableAlphaTest(); But the rendered entity wasn't tinted or transparent: What did I do wrong? By the way, the methods that I previously used to tint my entity and make it transparent is now deprecated...
×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.