TheMCJavaFre4k Posted February 27, 2019 Posted February 27, 2019 (edited) Hi There Im wanting to prevent the tile entity of a block from being removed until after Ive executed some code within the tile entity via a custom packet. Im able to get this working in survival mode by sending the packet within the getDrops method and delaying removal until the harvestBlock method(Similar to blockFlowerPot) as so: Spoiler @Override public void getDrops(net.minecraft.util.NonNullList<ItemStack> drops, IBlockAccess worldIn, BlockPos pos, IBlockState state, int fortune) { super.getDrops(drops, worldIn, pos, state, fortune); World world = (World)worldIn; TileEntityDJDeck te = world.getTileEntity(pos) instanceof TileEntityDJDeck ? (TileEntityDJDeck)world.getTileEntity(pos) : null; System.out.println("Called Get Drops"); if (te != null) { System.out.println("Sending Stop To Server"); MCDJMod.network.sendToAllAround(new PacketPlaySoundOnClient(pos, 0, 3), new NetworkRegistry.TargetPoint(world.provider.getDimension(), pos.getX(), pos.getY(), pos.getZ(), 20)); } } @Override public void harvestBlock(World world, EntityPlayer player, BlockPos pos, IBlockState state, @Nullable TileEntity te, ItemStack tool) { super.harvestBlock(world, player, pos, state, te, tool); System.out.println("Harvesting"); world.setBlockToAir(pos); world.removeTileEntity(pos); } @Override public boolean removedByPlayer(IBlockState state, World world, BlockPos pos, EntityPlayer player, boolean willHarvest) { return true; } Currently when broken in creative, nothing happens(Only breaking particles). I was initially using breakBlock but that didn't provide enough time for the packet to be read and when it was, the tile entity at the BlockPos was already removed. Im just not sure what methods would provide the necessary time or how i would modify the above setup to work for creative mode. Edited February 27, 2019 by TheMCJavaFre4k Solved Quote
Cadiboo Posted February 27, 2019 Posted February 27, 2019 Why are you trying to do this? You can probably send whatever data you need in the packet Quote About Me Spoiler My Discord - Cadiboo#8887 My Website - Cadiboo.github.io My Mods - Cadiboo.github.io/projects My Tutorials - Cadiboo.github.io/tutorials Versions below 1.14.4 are no longer supported on this forum. Use the latest version to receive support. When asking support remember to include all relevant log files (logs are found in .minecraft/logs/), code if applicable and screenshots if possible. Only download mods from trusted sites like CurseForge (minecraft.curseforge.com). A list of bad sites can be found here, with more information available at stopmodreposts.org Edit your own signature at www.minecraftforge.net/forum/settings/signature/ (Make sure to check its compatibility with the Dark Theme)
TheMCJavaFre4k Posted February 27, 2019 Author Posted February 27, 2019 1 minute ago, Cadiboo said: Why are you trying to do this? You can probably send whatever data you need in the packet My tile entity has a few methods responsible for stopping sound playback. The packet is used to update all nearby clients to stop any sound the TileEntity is making before it is removed. So in the packet handler I'm getting the TileEntity from the position sent over the packet and calling my methods on the client from there. Quote
Cadiboo Posted February 27, 2019 Posted February 27, 2019 Couldn’t you subscribe to the sound play event and cancel it? Quote About Me Spoiler My Discord - Cadiboo#8887 My Website - Cadiboo.github.io My Mods - Cadiboo.github.io/projects My Tutorials - Cadiboo.github.io/tutorials Versions below 1.14.4 are no longer supported on this forum. Use the latest version to receive support. When asking support remember to include all relevant log files (logs are found in .minecraft/logs/), code if applicable and screenshots if possible. Only download mods from trusted sites like CurseForge (minecraft.curseforge.com). A list of bad sites can be found here, with more information available at stopmodreposts.org Edit your own signature at www.minecraftforge.net/forum/settings/signature/ (Make sure to check its compatibility with the Dark Theme)
TheMCJavaFre4k Posted February 27, 2019 Author Posted February 27, 2019 6 minutes ago, Cadiboo said: Couldn’t you subscribe to the sound play event and cancel it? I haven't dealt with any Events thus far other than the standard registration ones so I wouldn't know where to begin. They current way I'm dealing with sounds is by using a custom MovingSound class(So to update positioning) being played by Minecraft.getMinecraft().getSoundHandler().playSound(). I can then stop it by passing in the exact same sound. This allows me to differentiate the exact same sound being played from 2 TileEntities and stop them independent of one another. Is this same functionality obtainable using a @SubscribeEvent and subscribing to the PlaySoundEvent class? Quote
Draco18s Posted February 27, 2019 Posted February 27, 2019 Option (a) include all of the relevant parameters in the packet so you don't need the TE. Option (b) use an ITickableSound in order for it to terminate itself when its source block is removed. https://github.com/Draco18s/ReasonableRealism/blob/1.12.1/src/main/java/com/draco18s/ores/client/SoundWindmill.java#L37 Quote 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.
TheMCJavaFre4k Posted February 27, 2019 Author Posted February 27, 2019 7 hours ago, Draco18s said: Option (b) use an ITickableSound in order for it to terminate itself when its source block is removed. https://github.com/Draco18s/ReasonableRealism/blob/1.12.1/src/main/java/com/draco18s/ores/client/SoundWindmill.java#L37 I totally forgot to check if I could use the sound to stop itself. I guess I just had tunnel vision when looking at the problem. Considering my custom sound is a tickable sound, this works flawlessly. Thanks heaps! Quote
Recommended Posts
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.