Jump to content

Recommended Posts

Posted

Hello, been trying to push a problem I've been having for a while. I've created a tile entity, gui, and container for two of my blocks BlockForge and BlockPestle, but when trying to implement them, I cannot get them to appear in game. The purpose of these blocks is for custom crafting, recipes, which I have also created. (But seem to be unable to implement). Not sure where I am going wrong here.

 

GUI Folder (easier than linking each file specifically, as I do not know where the problem is):

https://github.com/ModMCdl/Magitech/tree/master/src/main/java/com/modmcdl/magitech/gui

BlockPestle:

https://github.com/ModMCdl/Magitech/blob/master/src/main/java/com/modmcdl/magitech/blocks/BlockPestle.java

BlockForge:

https://github.com/ModMCdl/Magitech/blob/master/src/main/java/com/modmcdl/magitech/blocks/BlockForge.java

TileEntity Folder:

https://github.com/ModMCdl/Magitech/tree/master/src/main/java/com/modmcdl/magitech/tileenitity

Slot Folder (idk if this is specifically needed, but I'll include it anyways):

https://github.com/ModMCdl/Magitech/tree/master/src/main/java/com/modmcdl/magitech/slot

 

Thanks in advance!

 

Follow these rules when talking to me, and we'll get along fine.

1).I know Java fairly well. I don't know as much about modding. They are not the same, don't compare them.

2). I consider myself to always be learning. I make mistakes, you make mistakes. Who doesn't?

3). Insult me, and I will leave the thread. I have a real life, I don't have time to throw petty insults in a Minecraft Modding forum.

 

ModMCdl - Co-Founder and Director of Design for Artemis Game Studios

Posted
4 minutes ago, oldcheese said:

Do you get any specific errors in the console when rightclicking your block?

Both fail to cast to IITemHandler. But I cannot see where that fails.

Follow these rules when talking to me, and we'll get along fine.

1).I know Java fairly well. I don't know as much about modding. They are not the same, don't compare them.

2). I consider myself to always be learning. I make mistakes, you make mistakes. Who doesn't?

3). Insult me, and I will leave the thread. I have a real life, I don't have time to throw petty insults in a Minecraft Modding forum.

 

ModMCdl - Co-Founder and Director of Design for Artemis Game Studios

Posted
1 minute ago, ModMCdl said:

Both fail to cast to IITemHandler. But I cannot see where that fails.

It'd be helpfull if you paste the entire error here. Or at least the first block of errors after something happens. 

 

From your post it's also not very clear if the game crashes when you try to open the GUI, or if there's simply an error and nothing happens.

Posted
Just now, oldcheese said:

It'd be helpfull if you paste the entire error here. Or at least the first block of errors after something happens. 

 

From your post it's also not very clear if the game crashes when you try to open the GUI, or if there's simply an error and nothing happens.

Simply an error and nothing happens.

java.util.concurrent.ExecutionException: java.lang.ClassCastException: com.modmcdl.magitech.tileenitity.TileEntityPestle cannot be cast to net.minecraftforge.items.IItemHandler
	at java.util.concurrent.FutureTask.report(Unknown Source) ~[?:1.8.0_131]
	at java.util.concurrent.FutureTask.get(Unknown Source) ~[?:1.8.0_131]
	at net.minecraft.util.Util.runTask(Util.java:30) [Util.class:?]
	at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:754) [MinecraftServer.class:?]
	at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:699) [MinecraftServer.class:?]
	at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:156) [IntegratedServer.class:?]
	at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:548) [MinecraftServer.class:?]
	at java.lang.Thread.run(Unknown Source) [?:1.8.0_131]
Caused by: java.lang.ClassCastException: com.modmcdl.magitech.tileenitity.TileEntityPestle cannot be cast to net.minecraftforge.items.IItemHandler
	at com.modmcdl.magitech.slot.SlotPestleOutput.<init>(SlotPestleOutput.java:22) ~[SlotPestleOutput.class:?]
	at com.modmcdl.magitech.gui.ContainerPestle.<init>(ContainerPestle.java:26) ~[ContainerPestle.class:?]
	at com.modmcdl.magitech.gui.GuiHandler.getServerGuiElement(GuiHandler.java:19) ~[GuiHandler.class:?]
	at net.minecraftforge.fml.common.network.NetworkRegistry.getRemoteGuiContainer(NetworkRegistry.java:254) ~[NetworkRegistry.class:?]
	at net.minecraftforge.fml.common.network.internal.FMLNetworkHandler.openGui(FMLNetworkHandler.java:89) ~[FMLNetworkHandler.class:?]
	at net.minecraft.entity.player.EntityPlayer.openGui(EntityPlayer.java:2741) ~[EntityPlayer.class:?]
	at com.modmcdl.magitech.blocks.BlockPestle.onBlockActivated(BlockPestle.java:92) ~[BlockPestle.class:?]
	at net.minecraft.server.management.PlayerInteractionManager.processRightClickBlock(PlayerInteractionManager.java:474) ~[PlayerInteractionManager.class:?]
	at net.minecraft.network.NetHandlerPlayServer.processTryUseItemOnBlock(NetHandlerPlayServer.java:712) ~[NetHandlerPlayServer.class:?]
	at net.minecraft.network.play.client.CPacketPlayerTryUseItemOnBlock.processPacket(CPacketPlayerTryUseItemOnBlock.java:68) ~[CPacketPlayerTryUseItemOnBlock.class:?]
	at net.minecraft.network.play.client.CPacketPlayerTryUseItemOnBlock.processPacket(CPacketPlayerTryUseItemOnBlock.java:13) ~[CPacketPlayerTryUseItemOnBlock.class:?]
	at net.minecraft.network.PacketThreadUtil$1.run(PacketThreadUtil.java:21) ~[PacketThreadUtil$1.class:?]
	at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) ~[?:1.8.0_131]
	at java.util.concurrent.FutureTask.run(Unknown Source) ~[?:1.8.0_131]
	at net.minecraft.util.Util.runTask(Util.java:29) ~[Util.class:?]

 

Follow these rules when talking to me, and we'll get along fine.

1).I know Java fairly well. I don't know as much about modding. They are not the same, don't compare them.

2). I consider myself to always be learning. I make mistakes, you make mistakes. Who doesn't?

3). Insult me, and I will leave the thread. I have a real life, I don't have time to throw petty insults in a Minecraft Modding forum.

 

ModMCdl - Co-Founder and Director of Design for Artemis Game Studios

Posted
4 minutes ago, ModMCdl said:

Simply an error and nothing happens.


java.util.concurrent.ExecutionException: java.lang.ClassCastException: com.modmcdl.magitech.tileenitity.TileEntityPestle cannot be cast to net.minecraftforge.items.IItemHandler
	at java.util.concurrent.FutureTask.report(Unknown Source) ~[?:1.8.0_131]
	at java.util.concurrent.FutureTask.get(Unknown Source) ~[?:1.8.0_131]
	at net.minecraft.util.Util.runTask(Util.java:30) [Util.class:?]
	at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:754) [MinecraftServer.class:?]
	at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:699) [MinecraftServer.class:?]
	at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:156) [IntegratedServer.class:?]
	at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:548) [MinecraftServer.class:?]
	at java.lang.Thread.run(Unknown Source) [?:1.8.0_131]
Caused by: java.lang.ClassCastException: com.modmcdl.magitech.tileenitity.TileEntityPestle cannot be cast to net.minecraftforge.items.IItemHandler
	at com.modmcdl.magitech.slot.SlotPestleOutput.<init>(SlotPestleOutput.java:22) ~[SlotPestleOutput.class:?]
	at com.modmcdl.magitech.gui.ContainerPestle.<init>(ContainerPestle.java:26) ~[ContainerPestle.class:?]
	at com.modmcdl.magitech.gui.GuiHandler.getServerGuiElement(GuiHandler.java:19) ~[GuiHandler.class:?]
	at net.minecraftforge.fml.common.network.NetworkRegistry.getRemoteGuiContainer(NetworkRegistry.java:254) ~[NetworkRegistry.class:?]
	at net.minecraftforge.fml.common.network.internal.FMLNetworkHandler.openGui(FMLNetworkHandler.java:89) ~[FMLNetworkHandler.class:?]
	at net.minecraft.entity.player.EntityPlayer.openGui(EntityPlayer.java:2741) ~[EntityPlayer.class:?]
	at com.modmcdl.magitech.blocks.BlockPestle.onBlockActivated(BlockPestle.java:92) ~[BlockPestle.class:?]
	at net.minecraft.server.management.PlayerInteractionManager.processRightClickBlock(PlayerInteractionManager.java:474) ~[PlayerInteractionManager.class:?]
	at net.minecraft.network.NetHandlerPlayServer.processTryUseItemOnBlock(NetHandlerPlayServer.java:712) ~[NetHandlerPlayServer.class:?]
	at net.minecraft.network.play.client.CPacketPlayerTryUseItemOnBlock.processPacket(CPacketPlayerTryUseItemOnBlock.java:68) ~[CPacketPlayerTryUseItemOnBlock.class:?]
	at net.minecraft.network.play.client.CPacketPlayerTryUseItemOnBlock.processPacket(CPacketPlayerTryUseItemOnBlock.java:13) ~[CPacketPlayerTryUseItemOnBlock.class:?]
	at net.minecraft.network.PacketThreadUtil$1.run(PacketThreadUtil.java:21) ~[PacketThreadUtil$1.class:?]
	at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) ~[?:1.8.0_131]
	at java.util.concurrent.FutureTask.run(Unknown Source) ~[?:1.8.0_131]
	at net.minecraft.util.Util.runTask(Util.java:29) ~[Util.class:?]

 

 

at line 22 of your SlotPestleOutput you're for some reason trying to cast an IItemhandler to an TileEntity. IItemhandlers are the default implementation for the inventory capability while the TileEntity is your Pestle block's entity.

 

I'm not sure why you've tried to do it, but I imagine that once you fix that everything might work better. Since the GUI can't render if the slots are bugged. 

Posted
3 minutes ago, oldcheese said:

 

at line 22 of your SlotPestleOutput you're for some reason trying to cast an IItemhandler to an TileEntity. IItemhandlers are the default implementation for the inventory capability while the TileEntity is your Pestle block's entity.

 

I'm not sure why you've tried to do it, but I imagine that once you fix that everything might work better. Since the GUI can't render if the slots are bugged. 

Can you explain in a little bit more detail please? Omitting the TileEntity produces errors, along with any other solution Eclipse suggests. While I am familiar with java and a little bit of modding, some of these concepts are still a bit fuzzy to me.

Follow these rules when talking to me, and we'll get along fine.

1).I know Java fairly well. I don't know as much about modding. They are not the same, don't compare them.

2). I consider myself to always be learning. I make mistakes, you make mistakes. Who doesn't?

3). Insult me, and I will leave the thread. I have a real life, I don't have time to throw petty insults in a Minecraft Modding forum.

 

ModMCdl - Co-Founder and Director of Design for Artemis Game Studios

Posted

You have the following code: 

public SlotPestleOutput(EntityPlayer player, TileEntityPestle tileentity, int index, int xPosition, int yPosition) {
		super((IItemHandler) tileentity, index, xPosition, yPosition);
		this.player = player;
	}

 

Where you're trying to cast a Tileentity to IItemHandler.

 

Now you can usually cast for example an int to a double. Because they both essentially can contain very similar information. Or you can cast a class that implements another class to the original class.

 

IItemHandler has nothing to do with tileentities. It's an interface that assists with the Capability you use to add itemslots to something. 

 

Now your super takes an IItemhandler, because it's trying to read the item from the slot. But you're trying to give it an TileEntity. That doesn't make sense. Instead you should just pass it the CAPABILITY attached to your tileentity so it can retrieve the information. 

 

Right now I'm browsing through your classes to see exactly why you feel the need to make a custom slot. 

 

I'm guessing what you're trying to do is get 1 item from the player's capability and 2 slots for the actual item? 

 

You could solve this by just passing the player's capability onto the slot and doing something like such: 

 

ContainerPestle(TileEntityPestle tileentity, EntityPlayer player) { /*note how I required a player to be passed along. 
This keeps us from having to get player from Inventoryplayer.
Because it's more convenient to get the inventory from the player than
it is getting the player from the inventory. */
		this.tileentity = tileentity;
		this.addSlotToContainer(new SlotItemHandler(tileentity.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, null), 0, 32, 25));
		this.addSlotToContainer(new SlotItemHandler(tileentity.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, null), 1, 67, 44));
		this.addSlotToContainer(new SlotPestleOutput(player, player.getCapability(ITEM_HANDLER_CAPABILITY, null), 2, 124, 35));
  //I've changed your slot to take an IItemhandler instead of an tileentity. 
		
		for(int y = 0; y < 3; ++y) { //Player Inv
			for(int x = 0; x < 9; ++x) {
				this.addSlotToContainer(new Slot(player, x + y * 9 + 9, 8 + x * 18, 84 + y * 18));
			}
		}
		
		for(int x = 0; x < 9; ++x) //Hotbar
			this.addSlotToContainer(new Slot(player, x, 8 + x * 18, 142 ));
		
	}

 

 

Then your custom slot can be as such: 

 

	public SlotPestleOutput(EntityPlayer player, IItemhandler itemhandler, int index, int xPosition, int yPosition) {
		super(itemhandler, index, xPosition, yPosition);
      //note how we can now properly pass along the capability Itemhandler, since we got it from the original GUI.
		this.player = player;
	}

 

 

By changing the container to give us a player we also need to change a few things in our GuiHandler.  Obviously it should now read player instead of player.inventory where applicable. 

 

I hope that helps.

 

What is your goal for making a new type of slot ? I see why you'd make one, but I'm not sure what your slot class here has that you wouldn't get from a regular IItemhandler slot. 

 

regardless. you ALWAYS have to hand an IItemhandler to the item if you want to extend SlotItemHandler for your custom slot.

Posted
57 minutes ago, oldcheese said:

What is your goal for making a new type of slot ? I see why you'd make one, but I'm not sure what your slot class here has that you wouldn't get from a regular IItemhandler slot. 

Not quite sure. I was looking somewhere, and the code there made it seem like it was necessary for my output. I'm trying to make a custom crafting utility that combines two items. Sort of the equivalent of an equals sign.

58 minutes ago, oldcheese said:

By changing the container to give us a player we also need to change a few things in our GuiHandler.  Obviously it should now read player instead of player.inventory where applicable. 

My GuiHander did error, and I've fixed that along with other corresponding errors. Everything checks out, and the game launches, but the GUI still does not show up. (I've uploaded the changed files to the git).

Follow these rules when talking to me, and we'll get along fine.

1).I know Java fairly well. I don't know as much about modding. They are not the same, don't compare them.

2). I consider myself to always be learning. I make mistakes, you make mistakes. Who doesn't?

3). Insult me, and I will leave the thread. I have a real life, I don't have time to throw petty insults in a Minecraft Modding forum.

 

ModMCdl - Co-Founder and Director of Design for Artemis Game Studios

Posted

So there's no error in the log right now but the UI still doesn't show anything? Does a 'blank' GUI open that has nothing in it?  I'm gonna be gone for a few hours but I'll try to look at it more closely once I get back. 

Posted
Just now, oldcheese said:

So there's no error in the log right now but the UI still doesn't show anything? Does a 'blank' GUI open that has nothing in it?  I'm gonna be gone for a few hours but I'll try to look at it more closely once I get back. 

I can't find any errors when trying to open the GUI. It just doesn't open.

Follow these rules when talking to me, and we'll get along fine.

1).I know Java fairly well. I don't know as much about modding. They are not the same, don't compare them.

2). I consider myself to always be learning. I make mistakes, you make mistakes. Who doesn't?

3). Insult me, and I will leave the thread. I have a real life, I don't have time to throw petty insults in a Minecraft Modding forum.

 

ModMCdl - Co-Founder and Director of Design for Artemis Game Studios

Posted
1 hour ago, ModMCdl said:

I can't find any errors when trying to open the GUI. It just doesn't open.

Do you have the correct resource location for it's background? Just a random thought on the subject that might help.

Posted
14 minutes ago, KittenKoder said:

Do you have the correct resource location for it's background? Just a random thought on the subject that might help.

Yea. I managed to get the forge to work, hence why I haven't been citing it. But I can't figure out the problem, because I can't tell any differences.

Follow these rules when talking to me, and we'll get along fine.

1).I know Java fairly well. I don't know as much about modding. They are not the same, don't compare them.

2). I consider myself to always be learning. I make mistakes, you make mistakes. Who doesn't?

3). Insult me, and I will leave the thread. I have a real life, I don't have time to throw petty insults in a Minecraft Modding forum.

 

ModMCdl - Co-Founder and Director of Design for Artemis Game Studios

Posted
2 minutes ago, ModMCdl said:

Yea. I managed to get the forge to work, hence why I haven't been citing it. But I can't figure out the problem, because I can't tell any differences.

 

Your best sollution could be to just debug

 

Start adding System out messages throughout your code. Add one in the switch you use to call the GUI, add one in the initialization for the GUI. That way you can tell if the GUI is opened at all or if it's just not rendering.

 

It's really hard for us to figure out what's going on. Since you have about 15 classes here and all of them could have mistakes. It's very rare for something to not work without giving you even an error.  I'm not used to interpreting code that doesn't use brackets for if statements. It's rather untidy to look at. 

 

 

Anyway, considering it gave an error when you right clicked the GUI about the slots. We can probably assume that the GuiContainer is at least trying to load. 

Posted

Added system outs, and it really didn't help at all. Everything is loading fine, its just "not working". As I don't understand the problem, I can't get much more descriptive than that. Digging down deeper tho, I do get an error, its just blocked by console "skipping lines" so I had to open that remotely. I'll try to work this out later, as I have to leave now as well.

 

41 minutes ago, oldcheese said:

I'm not used to interpreting code that doesn't use brackets for if statements. It's rather untidy to look at. 

Where do you see missing brackets?

Follow these rules when talking to me, and we'll get along fine.

1).I know Java fairly well. I don't know as much about modding. They are not the same, don't compare them.

2). I consider myself to always be learning. I make mistakes, you make mistakes. Who doesn't?

3). Insult me, and I will leave the thread. I have a real life, I don't have time to throw petty insults in a Minecraft Modding forum.

 

ModMCdl - Co-Founder and Director of Design for Artemis Game Studios

Posted
15 minutes ago, ModMCdl said:

Where do you see missing brackets?

I think he means things like this:

		for(int x = 0; x < 9; ++x) //Hotbar
			this.addSlotToContainer(new Slot(player, x, 8 + x * 18, 142 ));

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

Posted
12 minutes ago, Draco18s said:

I think he means things like this:


		for(int x = 0; x < 9; ++x) //Hotbar
			this.addSlotToContainer(new Slot(player, x, 8 + x * 18, 142 ));

That is actually cleaner and easier for many of us old coders to read. More brackets makes it harder to line up what is part of what with the eye, while the lack of brackets make it all look like single statements. Not accusing you of anything here, but those who don't like this style probably don't recall the 80s for software development when monitors had little space.

Posted
16 hours ago, KittenKoder said:

That is actually cleaner and easier for many of us old coders to read. More brackets makes it harder to line up what is part of what with the eye, while the lack of brackets make it all look like single statements. Not accusing you of anything here, but those who don't like this style probably don't recall the 80s for software development when monitors had little space.

Oh there. I had one professor who did that, and another who didn't. My dept. head nowadays doesn't like it, so I just don't do it. I thought he was referring to an actual error in my scripting.

  • Like 1

Follow these rules when talking to me, and we'll get along fine.

1).I know Java fairly well. I don't know as much about modding. They are not the same, don't compare them.

2). I consider myself to always be learning. I make mistakes, you make mistakes. Who doesn't?

3). Insult me, and I will leave the thread. I have a real life, I don't have time to throw petty insults in a Minecraft Modding forum.

 

ModMCdl - Co-Founder and Director of Design for Artemis Game Studios

Posted

So now that I have time again, I've torn apart the console logs, and found this error whenever I try to open up the pestle GUI:

[11:05:36] [Server thread/FATAL]: Error executing task
java.util.concurrent.ExecutionException: java.lang.ClassCastException: net.minecraft.entity.player.EntityPlayerMP cannot be cast to net.minecraft.inventory.IInventory
	at java.util.concurrent.FutureTask.report(Unknown Source) ~[?:1.8.0_131]
	at java.util.concurrent.FutureTask.get(Unknown Source) ~[?:1.8.0_131]
	at net.minecraft.util.Util.runTask(Util.java:30) [Util.class:?]
	at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:754) [MinecraftServer.class:?]
	at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:699) [MinecraftServer.class:?]
	at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:156) [IntegratedServer.class:?]
	at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:548) [MinecraftServer.class:?]
	at java.lang.Thread.run(Unknown Source) [?:1.8.0_131]
Caused by: java.lang.ClassCastException: net.minecraft.entity.player.EntityPlayerMP cannot be cast to net.minecraft.inventory.IInventory
	at com.modmcdl.magitech.gui.ContainerPestle.<init>(ContainerPestle.java:30) ~[ContainerPestle.class:?]
	at com.modmcdl.magitech.gui.GuiHandler.getServerGuiElement(GuiHandler.java:19) ~[GuiHandler.class:?]
	at net.minecraftforge.fml.common.network.NetworkRegistry.getRemoteGuiContainer(NetworkRegistry.java:254) ~[NetworkRegistry.class:?]
	at net.minecraftforge.fml.common.network.internal.FMLNetworkHandler.openGui(FMLNetworkHandler.java:89) ~[FMLNetworkHandler.class:?]
	at net.minecraft.entity.player.EntityPlayer.openGui(EntityPlayer.java:2741) ~[EntityPlayer.class:?]
	at com.modmcdl.magitech.blocks.BlockPestle.onBlockActivated(BlockPestle.java:92) ~[BlockPestle.class:?]
	at net.minecraft.server.management.PlayerInteractionManager.processRightClickBlock(PlayerInteractionManager.java:474) ~[PlayerInteractionManager.class:?]
	at net.minecraft.network.NetHandlerPlayServer.processTryUseItemOnBlock(NetHandlerPlayServer.java:712) ~[NetHandlerPlayServer.class:?]
	at net.minecraft.network.play.client.CPacketPlayerTryUseItemOnBlock.processPacket(CPacketPlayerTryUseItemOnBlock.java:68) ~[CPacketPlayerTryUseItemOnBlock.class:?]
	at net.minecraft.network.play.client.CPacketPlayerTryUseItemOnBlock.processPacket(CPacketPlayerTryUseItemOnBlock.java:13) ~[CPacketPlayerTryUseItemOnBlock.class:?]
	at net.minecraft.network.PacketThreadUtil$1.run(PacketThreadUtil.java:21) ~[PacketThreadUtil$1.class:?]
	at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) ~[?:1.8.0_131]
	at java.util.concurrent.FutureTask.run(Unknown Source) ~[?:1.8.0_131]
	at net.minecraft.util.Util.runTask(Util.java:29) ~[Util.class:?]

 

Follow these rules when talking to me, and we'll get along fine.

1).I know Java fairly well. I don't know as much about modding. They are not the same, don't compare them.

2). I consider myself to always be learning. I make mistakes, you make mistakes. Who doesn't?

3). Insult me, and I will leave the thread. I have a real life, I don't have time to throw petty insults in a Minecraft Modding forum.

 

ModMCdl - Co-Founder and Director of Design for Artemis Game Studios

Posted

new Slot((IInventory) player, ...

 

The fuck are you casting an EntityPlayer to an IInventory for?

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

Posted
52 minutes ago, Draco18s said:

new Slot((IInventory) player, ...

 

The fuck are you casting an EntityPlayer to an IInventory for?

If you're referring to the Player Inventory and Hotbar sections of my ContainerPestle, then isn't that needed because you're calling it from the Player's inventory? I was under the impression from previous advice this is what you needed to do. 

Follow these rules when talking to me, and we'll get along fine.

1).I know Java fairly well. I don't know as much about modding. They are not the same, don't compare them.

2). I consider myself to always be learning. I make mistakes, you make mistakes. Who doesn't?

3). Insult me, and I will leave the thread. I have a real life, I don't have time to throw petty insults in a Minecraft Modding forum.

 

ModMCdl - Co-Founder and Director of Design for Artemis Game Studios

Posted (edited)
2 hours ago, ModMCdl said:

Caused by: java.lang.ClassCastException: net.minecraft.entity.player.EntityPlayerMP cannot be cast to net.minecraft.inventory.IInventory

     at com.modmcdl.magitech.gui.ContainerPestle.<init>(ContainerPestle.java:30) ~[ContainerPestle.class:?]

Line 30:

this.addSlotToContainer(new Slot((IInventory) player, x + y * 9 + 9, 8 + x * 18, 84 + y * 18));

Player is defined as an EntityPlayer on line 22:

ContainerPestle(TileEntityPestle tileentity, EntityPlayer player) { //CustomSlots

This cast makes no sense and that is why it crashes.

Edited by Draco18s

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

Posted
48 minutes ago, Draco18s said:

Line 30:

this.addSlotToContainer(new Slot((IInventory) player, x + y * 9 + 9, 8 + x * 18, 84 + y * 18));

Player is defined as an EntityPlayer on line 22:

ContainerPestle(TileEntityPestle tileentity, EntityPlayer player) { //CustomSlots

This cast makes no sense and that is why it crashes.

So then what would the solution be? Is this cast just not needed at all, and can I do without it? What would you suggest replacing this with?

Follow these rules when talking to me, and we'll get along fine.

1).I know Java fairly well. I don't know as much about modding. They are not the same, don't compare them.

2). I consider myself to always be learning. I make mistakes, you make mistakes. Who doesn't?

3). Insult me, and I will leave the thread. I have a real life, I don't have time to throw petty insults in a Minecraft Modding forum.

 

ModMCdl - Co-Founder and Director of Design for Artemis Game Studios

Posted
4 minutes ago, larsgerrits said:

Don't cast the player to IInventory, use its inventory (EntityPlayer#inventory) instead.

If I do that, Eclipse wants me to change it to IInventory. Should I implement it elsewhere in the code, or could you provide and example. It's totally possible I just don't understand where you want me to change it.

Follow these rules when talking to me, and we'll get along fine.

1).I know Java fairly well. I don't know as much about modding. They are not the same, don't compare them.

2). I consider myself to always be learning. I make mistakes, you make mistakes. Who doesn't?

3). Insult me, and I will leave the thread. I have a real life, I don't have time to throw petty insults in a Minecraft Modding forum.

 

ModMCdl - Co-Founder and Director of Design for Artemis Game Studios

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • Version 1.19 - Forge 41.0.63 I want to create a wolf entity that I can ride, so far it seems to be working, but the problem is that when I get on the wolf, I can’t control it. I then discovered that the issue is that the server doesn’t detect that I’m riding the wolf, so I’m struggling with synchronization. However, it seems to not be working properly. As I understand it, the server receives the packet but doesn’t register it correctly. I’m a bit new to Java, and I’ll try to provide all the relevant code and prints *The comments and prints are translated by chatgpt since they were originally in Spanish* Thank you very much in advance No player is mounted, or the passenger is not a player. No player is mounted, or the passenger is not a player. No player is mounted, or the passenger is not a player. No player is mounted, or the passenger is not a player. No player is mounted, or the passenger is not a player. MountableWolfEntity package com.vals.valscraft.entity; import com.vals.valscraft.network.MountSyncPacket; import com.vals.valscraft.network.NetworkHandler; import net.minecraft.client.Minecraft; import net.minecraft.network.syncher.EntityDataAccessor; import net.minecraft.network.syncher.EntityDataSerializers; import net.minecraft.network.syncher.SynchedEntityData; import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.Mob; import net.minecraft.world.entity.ai.attributes.AttributeSupplier; import net.minecraft.world.entity.ai.attributes.Attributes; import net.minecraft.world.entity.animal.Wolf; import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.Entity; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.phys.Vec3; import net.minecraftforge.event.TickEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.network.PacketDistributor; public class MountableWolfEntity extends Wolf { private boolean hasSaddle; private static final EntityDataAccessor<Byte> DATA_ID_FLAGS = SynchedEntityData.defineId(MountableWolfEntity.class, EntityDataSerializers.BYTE); public MountableWolfEntity(EntityType<? extends Wolf> type, Level level) { super(type, level); this.hasSaddle = false; } @Override protected void defineSynchedData() { super.defineSynchedData(); this.entityData.define(DATA_ID_FLAGS, (byte)0); } public static AttributeSupplier.Builder createAttributes() { return Wolf.createAttributes() .add(Attributes.MAX_HEALTH, 20.0) .add(Attributes.MOVEMENT_SPEED, 0.3); } @Override public InteractionResult mobInteract(Player player, InteractionHand hand) { ItemStack itemstack = player.getItemInHand(hand); if (itemstack.getItem() == Items.SADDLE && !this.hasSaddle()) { if (!player.isCreative()) { itemstack.shrink(1); } this.setSaddle(true); return InteractionResult.SUCCESS; } else if (!level.isClientSide && this.hasSaddle()) { player.startRiding(this); MountSyncPacket packet = new MountSyncPacket(true); // 'true' means the player is mounted NetworkHandler.CHANNEL.sendToServer(packet); // Ensure the server handles the packet return InteractionResult.SUCCESS; } return InteractionResult.PASS; } @Override public void travel(Vec3 travelVector) { if (this.isVehicle() && this.getControllingPassenger() instanceof Player) { System.out.println("The wolf has a passenger."); System.out.println("The passenger is a player."); Player player = (Player) this.getControllingPassenger(); // Ensure the player is the controller this.setYRot(player.getYRot()); this.yRotO = this.getYRot(); this.setXRot(player.getXRot() * 0.5F); this.setRot(this.getYRot(), this.getXRot()); this.yBodyRot = this.getYRot(); this.yHeadRot = this.yBodyRot; float forward = player.zza; float strafe = player.xxa; if (forward <= 0.0F) { forward *= 0.25F; } this.flyingSpeed = this.getSpeed() * 0.1F; this.setSpeed((float) this.getAttributeValue(Attributes.MOVEMENT_SPEED) * 1.5F); this.setDeltaMovement(new Vec3(strafe, travelVector.y, forward).scale(this.getSpeed())); this.calculateEntityAnimation(this, false); } else { // The wolf does not have a passenger or the passenger is not a player System.out.println("No player is mounted, or the passenger is not a player."); super.travel(travelVector); } } public boolean hasSaddle() { return this.hasSaddle; } public void setSaddle(boolean hasSaddle) { this.hasSaddle = hasSaddle; } @Override protected void dropEquipment() { super.dropEquipment(); if (this.hasSaddle()) { this.spawnAtLocation(Items.SADDLE); this.setSaddle(false); } } @SubscribeEvent public static void onServerTick(TickEvent.ServerTickEvent event) { if (event.phase == TickEvent.Phase.START) { MinecraftServer server = net.minecraftforge.server.ServerLifecycleHooks.getCurrentServer(); if (server != null) { for (ServerPlayer player : server.getPlayerList().getPlayers()) { if (player.isPassenger() && player.getVehicle() instanceof MountableWolfEntity) { MountableWolfEntity wolf = (MountableWolfEntity) player.getVehicle(); System.out.println("Tick: " + player.getName().getString() + " is correctly mounted on " + wolf); } } } } } private boolean lastMountedState = false; @Override public void tick() { super.tick(); if (!this.level.isClientSide) { // Only on the server boolean isMounted = this.isVehicle() && this.getControllingPassenger() instanceof Player; // Only print if the state changed if (isMounted != lastMountedState) { if (isMounted) { Player player = (Player) this.getControllingPassenger(); // Verify the passenger is a player System.out.println("Server: Player " + player.getName().getString() + " is now mounted."); } else { System.out.println("Server: The wolf no longer has a passenger."); } lastMountedState = isMounted; } } } @Override public void addPassenger(Entity passenger) { super.addPassenger(passenger); if (passenger instanceof Player) { Player player = (Player) passenger; if (!this.level.isClientSide && player instanceof ServerPlayer) { // Send the packet to the server to indicate the player is mounted NetworkHandler.CHANNEL.send(PacketDistributor.PLAYER.with(() -> (ServerPlayer) player), new MountSyncPacket(true)); } } } @Override public void removePassenger(Entity passenger) { super.removePassenger(passenger); if (passenger instanceof Player) { Player player = (Player) passenger; if (!this.level.isClientSide && player instanceof ServerPlayer) { // Send the packet to the server to indicate the player is no longer mounted NetworkHandler.CHANNEL.send(PacketDistributor.PLAYER.with(() -> (ServerPlayer) player), new MountSyncPacket(false)); } } } @Override public boolean isControlledByLocalInstance() { Entity entity = this.getControllingPassenger(); return entity instanceof Player; } @Override public void positionRider(Entity passenger) { if (this.hasPassenger(passenger)) { double xOffset = Math.cos(Math.toRadians(this.getYRot() + 90)) * 0.4; double zOffset = Math.sin(Math.toRadians(this.getYRot() + 90)) * 0.4; passenger.setPos(this.getX() + xOffset, this.getY() + this.getPassengersRidingOffset() + passenger.getMyRidingOffset(), this.getZ() + zOffset); } } } MountSyncPacket package com.vals.valscraft.network; import com.vals.valscraft.entity.MountableWolfEntity; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.player.Player; import net.minecraftforge.network.NetworkEvent; import java.util.function.Supplier; public class MountSyncPacket { private final boolean isMounted; public MountSyncPacket(boolean isMounted) { this.isMounted = isMounted; } public void encode(FriendlyByteBuf buffer) { buffer.writeBoolean(isMounted); } public static MountSyncPacket decode(FriendlyByteBuf buffer) { return new MountSyncPacket(buffer.readBoolean()); } public void handle(NetworkEvent.Context context) { context.enqueueWork(() -> { ServerPlayer player = context.getSender(); // Get the player from the context if (player != null) { // Verifies if the player has dismounted if (!isMounted) { Entity vehicle = player.getVehicle(); if (vehicle instanceof MountableWolfEntity wolf) { // Logic to remove the player as a passenger wolf.removePassenger(player); System.out.println("Server: Player " + player.getName().getString() + " is no longer mounted."); } } } }); context.setPacketHandled(true); // Marks the packet as handled } } networkHandler package com.vals.valscraft.network; import com.vals.valscraft.valscraft; import net.minecraft.resources.ResourceLocation; import net.minecraftforge.network.NetworkRegistry; import net.minecraftforge.network.simple.SimpleChannel; import net.minecraftforge.network.NetworkEvent; import java.util.function.Supplier; public class NetworkHandler { private static final String PROTOCOL_VERSION = "1"; public static final SimpleChannel CHANNEL = NetworkRegistry.newSimpleChannel( new ResourceLocation(valscraft.MODID, "main"), () -> PROTOCOL_VERSION, PROTOCOL_VERSION::equals, PROTOCOL_VERSION::equals ); public static void init() { int packetId = 0; // Register the mount synchronization packet CHANNEL.registerMessage( packetId++, MountSyncPacket.class, MountSyncPacket::encode, MountSyncPacket::decode, (msg, context) -> msg.handle(context.get()) // Get the context with context.get() ); } }  
    • Do you use features of inventory profiles next (ipnext) or is there a change without it?
    • Remove rubidium - you are already using embeddium, which is a fork of rubidium
  • Topics

×
×
  • Create New...

Important Information

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