From 6193f77bf5b44e772f179acf7453fb4fafce36b3 Mon Sep 17 00:00:00 2001 From: Kam Date: Thu, 13 Feb 2025 17:40:16 -0500 Subject: [PATCH] Brush Setting and Getting Packets --- .../kamkeel/npcs/network/PacketHandler.java | 2 + .../npcs/network/enums/EnumRequestPacket.java | 2 +- .../request/item/ColorBrushPacket.java | 74 +++++++++++++++++++ .../packets/request/item/ColorSetPacket.java | 34 ++++++--- .../java/noppes/npcs/blocks/BlockBanner.java | 3 +- .../noppes/npcs/blocks/BlockCouchWool.java | 8 +- .../noppes/npcs/blocks/BlockShortLamp.java | 3 +- .../noppes/npcs/blocks/BlockTallLamp.java | 5 +- .../noppes/npcs/blocks/BlockWallBanner.java | 5 +- .../npcs/blocks/tiles/TileColorable.java | 34 ++++----- .../client/gui/item/GuiNpcPaintbrush.java | 7 +- .../java/noppes/npcs/items/ItemNpcTool.java | 27 +++++-- 12 files changed, 146 insertions(+), 58 deletions(-) create mode 100644 src/main/java/kamkeel/npcs/network/packets/request/item/ColorBrushPacket.java diff --git a/src/main/java/kamkeel/npcs/network/PacketHandler.java b/src/main/java/kamkeel/npcs/network/PacketHandler.java index 75d4a8de6..83d7d9fc5 100644 --- a/src/main/java/kamkeel/npcs/network/PacketHandler.java +++ b/src/main/java/kamkeel/npcs/network/PacketHandler.java @@ -37,6 +37,7 @@ import kamkeel.npcs.network.packets.request.effects.EffectSavePacket; import kamkeel.npcs.network.packets.request.effects.EffectsGetPacket; import kamkeel.npcs.network.packets.request.faction.*; import kamkeel.npcs.network.packets.request.feather.DimensionTeleportPacket; +import kamkeel.npcs.network.packets.request.item.ColorBrushPacket; import kamkeel.npcs.network.packets.request.item.ColorSetPacket; import kamkeel.npcs.network.packets.request.jobs.JobGetPacket; import kamkeel.npcs.network.packets.request.jobs.JobSavePacket; @@ -309,6 +310,7 @@ public class PacketHandler { REQUEST_PACKET.registerPacket(new MovingPathGetPacket()); // Tool Packets + REQUEST_PACKET.registerPacket(new ColorBrushPacket()); REQUEST_PACKET.registerPacket(new ColorSetPacket()); // Custom Effect Packets diff --git a/src/main/java/kamkeel/npcs/network/enums/EnumRequestPacket.java b/src/main/java/kamkeel/npcs/network/enums/EnumRequestPacket.java index 78080ad3e..a4fa0f364 100644 --- a/src/main/java/kamkeel/npcs/network/enums/EnumRequestPacket.java +++ b/src/main/java/kamkeel/npcs/network/enums/EnumRequestPacket.java @@ -178,5 +178,5 @@ public enum EnumRequestPacket { EffectRemove, EffectSave, - ColorSet, + ColorSet, ColorBrush, } diff --git a/src/main/java/kamkeel/npcs/network/packets/request/item/ColorBrushPacket.java b/src/main/java/kamkeel/npcs/network/packets/request/item/ColorBrushPacket.java new file mode 100644 index 000000000..3daef0b19 --- /dev/null +++ b/src/main/java/kamkeel/npcs/network/packets/request/item/ColorBrushPacket.java @@ -0,0 +1,74 @@ +package kamkeel.npcs.network.packets.request.item; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; +import kamkeel.npcs.network.AbstractPacket; +import kamkeel.npcs.network.PacketChannel; +import kamkeel.npcs.network.PacketHandler; +import kamkeel.npcs.network.PacketUtil; +import kamkeel.npcs.network.enums.EnumItemPacketType; +import kamkeel.npcs.network.enums.EnumRequestPacket; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import noppes.npcs.CustomNpcsPermissions; + +import java.io.IOException; + +import static noppes.npcs.items.ItemNpcTool.BRUSH_COLOR_TAG; + +public final class ColorBrushPacket extends AbstractPacket { + public static String packetName = "Request|ColorBrush"; + + private int color; + + public ColorBrushPacket(int color) { + this.color = color; + } + + public ColorBrushPacket() {} + + @Override + public Enum getType() { + return EnumRequestPacket.ColorBrush; + } + + @Override + public PacketChannel getChannel() { + return PacketHandler.REQUEST_PACKET; + } + + @Override + public CustomNpcsPermissions.Permission getPermission() { + return CustomNpcsPermissions.NPC_BUILD; + } + + @SideOnly(Side.CLIENT) + @Override + public void sendData(ByteBuf out) throws IOException { + out.writeInt(this.color); + } + + @Override + public void receiveData(ByteBuf in, EntityPlayer player) throws IOException { + if (!(player instanceof EntityPlayerMP)) + return; + if (!PacketUtil.verifyItemPacket(EnumItemPacketType.BRUSH, player)) + return; + + int color = in.readInt(); + ItemStack stack = player.getHeldItem(); + setBrushColor(stack, color); + } + + public static void setBrushColor(ItemStack brush, int color){ + NBTTagCompound brushCompound = brush.getTagCompound(); + if(brushCompound == null) + brushCompound = new NBTTagCompound(); + + brushCompound.setInteger(BRUSH_COLOR_TAG, color); + brush.setTagCompound(brushCompound); + } +} diff --git a/src/main/java/kamkeel/npcs/network/packets/request/item/ColorSetPacket.java b/src/main/java/kamkeel/npcs/network/packets/request/item/ColorSetPacket.java index 48c07eb73..aafac6830 100644 --- a/src/main/java/kamkeel/npcs/network/packets/request/item/ColorSetPacket.java +++ b/src/main/java/kamkeel/npcs/network/packets/request/item/ColorSetPacket.java @@ -3,29 +3,33 @@ package kamkeel.npcs.network.packets.request.item; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import kamkeel.npcs.network.AbstractPacket; -import kamkeel.npcs.network.PacketChannel; -import kamkeel.npcs.network.PacketHandler; -import kamkeel.npcs.network.PacketUtil; +import kamkeel.npcs.network.*; import kamkeel.npcs.network.enums.EnumItemPacketType; import kamkeel.npcs.network.enums.EnumRequestPacket; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; import noppes.npcs.CustomNpcsPermissions; +import noppes.npcs.blocks.tiles.TileColorable; import java.io.IOException; import static noppes.npcs.items.ItemNpcTool.BRUSH_COLOR_TAG; +import static noppes.npcs.items.ItemNpcTool.getColor; public final class ColorSetPacket extends AbstractPacket { public static String packetName = "Request|ColorSet"; - private int color; + private int x; + private int y; + private int z; - public ColorSetPacket(int color) { - this.color = color; + public ColorSetPacket(int x, int y, int z) { + this.x = x; + this.y = y; + this.z = z; } public ColorSetPacket() {} @@ -48,7 +52,9 @@ public final class ColorSetPacket extends AbstractPacket { @SideOnly(Side.CLIENT) @Override public void sendData(ByteBuf out) throws IOException { - out.writeInt(this.color); + out.writeInt(this.x); + out.writeInt(this.y); + out.writeInt(this.z); } @Override @@ -58,9 +64,17 @@ public final class ColorSetPacket extends AbstractPacket { if (!PacketUtil.verifyItemPacket(EnumItemPacketType.BRUSH, player)) return; - int color = in.readInt(); + int x = in.readInt(); + int y = in.readInt(); + int z = in.readInt(); + + TileEntity tile = player.worldObj.getTileEntity(x, y, z); ItemStack stack = player.getHeldItem(); - setBrushColor(stack, color); + if(tile instanceof TileColorable) { + int color = getColor(stack.getTagCompound()); + TileColorable colorable = (TileColorable) tile; + colorable.setColor(color); + } } public static void setBrushColor(ItemStack brush, int color){ diff --git a/src/main/java/noppes/npcs/blocks/BlockBanner.java b/src/main/java/noppes/npcs/blocks/BlockBanner.java index 2ca71613c..a6444efe7 100644 --- a/src/main/java/noppes/npcs/blocks/BlockBanner.java +++ b/src/main/java/noppes/npcs/blocks/BlockBanner.java @@ -10,7 +10,6 @@ import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; -import net.minecraft.init.Items; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; @@ -46,7 +45,7 @@ public class BlockBanner extends BlockContainer{ TileBanner tile = (TileBanner) par1World.getTileEntity(i, j, k); if(tile.canEdit()) return true; - else if(TileColorable.doNotAllowModification(item)) + else if(TileColorable.allowColorChange(item) != TileColorable.ColorChangeType.DYE) return false; int color = colorTableInts[BlockColored.func_150031_c(item.getItemDamage())]; diff --git a/src/main/java/noppes/npcs/blocks/BlockCouchWool.java b/src/main/java/noppes/npcs/blocks/BlockCouchWool.java index 97da0136d..72179fdc3 100644 --- a/src/main/java/noppes/npcs/blocks/BlockCouchWool.java +++ b/src/main/java/noppes/npcs/blocks/BlockCouchWool.java @@ -11,7 +11,6 @@ import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; -import net.minecraft.init.Items; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; @@ -19,7 +18,6 @@ import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.IIcon; import net.minecraft.util.MathHelper; import net.minecraft.world.World; -import noppes.npcs.CustomItems; import noppes.npcs.NoppesUtilServer; import noppes.npcs.blocks.tiles.TileColorable; import noppes.npcs.blocks.tiles.TileCouchWool; @@ -38,8 +36,12 @@ public class BlockCouchWool extends BlockContainer { @Override public boolean onBlockActivated(World par1World, int i, int j, int k, EntityPlayer player, int par6, float par7, float par8, float par9){ ItemStack item = player.inventory.getCurrentItem(); - if(TileColorable.doNotAllowModification(item)) + TileColorable.ColorChangeType colorChangeType = TileColorable.allowColorChange(item); + if(colorChangeType == TileColorable.ColorChangeType.NONE) return BlockChair.MountBlock(par1World, i, j, k, player); + else if(colorChangeType == TileColorable.ColorChangeType.PAINTBRUSH) + return false; + int meta = par1World.getBlockMetadata(i, j, k); if(meta >= 7) j--; diff --git a/src/main/java/noppes/npcs/blocks/BlockShortLamp.java b/src/main/java/noppes/npcs/blocks/BlockShortLamp.java index d274b7574..ba24a5394 100644 --- a/src/main/java/noppes/npcs/blocks/BlockShortLamp.java +++ b/src/main/java/noppes/npcs/blocks/BlockShortLamp.java @@ -10,7 +10,6 @@ import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; -import net.minecraft.init.Items; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; @@ -40,7 +39,7 @@ public class BlockShortLamp extends BlockContainer { public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { ItemStack item = player.inventory.getCurrentItem(); - if(TileColorable.doNotAllowModification(item)) + if(TileColorable.allowColorChange(item) != TileColorable.ColorChangeType.DYE) return false; int meta = world.getBlockMetadata(x, y, z); TileColorable tile = (TileColorable) world.getTileEntity(x, y, z); diff --git a/src/main/java/noppes/npcs/blocks/BlockTallLamp.java b/src/main/java/noppes/npcs/blocks/BlockTallLamp.java index a73e90503..ff2123fa7 100644 --- a/src/main/java/noppes/npcs/blocks/BlockTallLamp.java +++ b/src/main/java/noppes/npcs/blocks/BlockTallLamp.java @@ -10,7 +10,6 @@ import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; -import net.minecraft.init.Items; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; @@ -39,8 +38,8 @@ public class BlockTallLamp extends BlockContainer { @Override public boolean onBlockActivated(World par1World, int i, int j, int k, EntityPlayer player, int par6, float par7, float par8, float par9){ ItemStack item = player.inventory.getCurrentItem(); - if(TileColorable.doNotAllowModification(item)) - return false; + if(TileColorable.allowColorChange(item) != TileColorable.ColorChangeType.DYE) + return false; int meta = par1World.getBlockMetadata(i, j, k); if(meta >= 7) j--; diff --git a/src/main/java/noppes/npcs/blocks/BlockWallBanner.java b/src/main/java/noppes/npcs/blocks/BlockWallBanner.java index 4c314f938..106c4f18e 100644 --- a/src/main/java/noppes/npcs/blocks/BlockWallBanner.java +++ b/src/main/java/noppes/npcs/blocks/BlockWallBanner.java @@ -10,7 +10,6 @@ import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; -import net.minecraft.init.Items; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; @@ -42,8 +41,8 @@ public class BlockWallBanner extends BlockContainer{ TileWallBanner tile = (TileWallBanner) par1World.getTileEntity(i, j, k); if(tile.canEdit()) return true; - else if(TileColorable.doNotAllowModification(item)) - return false; + else if(TileColorable.allowColorChange(item) != TileColorable.ColorChangeType.DYE) + return false; int color = colorTableInts[BlockColored.func_150031_c(item.getItemDamage())]; if(tile.color != color){ diff --git a/src/main/java/noppes/npcs/blocks/tiles/TileColorable.java b/src/main/java/noppes/npcs/blocks/tiles/TileColorable.java index 41bc6cb0d..d40f6bf71 100644 --- a/src/main/java/noppes/npcs/blocks/tiles/TileColorable.java +++ b/src/main/java/noppes/npcs/blocks/tiles/TileColorable.java @@ -7,9 +7,6 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import noppes.npcs.NoppesUtilServer; import noppes.npcs.items.ItemNpcTool; -import noppes.npcs.items.ItemStaff; - -import static kamkeel.npcs.util.ColorUtil.colorTableInts; public class TileColorable extends TileVariant { @@ -31,27 +28,22 @@ public class TileColorable extends TileVariant { this.worldObj.markBlockForUpdate(this.xCoord, this.yCoord, this.zCoord); } - public void changeColor(EntityPlayer player, ItemStack stack){ - if(stack == null) - return; + public static ColorChangeType allowColorChange(ItemStack stack){ + if(stack == null || stack.getItem() == null) + return ColorChangeType.NONE; - if(stack.getItem() == null) - return; + if(stack.getItem() == Items.dye) + return ColorChangeType.DYE; - if(stack.getItem() == Items.dye){ - int color = colorTableInts[BlockColored.func_150031_c(stack.getItemDamage())]; - NoppesUtilServer.consumeItemStack(1, player); - setColor(color); - } else if(ItemNpcTool.isPaintbrush(stack)){ - int color = colorTableInts[BlockColored.func_150031_c(stack.getItemDamage())]; - NoppesUtilServer.consumeItemStack(1, player); - setColor(color); - } + if(ItemNpcTool.isPaintbrush(stack)) + return ColorChangeType.PAINTBRUSH; + + return ColorChangeType.NONE; } - public static boolean doNotAllowModification(ItemStack stack){ - return stack == null || stack.getItem() == null || - (stack.getItem() != Items.dye && - !(stack.getItem() instanceof ItemNpcTool)); + public enum ColorChangeType { + NONE, + DYE, + PAINTBRUSH } } diff --git a/src/main/java/noppes/npcs/client/gui/item/GuiNpcPaintbrush.java b/src/main/java/noppes/npcs/client/gui/item/GuiNpcPaintbrush.java index e39d3ed21..0e038251c 100644 --- a/src/main/java/noppes/npcs/client/gui/item/GuiNpcPaintbrush.java +++ b/src/main/java/noppes/npcs/client/gui/item/GuiNpcPaintbrush.java @@ -1,11 +1,10 @@ package noppes.npcs.client.gui.item; import kamkeel.npcs.network.PacketClient; -import kamkeel.npcs.network.packets.request.item.ColorSetPacket; +import kamkeel.npcs.network.packets.request.item.ColorBrushPacket; import net.minecraft.client.gui.GuiButton; import net.minecraft.client.resources.IResource; import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.ResourceLocation; import noppes.npcs.client.gui.util.GuiNPCInterface; import noppes.npcs.client.gui.util.GuiNpcButton; @@ -18,8 +17,6 @@ import java.awt.image.BufferedImage; import java.io.IOException; import java.io.InputStream; -import static noppes.npcs.items.ItemNpcTool.BRUSH_COLOR_TAG; - public class GuiNpcPaintbrush extends GuiNPCInterface { private GuiNpcTextField textfield; @@ -90,7 +87,7 @@ public class GuiNpcPaintbrush extends GuiNPCInterface { @Override public void close(){ - PacketClient.sendClient(new ColorSetPacket(this.color)); + PacketClient.sendClient(new ColorBrushPacket(this.color)); super.close(); } diff --git a/src/main/java/noppes/npcs/items/ItemNpcTool.java b/src/main/java/noppes/npcs/items/ItemNpcTool.java index 0737cb566..fd7e49c9d 100644 --- a/src/main/java/noppes/npcs/items/ItemNpcTool.java +++ b/src/main/java/noppes/npcs/items/ItemNpcTool.java @@ -4,7 +4,9 @@ import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import kamkeel.npcs.network.PacketClient; +import kamkeel.npcs.network.packets.request.item.ColorBrushPacket; import kamkeel.npcs.network.packets.request.item.ColorSetPacket; +import net.minecraft.block.Block; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.player.EntityPlayer; @@ -12,12 +14,13 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.ChatComponentTranslation; import net.minecraft.util.IIcon; import net.minecraft.world.World; import noppes.npcs.CustomItems; import noppes.npcs.CustomNpcs; import noppes.npcs.CustomNpcsPermissions; +import noppes.npcs.blocks.BlockBanner; +import noppes.npcs.blocks.BlockTallLamp; import noppes.npcs.blocks.tiles.TileColorable; import noppes.npcs.client.NoppesUtil; import noppes.npcs.constants.EnumGuiType; @@ -90,18 +93,26 @@ public class ItemNpcTool extends Item { } @Override - public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float hitX, float hitY, float hitZ) { + public boolean onItemUseFirst(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float hitX, float hitY, float hitZ) { + if(!world.isRemote) + return false; + if(isPaintbrush(stack)) { + Block block = world.getBlock(x, y, z); + if(block instanceof BlockTallLamp || block instanceof BlockBanner){ + int meta = world.getBlockMetadata(x, y, z); + if(meta >= 7) + y--; + } + TileEntity tile = world.getTileEntity(x, y, z); if(tile instanceof TileColorable) { - if(player.isSneaking() && world.isRemote){ + if(player.isSneaking()){ int color = ((TileColorable) tile).color; - PacketClient.sendClient(new ColorSetPacket(color)); + PacketClient.sendClient(new ColorBrushPacket(color)); } - else if (!world.isRemote && CustomNpcsPermissions.hasPermission(player, CustomNpcsPermissions.NPC_BUILD)){ - int color = getColor(stack.getTagCompound()); - TileColorable colorable = (TileColorable) tile; - colorable.setColor(color); + else { + PacketClient.sendClient(new ColorSetPacket(x, y, z)); } return true; }