-
Posts
172 -
Joined
-
Last visited
Everything posted by Budschie
-
[1.15.2] Glowing potion effect does not applies
Budschie replied to ArcaneDiver's topic in Modder Support
You don't need a potion effect for this. You can use livingEntity.setGlowing(true); -
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.
-
How do I create a custom FillerBlockType [1.15.2]
Budschie replied to Budschie's topic in Modder Support
Thanks. -
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.
-
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.
-
_
-
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.
-
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.
-
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 } } }
-
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"); } }
-
[1.15.2] Why are there two seperate event busses?
Budschie replied to Budschie's topic in Modder Support
Ok, thanks. -
What librarys did you reference?
-
Can I see the code (of the new version)? Maybe it's just a little syntax error?
-
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.
-
Did you import the mod directory as an existing gradlew project into eclipse? "gradlew eclipse" doesn't seem to work anymore.
-
You can read all of this in the README.txt file in your mod directory.
-
You can just look this up in the README.txt file.
-
@Mixu_78 It's now called "genEclipseRuns"!
-
Well, that sounds like an issue with the dependencies...
-
I always wondered why there are two seperate event busses. Do they have any purpose?
-
Replacement of the deprecated GlStateManager.color4f [1.15.2]
Budschie replied to Budschie's topic in Modder Support
Thanks. It's now working: -
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...