Chair + Hammer Pushing Functionality

This commit is contained in:
Kam committed 2025-03-09 20:02:24 -04:00
1 parent ffcc8f603f
commit eda6b72058
9 files changed
+274 -27

No files matched your search

@@ -40,6 +40,7 @@ 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.item.HammerPacket;
import kamkeel.npcs.network.packets.request.jobs.JobGetPacket;
import kamkeel.npcs.network.packets.request.jobs.JobSavePacket;
import kamkeel.npcs.network.packets.request.jobs.JobSpawnerAddPacket;
@@ -313,6 +314,7 @@ public class PacketHandler {
// Tool Packets
REQUEST_PACKET.registerPacket(new ColorBrushPacket());
REQUEST_PACKET.registerPacket(new ColorSetPacket());
REQUEST_PACKET.registerPacket(new HammerPacket());
// Custom Effect Packets
REQUEST_PACKET.registerPacket(new EffectGetPacket());
@@ -93,6 +93,13 @@ public class PacketUtil {
return false;
}
break;
case HAMMER:
if (item.getItem() != CustomItems.tool || item.getItemDamage() != 0) {
LogWriter.error(String.format("%s attempted to utilize a %s Packet without a Pather, they could be a hacker",
player.getCommandSenderName(), type));
return false;
}
break;
}
return true;
}
@@ -149,6 +156,8 @@ public class PacketUtil {
|| item.getItem() == Item.getItemFromBlock(CustomItems.redstoneBlock));
case BRUSH:
return item.getItem() == CustomItems.tool && item.getItemDamage() == 1;
case HAMMER:
return item.getItem() == CustomItems.tool && item.getItemDamage() == 0;
default:
return false;
}
@@ -186,6 +195,8 @@ public class PacketUtil {
return "valid Block";
case BRUSH:
return "Paintbrush";
case HAMMER:
return "Hammer";
default:
return type.toString();
}
@@ -8,5 +8,6 @@ public enum EnumItemPacketType {
SCRIPTER,
PATHER,
BLOCK,
BRUSH
BRUSH,
HAMMER
}
@@ -192,5 +192,5 @@ public enum EnumRequestPacket {
MagicGet,
MagicSave,
NpcMagicGet,
NpcMagicSave,
NpcMagicSave, Hammer,
}
@@ -0,0 +1,84 @@
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 net.minecraft.tileentity.TileEntity;
import noppes.npcs.CustomNpcsPermissions;
import noppes.npcs.blocks.tiles.TileBanner;
import noppes.npcs.blocks.tiles.TileChair;
import noppes.npcs.blocks.tiles.TileColorable;
import noppes.npcs.blocks.tiles.TileWallBanner;
import java.io.IOException;
import static noppes.npcs.items.ItemNpcTool.BRUSH_COLOR_TAG;
import static noppes.npcs.items.ItemNpcTool.getColor;
public final class HammerPacket extends AbstractPacket {
public static String packetName = "Request|Hammer";
private int x;
private int y;
private int z;
public HammerPacket(int x, int y, int z) {
this.x = x;
this.y = y;
this.z = z;
}
public HammerPacket() {}
@Override
public Enum getType() {
return EnumRequestPacket.Hammer;
}
@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.x);
out.writeInt(this.y);
out.writeInt(this.z);
}
@Override
public void receiveData(ByteBuf in, EntityPlayer player) throws IOException {
if (!(player instanceof EntityPlayerMP))
return;
if (!PacketUtil.verifyItemPacket(EnumItemPacketType.HAMMER, player))
return;
int x = in.readInt();
int y = in.readInt();
int z = in.readInt();
TileEntity tile = player.worldObj.getTileEntity(x, y, z);
if(tile instanceof TileChair) {
((TileChair) tile).push();
} else if (tile instanceof TileBanner || tile instanceof TileWallBanner){
}
}
}
@@ -9,32 +9,88 @@ import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import noppes.npcs.blocks.tiles.TileChair;
import noppes.npcs.blocks.tiles.TileVariant;
import noppes.npcs.entity.EntityChairMount;
import noppes.npcs.entity.EntityCustomNpc;
import noppes.npcs.items.ItemNpcTool;
import java.util.List;
public class BlockChair extends BlockRotated{
public BlockChair() {
super(Blocks.planks);
setBlockBounds(0.1f, 0, 0.1f, 0.9f, 1, 0.9f);
}
@Override
@Override
public void onBlockPlacedBy(World par1World, int par2, int par3, int par4, EntityLivingBase par5EntityLivingBase, ItemStack par6ItemStack){
super.onBlockPlacedBy(par1World, par2, par3, par4, par5EntityLivingBase, par6ItemStack);
par1World.setBlockMetadataWithNotify(par2, par3, par4, par6ItemStack.getItemDamage() , 2);
}
@Override
public AxisAlignedBB getCollisionBoundingBoxFromPool(World p_149668_1_, int x, int y, int z){
return AxisAlignedBB.getBoundingBox(x + 0.1f, y, z + 0.1f, x + 0.9f, y + 0.5f, z + 0.9f);
public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int x, int y, int z) {
TileEntity te = world.getTileEntity(x, y, z);
if (te instanceof TileChair && ((TileChair) te).isPushed()) {
// Use the rotation to set a vertical slab hitbox on the pushed side.
int rotation = ((TileVariant) te).rotation;
switch(rotation) {
case 0: // North: slab from z to z+0.3.
return AxisAlignedBB.getBoundingBox(x + 0.1, y, z, x + 0.9, y + 1, z + 0.3);
case 1: // East: slab from x+0.7 to x+1.
return AxisAlignedBB.getBoundingBox(x + 0.7, y, z + 0.1, x + 1.0, y + 1, z + 0.9);
case 2: // South: slab from z+0.7 to z+1.
return AxisAlignedBB.getBoundingBox(x + 0.1, y, z + 0.7, x + 0.9, y + 1, z + 1.0);
case 3: // West: slab from x to x+0.3.
return AxisAlignedBB.getBoundingBox(x, y, z + 0.1, x + 0.3, y + 1, z + 0.9);
default:
return AxisAlignedBB.getBoundingBox(x + 0.1, y, z + 0.1, x + 0.9, y + 1, z + 0.9);
}
}
// Default collision box (half-height) when not pushed.
return AxisAlignedBB.getBoundingBox(x + 0.1, y, z + 0.1, x + 0.9, y + 0.5, z + 0.9);
}
@Override
@Override
public void setBlockBoundsBasedOnState(IBlockAccess world, int x, int y, int z) {
TileEntity tileentity = world.getTileEntity(x, y, z);
if (!(tileentity instanceof TileChair)) {
super.setBlockBoundsBasedOnState(world, x, y, z);
return;
}
TileChair tile = (TileChair) tileentity;
if (tile.isPushed()) {
// Pushed state: set a thicker vertical slab on the pushed side.
switch (tile.rotation) {
case 0: // North.
setBlockBounds(0.1f, 0, 0, 0.9f, 1.0f, 0.3f);
break;
case 1: // East.
setBlockBounds(0.7f, 0, 0.1f, 1.0f, 1.0f, 0.9f);
break;
case 2: // South.
setBlockBounds(0.1f, 0, 0.7f, 0.9f, 1.0f, 1.0f);
break;
case 3: // West.
setBlockBounds(0, 0, 0.1f, 0.3f, 1.0f, 0.9f);
break;
default:
setBlockBounds(0.1f, 0, 0.1f, 0.9f, 1.0f, 0.9f);
break;
}
} else {
// Not pushed: default chair bounds.
setBlockBounds(0.1f, 0, 0.1f, 0.9f, 1.0f, 0.9f);
}
}
@Override
public void getSubBlocks(Item par1, CreativeTabs par2CreativeTabs, List par3List){
par3List.add(new ItemStack(par1, 1, 0));
par3List.add(new ItemStack(par1, 1, 1));
@@ -44,7 +100,7 @@ public class BlockChair extends BlockRotated{
par3List.add(new ItemStack(par1, 1, 5));
}
@Override
@Override
public int damageDropped(int par1){
return par1;
}
@@ -53,25 +109,43 @@ public class BlockChair extends BlockRotated{
public TileEntity createNewTileEntity(World var1, int var2) {
return new TileChair();
}
@Override
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int p_149727_6_, float p_149727_7_, float p_149727_8_, float p_149727_9_){
ItemStack item = player.inventory.getCurrentItem();
if(item != null && item.getItem() != null && item.getItem() instanceof ItemNpcTool)
return false;
return MountBlock(world, x, y, z, player);
}
public static boolean MountBlock(World world, int x, int y, int z, EntityPlayer player){
if(world.isRemote)
return true;
List<Entity> list = world.getEntitiesWithinAABB(Entity.class, AxisAlignedBB.getBoundingBox(x, y, z, x + 1, y + 1, z + 1));
for(Entity entity : list){
if(entity instanceof EntityChairMount || entity instanceof EntityCustomNpc)
return false;
}
EntityChairMount mount = new EntityChairMount(world);
mount.setPosition(x + 0.5f, y, z + 0.5);
player.mountEntity(mount);
world.spawnEntityInWorld(mount);
player.mountEntity(mount);
return true;
}
public static boolean MountBlock(World world, int x, int y, int z, EntityPlayer player) {
if (world.isRemote)
return true;
// Do not allow mounting if the player is holding the NpcTool.
if (player.getCurrentEquippedItem() != null &&
player.getCurrentEquippedItem().getItem() instanceof noppes.npcs.items.ItemNpcTool) {
return false;
}
// Check if the chair is pushed.
TileEntity te = world.getTileEntity(x, y, z);
if (te instanceof TileChair && ((TileChair) te).isPushed()) {
return false;
}
// Existing check to prevent mounting if an entity is already there.
List<Entity> list = world.getEntitiesWithinAABB(Entity.class,
AxisAlignedBB.getBoundingBox(x, y, z, x + 1, y + 1, z + 1));
for (Entity entity : list) {
if (entity instanceof EntityChairMount || entity instanceof EntityCustomNpc)
return false;
}
EntityChairMount mount = new EntityChairMount(world);
mount.setPosition(x + 0.5f, y, z + 0.5f);
world.spawnEntityInWorld(mount);
player.mountEntity(mount);
return true;
}
}
@@ -1,5 +1,39 @@
package noppes.npcs.blocks.tiles;
import net.minecraft.util.AxisAlignedBB;
public class TileChair extends TileVariant {
public boolean isPushed(){
return this.variant == 1;
}
public void push(){
// Variant 14 is not pushed, 1 is pushed
this.variant = this.variant == 14 ? 1 : 14;
this.markDirty();
this.worldObj.markBlockForUpdate(this.xCoord, this.yCoord, this.zCoord);
}
@Override
public AxisAlignedBB getRenderBoundingBox(){
if (isPushed()){
// When pushed, return a thicker vertical slab based on rotation.
switch(this.rotation) {
case 0: // North.
return AxisAlignedBB.getBoundingBox(xCoord + 0.1, yCoord, zCoord, xCoord + 0.9, yCoord + 1, zCoord + 0.3);
case 1: // East.
return AxisAlignedBB.getBoundingBox(xCoord + 0.7, yCoord, zCoord + 0.1, xCoord + 1, yCoord + 1, zCoord + 0.9);
case 2: // South.
return AxisAlignedBB.getBoundingBox(xCoord + 0.1, yCoord, zCoord + 0.7, xCoord + 0.9, yCoord + 1, zCoord + 1);
case 3: // West.
return AxisAlignedBB.getBoundingBox(xCoord, yCoord, zCoord + 0.1, xCoord + 0.3, yCoord + 1, zCoord + 0.9);
default:
return AxisAlignedBB.getBoundingBox(xCoord, yCoord - 1, zCoord, xCoord + 1, yCoord + 1, zCoord + 1);
}
} else {
// Default render bounding box.
return AxisAlignedBB.getBoundingBox(xCoord, yCoord - 1, zCoord, xCoord + 1, yCoord + 1, zCoord + 1);
}
}
}
@@ -9,6 +9,7 @@ import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ResourceLocation;
import noppes.npcs.CustomItems;
import noppes.npcs.blocks.BlockChair;
import noppes.npcs.blocks.tiles.TileChair;
import noppes.npcs.blocks.tiles.TileVariant;
import noppes.npcs.client.model.blocks.chair.ModelChair;
import noppes.npcs.client.model.blocks.chair.ModelChairSpoof;
@@ -45,7 +46,31 @@ public class BlockChairRenderer extends BlockRendererInterface{
GL11.glTranslatef((float)var2 + 0.5f, (float)var4 + 1.5f, (float)var6 + 0.5f);
// GL11.glScalef(1.2f, 1.1f, 1.2f);
GL11.glRotatef(180, 0, 0, 1);
// Apply push translation if this is a pushed chair.
if(tile instanceof TileChair) {
TileChair chairTile = (TileChair) tile;
if(chairTile.isPushed()) {
float pushDistance = 0.6f; // adjust as needed for visual effect
switch(tile.rotation) {
case 0: // Facing north – push the model backwards.
GL11.glTranslatef(0, 0, -pushDistance);
break;
case 1: // Facing east – push right.
GL11.glTranslatef(-pushDistance, 0, 0);
break;
case 2: // Facing south – push forwards.
GL11.glTranslatef(0, 0, pushDistance);
break;
case 3: // Facing west – push left.
GL11.glTranslatef(pushDistance, 0, 0);
break;
}
}
}
GL11.glRotatef(90 * tile.rotation, 0, 1, 0);
GL11.glColor3f(1, 1, 1);
GL11.glEnable(GL11.GL_ALPHA_TEST);
@@ -6,6 +6,7 @@ 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 kamkeel.npcs.network.packets.request.item.HammerPacket;
import net.minecraft.block.Block;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.creativetab.CreativeTabs;
@@ -20,7 +21,9 @@ import noppes.npcs.CustomItems;
import noppes.npcs.CustomNpcs;
import noppes.npcs.CustomNpcsPermissions;
import noppes.npcs.blocks.BlockBanner;
import noppes.npcs.blocks.BlockChair;
import noppes.npcs.blocks.BlockTallLamp;
import noppes.npcs.blocks.tiles.TileChair;
import noppes.npcs.blocks.tiles.TileColorable;
import noppes.npcs.client.NoppesUtil;
import noppes.npcs.constants.EnumGuiType;
@@ -90,6 +93,15 @@ public class ItemNpcTool extends Item {
PacketClient.sendClient(new ColorSetPacket(x, y, z));
return true;
}
} else if (isHammer(stack)){
Block block = player.worldObj.getBlock(x, y, z);
if(block instanceof BlockChair){
TileEntity tile = player.worldObj.getTileEntity(x, y, z);
if(tile instanceof TileChair) {
PacketClient.sendClient(new HammerPacket(x, y, z));
return true;
}
}
}
return false;
@@ -122,6 +134,10 @@ public class ItemNpcTool extends Item {
return itemStack.getItemDamage() == 1;
}
public static boolean isHammer(ItemStack itemStack){
return itemStack.getItemDamage() == 0;
}
@Override
public Item setUnlocalizedName(String name){
GameRegistry.registerItem(this, name);