Jump to content

Recommended Posts

Posted

(Note: I somehow managed to put this in the forge gradle subforum and of course now I can't find a single way to delete it, if someone could help me out that'd be neat cause that's embarrassing and I'd like it to not exist)

 

https://pastebin.com/cbq10K42

Here's my class.

 

The issue I'm having is that the if statement 

if (neighborPos != oppPos || neighborPos != facingPos)

in the posCompare method seems to be getting ignored.  Here's an example of what the output would be for the System.out.printlns you see in the posCompare method if I was facing north:

Spoiler

[12:35:13] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:46]: opposite direction north
[12:35:13] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:47]: neighborPos BlockPos{x=198, y=66, z=206}
[12:35:13] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:48]: oppPos BlockPos{x=198, y=66, z=204}
[12:35:13] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:46]: opposite direction north
[12:35:13] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:47]: neighborPos BlockPos{x=197, y=66, z=205}
[12:35:13] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:48]: oppPos BlockPos{x=198, y=66, z=204}
[12:35:13] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:46]: opposite direction north
[12:35:13] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:47]: neighborPos BlockPos{x=198, y=66, z=204}
[12:35:13] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:48]: oppPos BlockPos{x=198, y=66, z=204}
[12:35:13] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:46]: opposite direction north
[12:35:13] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:47]: neighborPos BlockPos{x=199, y=66, z=205}
[12:35:13] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:48]: oppPos BlockPos{x=198, y=66, z=204}
[12:35:13] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:46]: opposite direction north
[12:35:13] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:47]: neighborPos BlockPos{x=198, y=66, z=205}
[12:35:13] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:48]: oppPos BlockPos{x=198, y=66, z=203}
[12:35:13] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:46]: opposite direction north
[12:35:13] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:47]: neighborPos BlockPos{x=197, y=66, z=204}
[12:35:13] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:48]: oppPos BlockPos{x=198, y=66, z=203}
[12:35:13] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:46]: opposite direction north
[12:35:13] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:47]: neighborPos BlockPos{x=198, y=66, z=203}
[12:35:13] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:48]: oppPos BlockPos{x=198, y=66, z=203}
[12:35:13] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:46]: opposite direction north
[12:35:13] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:47]: neighborPos BlockPos{x=199, y=66, z=204}
[12:35:13] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:48]: oppPos BlockPos{x=198, y=66, z=203}

As you can see, if the if statement in posCompare was followed correctly, the blocks at neighbor positions

Spoiler

[12:35:13] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:46]: opposite direction north
[12:35:13] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:47]: neighborPos BlockPos{x=198, y=66, z=203}
[12:35:13] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:48]: oppPos BlockPos{x=198, y=66, z=203}

and

Spoiler

[12:35:13] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:46]: opposite direction north
[12:35:13] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:47]: neighborPos BlockPos{x=198, y=66, z=204}
[12:35:13] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:48]: oppPos BlockPos{x=198, y=66, z=204}

shouldn't be broken, but when I right click a crop in game it still does.

 

I also have another issue, being the beetroots won't break properly with this code.  This is because when I right click them, even though I'm using

((BlockCrops)block).getMaxAge())

it still wants to check for a max age of 7.  I've tried checking for whether it's trying to destroy beetroots specifically and using 3 instead of getting the max age but it still wants to check for 7.  Here's the error log:

Spoiler

[13:07:12] [Server thread/FATAL]: Error executing task
java.util.concurrent.ExecutionException: java.lang.IllegalArgumentException: Cannot get property PropertyInteger{name=age, clazz=class java.lang.Integer, values=[0, 1, 2, 3, 4, 5, 6, 7]} as it does not exist in BlockStateContainer{block=minecraft:beetroots, properties=[age]}
    at java.util.concurrent.FutureTask.report(Unknown Source) ~[?:1.8.0_171]
    at java.util.concurrent.FutureTask.get(Unknown Source) ~[?:1.8.0_171]
    at net.minecraft.util.Util.runTask(Util.java:54) [Util.class:?]
    at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:795) [MinecraftServer.class:?]
    at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:740) [MinecraftServer.class:?]
    at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:192) [IntegratedServer.class:?]
    at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:589) [MinecraftServer.class:?]
    at java.lang.Thread.run(Unknown Source) [?:1.8.0_171]
Caused by: java.lang.IllegalArgumentException: Cannot get property PropertyInteger{name=age, clazz=class java.lang.Integer, values=[0, 1, 2, 3, 4, 5, 6, 7]} as it does not exist in BlockStateContainer{block=minecraft:beetroots, properties=[age]}
    at net.minecraft.block.state.BlockStateContainer$StateImplementation.getValue(BlockStateContainer.java:204) ~[BlockStateContainer$StateImplementation.class:?]
    at tuunaa.stardew.items.ItemScythe.posCompare(ItemScythe.java:52) ~[ItemScythe.class:?]
    at tuunaa.stardew.items.ItemScythe.onItemUse(ItemScythe.java:72) ~[ItemScythe.class:?]
    at net.minecraftforge.common.ForgeHooks.onPlaceItemIntoWorld(ForgeHooks.java:836) ~[ForgeHooks.class:?]
    at net.minecraft.item.ItemStack.onItemUse(ItemStack.java:200) ~[ItemStack.class:?]
    at net.minecraft.server.management.PlayerInteractionManager.processRightClickBlock(PlayerInteractionManager.java:504) ~[PlayerInteractionManager.class:?]
    at net.minecraft.network.NetHandlerPlayServer.processTryUseItemOnBlock(NetHandlerPlayServer.java:757) ~[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_171]
    at java.util.concurrent.FutureTask.run(Unknown Source) ~[?:1.8.0_171]
    at net.minecraft.util.Util.runTask(Util.java:53) ~[Util.class:?]
    ... 5 more

Posted

It might just be me but the wording of your post is a bit confusing.

Could you more clearly state what you are expecting to happen and what is happening?

Posted

Sorry.

 

Let's go from the start to try and get as much ground covered as we can.  What I want to have happen here is when I right click it will destroy the blocks in a 2x3 rectangle as you can see from the work of art I attached here (with the red square being the block right clicked and the white squares being the blocks checked and destroyed).5aef9af6a25c2_destroypattern.png.2892497eef44656e4f4aa7520779424b.png

  The method I'm using to check for and destroy fully grown crops (posCompare) checks all crops horizontally connected to the right clicked block, like so (again, with the red square being the block right clicked and the white squares being the blocks checked and destroyed). 5aef9ce51980c_blockcheck.png.b196a54e06d2c88af02d1713c8edc663.png

So what I'm trying to do is to make it not check/destroy the blocks north and south of the right clicked block (relative to the diagram, not actual north and south in MineCraft).  To do this, I'm using the if statement

if (neighborPos != oppPos || neighborPos != facingPos)

before running the check/destroy code.  Then, when I'm actually calling posCompare, I call it twice: once to check/destroy the row closest to the player and another time to check/compare the further one.

 

The thing is, when I right click with the item it still checks/destroys all the blocks in the + shape, looking like this.  problem.png.e4c11a336d7a7c1ed20e89bb2af49dac.pngWhen I put in the System.out.printlns you can see just before the if statement, it clearly printed out the matching block positions that shouldn't have gone through, but did anyways, so I know it isn't just that the block positions aren't matching up.

Spoiler

[12:35:13] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:46]: opposite direction north
[12:35:13] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:47]: neighborPos BlockPos{x=198, y=66, z=203}
[12:35:13] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:48]: oppPos BlockPos{x=198, y=66, z=203}

Spoiler

[12:35:13] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:46]: opposite direction north
[12:35:13] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:47]: neighborPos BlockPos{x=198, y=66, z=204}
[12:35:13] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:48]: oppPos BlockPos{x=198, y=66, z=204}

Tell me if you need any more context, I'll be glad to give it.

Posted (edited)

It's hard to tell with so little to see, but it looks like you want && instead of || . OR means it will be TRUE if either of the conditions is met, and a position can't be north and south at the same time.

Edited by Asanmi
Posted
3 minutes ago, Asanmi said:

It's hard to tell with so little to see, but it looks like you want && instead of || . OR means it will be TRUE if either of the conditions is met, and a position can't be north and south at the same time.

I do want it to return true if either are met though, not if both are met since I'm trying to remove two different blocks at two different coordinates, so I want to check if the block is at one position OR another, not one position AND another.

 

I could have the logic totally wrong though so I'll go ahead and give this a try real quick.

Posted (edited)

Yea you should be right if it was and I think it wouldn't work at all.

He has the code linked above.

Edited by MDW01
Posted (edited)

Could you put a system.out.print inside the if that just says true and then post the log.

or better under the existing ones with

System.out.println( neighborPos != oppPos || neighborPos != facingPos);

Edited by MDW01
Posted
5 minutes ago, MDW01 said:

Could you put a system.out.print inside the if that just says true and then post the log.

or better under the existing ones with

System.out.println( neighborPos != oppPos || neighborPos != facingPos);

I added System.out.printlns for both neighborPos != oppPos and neighborPos != facingPos after all the other prints like so,

System.out.println(neighborPos != oppPos);
System.out.println(neighborPos != facingPos);

 and it returned true for every one. 

Spoiler

[18:22:33] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:46]: opposite direction south
[18:22:33] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:47]: neighborPos BlockPos{x=195, y=66, z=201}
[18:22:33] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:48]: oppPos BlockPos{x=195, y=66, z=201}
[18:22:33] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:49]: facingPos BlockPos{x=195, y=66, z=199}
true
true
[18:22:33] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:46]: opposite direction south
[18:22:33] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:47]: neighborPos BlockPos{x=194, y=66, z=200}
[18:22:33] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:48]: oppPos BlockPos{x=195, y=66, z=201}
[18:22:33] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:49]: facingPos BlockPos{x=195, y=66, z=199}
true
true
[18:22:33] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:46]: opposite direction south
[18:22:33] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:47]: neighborPos BlockPos{x=195, y=66, z=199}
[18:22:33] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:48]: oppPos BlockPos{x=195, y=66, z=201}
[18:22:33] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:49]: facingPos BlockPos{x=195, y=66, z=199}
true
true
[18:22:33] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:46]: opposite direction south
[18:22:33] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:47]: neighborPos BlockPos{x=196, y=66, z=200}
[18:22:33] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:48]: oppPos BlockPos{x=195, y=66, z=201}
[18:22:33] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:49]: facingPos BlockPos{x=195, y=66, z=199}
true
true
[18:22:33] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:46]: opposite direction south
[18:22:33] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:47]: neighborPos BlockPos{x=195, y=66, z=202}
[18:22:33] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:48]: oppPos BlockPos{x=195, y=66, z=202}
[18:22:33] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:49]: facingPos BlockPos{x=195, y=66, z=200}
true
true
[18:22:33] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:46]: opposite direction south
[18:22:33] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:47]: neighborPos BlockPos{x=194, y=66, z=201}
[18:22:33] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:48]: oppPos BlockPos{x=195, y=66, z=202}
[18:22:33] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:49]: facingPos BlockPos{x=195, y=66, z=200}
true
true
[18:22:33] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:46]: opposite direction south
[18:22:33] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:47]: neighborPos BlockPos{x=195, y=66, z=200}
[18:22:33] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:48]: oppPos BlockPos{x=195, y=66, z=202}
[18:22:33] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:49]: facingPos BlockPos{x=195, y=66, z=200}
true
true
[18:22:33] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:46]: opposite direction south
[18:22:33] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:47]: neighborPos BlockPos{x=196, y=66, z=201}
[18:22:33] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:48]: oppPos BlockPos{x=195, y=66, z=202}
[18:22:33] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:49]: facingPos BlockPos{x=195, y=66, z=200}
true
true

I also added a System.out.println for the second parameter I'm comparing neighborPos against (facingPos) and again, you can see where it shouldn't have gone through.

Spoiler

[18:22:33] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:46]: opposite direction south
[18:22:33] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:47]: neighborPos BlockPos{x=195, y=66, z=199}
[18:22:33] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:48]: oppPos BlockPos{x=195, y=66, z=201}
[18:22:33] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:49]: facingPos BlockPos{x=195, y=66, z=199}
true
true

Spoiler

[18:22:33] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:46]: opposite direction south
[18:22:33] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:47]: neighborPos BlockPos{x=195, y=66, z=200}
[18:22:33] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:48]: oppPos BlockPos{x=195, y=66, z=202}
[18:22:33] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:49]: facingPos BlockPos{x=195, y=66, z=200}
true
true

 

Posted (edited)

I didn't even notice the code in the OP! I just started so my Forge knowledge is baby-ish, but the logic definitely seems wrong? You're doing each check separately, and if either of those checks returns TRUE then the entire thing will run.

 

If you want to only destroy the blocks to relative east-west, then you need &&.

if (neighborPos != oppPos || neighborPos != facingPos)

if( (neighbourPos IS NOT south) OR (neighbourPos IS NOT north) ) = always true

if (neighborPos != oppPos && neighborPos != facingPos)

if( (neighbourPos IS NOT south) AND (neighbourPos IS NOT north) ) = true only if neighbourPos is relative-east or relative-west

 

Edited by Asanmi
Posted

Sorry about that you are completely right. I guess I miss understood what each of the variables was when I looked through the code. I should really go get some sleep.

To show what is happening:

if (neighborPos != false || neighborPos != true) = true
if (neighborPos != true || neighborPos != false) = true

 

What it should be:

if (neighborPos != false && neighborPos != true) = false
if (neighborPos != true && neighborPos != false) = false
Posted
2 minutes ago, Asanmi said:

I didn't even notice the code in the OP! I just started so my Forge knowledge is baby-ish, but the logic definitely seems wrong? You're doing each check separately, and one of those two checks will return false while the other true.

 

If you want to ensure the block is relative-eastwest then it needs &&.


if (neighborPos != oppPos || neighborPos != facingPos)

if( (neighbourPos IS NOT south) OR (neighbourPos IS NOT north) ) = always true

Oh!  I see what you're saying now.  I can't believe I didn't catch that myself!  That definitely fixed an issue I would have run into down the road, but there's something else going on here too, because I added both of these prints before the if statement

System.out.println(neighborPos != oppPos);
System.out.println(neighborPos != facingPos);

and both of them return true every time.

Spoiler

[18:48:47] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:46]: opposite direction east
[18:48:47] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:47]: neighborPos BlockPos{x=192, y=66, z=202}
[18:48:47] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:48]: oppPos BlockPos{x=193, y=66, z=201}
[18:48:47] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:49]: facingPos BlockPos{x=191, y=66, z=201}
true
true
[18:48:47] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:46]: opposite direction east
[18:48:47] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:47]: neighborPos BlockPos{x=191, y=66, z=201}
[18:48:47] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:48]: oppPos BlockPos{x=193, y=66, z=201}
[18:48:47] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:49]: facingPos BlockPos{x=191, y=66, z=201}
true
true
[18:48:47] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:46]: opposite direction east
[18:48:47] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:47]: neighborPos BlockPos{x=192, y=66, z=200}
[18:48:47] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:48]: oppPos BlockPos{x=193, y=66, z=201}
[18:48:47] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:49]: facingPos BlockPos{x=191, y=66, z=201}
true
true
[18:48:47] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:46]: opposite direction east
[18:48:47] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:47]: neighborPos BlockPos{x=193, y=66, z=201}
[18:48:47] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:48]: oppPos BlockPos{x=193, y=66, z=201}
[18:48:47] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:49]: facingPos BlockPos{x=191, y=66, z=201}
true
true
[18:48:47] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:46]: opposite direction east
[18:48:47] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:47]: neighborPos BlockPos{x=193, y=66, z=202}
[18:48:47] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:48]: oppPos BlockPos{x=194, y=66, z=201}
[18:48:47] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:49]: facingPos BlockPos{x=192, y=66, z=201}
true
true
[18:48:47] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:46]: opposite direction east
[18:48:47] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:47]: neighborPos BlockPos{x=192, y=66, z=201}
[18:48:47] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:48]: oppPos BlockPos{x=194, y=66, z=201}
[18:48:47] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:49]: facingPos BlockPos{x=192, y=66, z=201}
true
true
[18:48:47] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:46]: opposite direction east
[18:48:47] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:47]: neighborPos BlockPos{x=193, y=66, z=200}
[18:48:47] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:48]: oppPos BlockPos{x=194, y=66, z=201}
[18:48:47] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:49]: facingPos BlockPos{x=192, y=66, z=201}
true
true
[18:48:47] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:46]: opposite direction east
[18:48:47] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:47]: neighborPos BlockPos{x=194, y=66, z=201}
[18:48:47] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:48]: oppPos BlockPos{x=194, y=66, z=201}
[18:48:47] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:49]: facingPos BlockPos{x=192, y=66, z=201}
true
true

 

Posted

Yeah, both of those return true, but you did them separately. Write that entire if() statement into a println and you'll see it also always returns True.

 

Separately, you probably want to change 

if (neighborBlock == Blocks.WHEAT || neighborBlock == Blocks.CARROTS || neighborBlock == Blocks.BEETROOTS || neighborBlock == Blocks.POTATOES || neighborBlock == Blocks.NETHER_WART)

to

if(neighbourBlock instanceof BlockCrops)

which will work for modded crops that use the base Crop for their own.

Posted (edited)
9 minutes ago, Asanmi said:

Yeah, both of those return true, but you did them separately. Write that entire if() statement into a println and you'll see it also always returns True.

 

Separately, you probably want to change 


if (neighborBlock == Blocks.WHEAT || neighborBlock == Blocks.CARROTS || neighborBlock == Blocks.BEETROOTS || neighborBlock == Blocks.POTATOES || neighborBlock == Blocks.NETHER_WART)

to


if(neighbourBlock instanceof BlockCrops)

which will work for modded crops that use the base Crop for their own.

I added these prints 

System.out.println("AND " + (neighborPos != oppPos && neighborPos != facingPos));
System.out.println("OR " + (neighborPos != oppPos || neighborPos != facingPos));

and it's still returning true every time.

Spoiler

[19:10:03] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:46]: opposite direction north
[19:10:03] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:47]: neighborPos BlockPos{x=195, y=66, z=207}
[19:10:03] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:48]: oppPos BlockPos{x=195, y=66, z=205}
[19:10:03] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:49]: facingPos BlockPos{x=195, y=66, z=207}
[19:10:03] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:50]: AND true
[19:10:03] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:51]: OR true
[19:10:03] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:46]: opposite direction north
[19:10:03] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:47]: neighborPos BlockPos{x=194, y=66, z=206}
[19:10:03] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:48]: oppPos BlockPos{x=195, y=66, z=205}
[19:10:03] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:49]: facingPos BlockPos{x=195, y=66, z=207}
[19:10:03] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:50]: AND true
[19:10:03] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:51]: OR true
[19:10:03] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:46]: opposite direction north
[19:10:03] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:47]: neighborPos BlockPos{x=195, y=66, z=205}
[19:10:03] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:48]: oppPos BlockPos{x=195, y=66, z=205}
[19:10:03] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:49]: facingPos BlockPos{x=195, y=66, z=207}
[19:10:03] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:50]: AND true
[19:10:03] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:51]: OR true
[19:10:03] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:46]: opposite direction north
[19:10:03] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:47]: neighborPos BlockPos{x=196, y=66, z=206}
[19:10:03] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:48]: oppPos BlockPos{x=195, y=66, z=205}
[19:10:03] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:49]: facingPos BlockPos{x=195, y=66, z=207}
[19:10:03] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:50]: AND true
[19:10:03] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:51]: OR true
[19:10:03] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:46]: opposite direction north
[19:10:03] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:47]: neighborPos BlockPos{x=195, y=66, z=206}
[19:10:03] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:48]: oppPos BlockPos{x=195, y=66, z=204}
[19:10:03] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:49]: facingPos BlockPos{x=195, y=66, z=206}
[19:10:03] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:50]: AND true
[19:10:03] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:51]: OR true
[19:10:03] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:46]: opposite direction north
[19:10:03] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:47]: neighborPos BlockPos{x=194, y=66, z=205}
[19:10:03] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:48]: oppPos BlockPos{x=195, y=66, z=204}
[19:10:03] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:49]: facingPos BlockPos{x=195, y=66, z=206}
[19:10:03] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:50]: AND true
[19:10:03] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:51]: OR true
[19:10:03] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:46]: opposite direction north
[19:10:03] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:47]: neighborPos BlockPos{x=195, y=66, z=204}
[19:10:03] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:48]: oppPos BlockPos{x=195, y=66, z=204}
[19:10:03] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:49]: facingPos BlockPos{x=195, y=66, z=206}
[19:10:03] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:50]: AND true
[19:10:03] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:51]: OR true
[19:10:03] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:46]: opposite direction north
[19:10:03] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:47]: neighborPos BlockPos{x=196, y=66, z=205}
[19:10:03] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:48]: oppPos BlockPos{x=195, y=66, z=204}
[19:10:03] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:49]: facingPos BlockPos{x=195, y=66, z=206}
[19:10:03] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:50]: AND true
[19:10:03] [Server thread/INFO] [STDOUT]: [tuunaa.stardew.items.ItemScythe:posCompare:51]: OR true

Oh, and thanks for the tip!  I was trying to find a better way to check for crops earlier but I couldn't find anything, so that's super helpful.

Edited by tuunaa
Posted
7 minutes ago, diesieben07 said:

You need to learn what == / != do! new BlockPos(1, 2, 3) == new BlockPos(1, 2, 3) is false. You need to use equals.

I don't know of I don't fully understand what you're trying to say here or if you don't fully understand what I'm trying to do. 

 

What I'm doing is only running the destroy code for blocks not on the positions of the north and south blocks relative to the right clicked block.  To my knowledge, if I change != to == it would reverse that, instead breaking the blocks north and south and leaving the blocks east and west.

 

This does seem like kind of a dumb mistake to make though, considering the discussion up until this point has shown that that's what I've been trying to do, so I'm going to go ahead and give you the benefit of the doubt and say I'm missing something here.  Could you explain what you mean a little more?

Posted
16 hours ago, diesieben07 said:

I mean you need to use equals. Not == or !=== and != do instance-comparisons. Once again:

new BlockPos(1, 2, 3) == new BlockPos(1, 2, 3) is false. But new BlockPos(1, 2, 3).equals(new BlockPos(1, 2, 3)) is true.

 

This is basic Java knowledge. If you are missing basic Java knowledge, I recommend fixing that before starting to mod.

I'll be honest, I was genuinely considering going on a rant about how you could really work on being more kind to the people on here instead of immediately getting all hostile towards them, as that makes the Forge forums feel like an extremely unwelcoming place, but I decided it might not be the best idea to risk starting a flame war on my first topic.  Nevertheless, you helped fix my main problem.  Some other issues came up upon fixing the if statement, but I'm sure I can work those out on my own.  So thanks!

Posted
2 hours ago, diesieben07 said:

If you don't follow the rules then yes, you will get a response that's a bit more blunt than usual. Deal with it. I could have locked your thread for rule-violation.

Well I am thankful that you didn't lock my thread, truly. And I'm sorry, I didn't know not understanding your subjective definition of "basic Java knowledge" was against the rules. I'll try to avoid that next time.

 

I have a question, though. If someone breaks the rules, why don't you link the rules to them? I don't want to tell you how to run your forum, but this is typical moderator practice and I haven't seen you do it once in the past.

Posted
1 hour ago, tuunaa said:

Just direct them to it.  Problem solved.  

Sure, but it is literally at the top of the forum constantly "pinned" there.

 

Also, a "harsh" statement that you need to learn Java better is really the truth. Basically there comes a point in trying to help someone on the forum where you realize that they are missing something fundamental about Java itself. Since Java is so well covered elsewhere, we do actively shoo people away to go do their homework. I guess that could be perceived as "unwelcoming", but ultimately it is accurate and for your own good. Think of it more like a tough gym coach telling you you're out of shape -- it might sting to hear it but it is still worthy advice.

Check out my tutorials here: http://jabelarminecraft.blogspot.com/

Posted
1 minute ago, jabelar said:

Also, a "harsh" statement that you need to learn Java better is really the truth. Basically there comes a point in trying to help someone on the forum where you realize that they are missing something fundamental about Java itself. Since Java is so well covered elsewhere, we do actively shoo people away to go do their homework. I guess that could be perceived as "unwelcoming", but ultimately it is accurate and for your own good. Think of it more like a tough gym coach telling you you're out of shape -- it might sting to hear it but it is still worthy advice.

I never said it wasn't for my own good. I've been working with Java at a basic level for a few years now, but I guess there are some key things I'm still missing, and I'll work on that before coming back here, don't worry. I'm just saying there are nicer ways of saying that. Again, I don't want to tell you how to do things, I understand you do things for your own reasons, and I understand that the reason you're probably harsh is because you're always dealing with kids on here that have no idea what they're doing and that can get frustrating. You probably want some actually interesting problems to solve, but with how the Minecraft community is filled with young people who don't understand how intense modding actually is, that's virtually impossible. I totally get that, but all I ask is that you at least consider my point of view, though it can seem unrealistic. You don't have to go with it, I'm not going to argue with you until you do. 

 

Your analogy makes a lot of sense, but in my experience, it's the really kind and considerate gym teachers -- or just teachers in general, I guess -- who help create inspiration and success in their students. I know you're just a moderator on a forum, and you didn't have to sign a paper saying, "I agree to help inspire as many clueless, annoying children as I can," but it can be really disheartening for a kid to ask for help and get a short "you clearly need to learn more Java before doing this" kind of reply. If these kids were maybe given a little push in the right direction, like to some beginning Java sights, maybe they could go on to make some really great stuff, or even get a well-paying job that they really enjoy in programming.

 

Again, I'm not expecting you to follow this at all. If anything, I'm really just expecting a "yeah, right" reply. But I think the possibility for inspiration and creativity here is astounding, and I think with just a little bit of nurturing it could be increased tenfold. So all I ask is, when someone comes in here with basic Java mistakes, at least provide them with a resource or two for learning better Java. And, one more time, I don't want to tell you hot to do this. So ultimately, do what's best for you, I just want you to consider this.

Posted
1 hour ago, tuunaa said:

but it can be really disheartening for a kid to ask for help and get a short "you clearly need to learn more Java before doing this" kind of reply. If these kids were maybe given a little push in the right direction,

That's a quote in his signature from years ago. He put it in his sig because he thought it was funny. 

As for a nudge in the right direction, it's called "Google."

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
1 hour ago, tuunaa said:

So I only just realised you weren't diesieben07. Oops. But you guys get the point right?

 

Yes, but one other thing you need to understand is that programming is a very exacting thing that depends on detail, organized thought and accurate semantics and so it attracts a certain type of personality that is very factual and efficient and therefore may come across to "normal" people as being blunt. With diesieben07 you know you're getting accurate information and that is worth a lot, and if he says go learn Java then it is the right suggestion.

 

Another thing to consider is having empathy the other way. Imagine being an expert musician and having to teach beginner violin. It is actually "painful" for a good musician to hear something out of tune, and so when someone is writing code that is "out of tune" it is very hard for an expert programmer to not get impatient. Then imagine that every day another half-dozen beginner violin players show up on your doorstep playing out of tune and asking for help. For your own sanity you basically have to get efficient at shooing some away and picking the ones that you think you can actually help.

 

Basically I'm saying there is a reason why the personality of kindergarten teacher tends to be very different than a doctoral math professor.

Check out my tutorials here: http://jabelarminecraft.blogspot.com/

Posted
13 minutes ago, Draco18s said:

That's a quote in his signature from years ago. He put it in his sig because he thought it was funny. 

I wasn't referring to his signature, I was referring to the fact that the majority of the Minecraft community is populated by children.

14 minutes ago, Draco18s said:

As for a nudge in the right direction, it's called "Google."

Even telling someone to "just Google it" would help.

12 minutes ago, jabelar said:

Yes, but one other thing you need to understand is that programming is a very exacting thing that depends on detail, organized thought and accurate semantics and so it attracts a certain type of personality that is very factual and efficient and therefore may come across to "normal" people as being blunt. With diesieben07 you know you're getting accurate information and that is worth a lot, and if he says go learn Java then it is the right suggestion.

I never said he was wrong in telling me that I need to work on my Java. I actually said it was correct. I can also tell he's very smart and knows what he's doing. If he has that kind of personality, that's fine. I told him to do what's best for him.

 

15 minutes ago, jabelar said:

Another thing to consider is having empathy the other way. Imagine being an expert musician and having to teach beginner violin. It is actually "painful" for a good musician to hear something out of tune, and so when someone is writing code that is "out of tune" it is very hard for an expert programmer to not get impatient. Then imagine that every day another half-dozen beginner violin players show up on your doorstep playing out of tune and asking for help. For your own sanity you basically have to get efficient at shooing some away and picking the ones that you think you can actually help.

I don't really think the music teacher analogy is the best here, but I do understand what you're saying. The thing is, most teachers will still "shoo away" people in a polite manner. Again, I understand if this is just his personality, there's no problem if this is how he is normally. 

 

And after arguing my side once more, I'm going to completely devalue my opinion and say this is gonna be my last post on here. It's started to get more traction than I would have liked, and though everything's been fine so far, I can see this getting out of hand quickly, and it's giving me genuine anxiety. I'd like to thank you all for arguing diesieben07's side in a professional way without going over the top, and you've basically managed to convince me that I was in the wrong from the start.

 

I hope you all have a good day.

Posted
1 hour ago, tuunaa said:

Even telling someone to "just Google it" would help.

I beg to differ

http://lmgtfy.com/?q=Learn+java

  • Haha 1

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.

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



×
×
  • Create New...

Important Information

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