From eca1f242c459aa54ad04ccc2273d5c6c1b79ce55 Mon Sep 17 00:00:00 2001 From: Sen Date: Tue, 8 Jul 2025 01:51:47 +0200 Subject: [PATCH] add rocket launcher + fixes --- client/src/main/java/client/Client.java | 11 +- .../java/client/gui/container/GuiBrewing.java | 29 ++-- .../java/client/gui/container/GuiChest.java | 20 +-- .../client/gui/container/GuiContainer.java | 13 +- .../client/gui/container/GuiCrafting.java | 4 +- .../client/gui/container/GuiDispenser.java | 16 +- .../java/client/gui/container/GuiEnchant.java | 24 +-- .../java/client/gui/container/GuiEntity.java | 12 +- .../java/client/gui/container/GuiFurnace.java | 36 ++-- .../java/client/gui/container/GuiHopper.java | 16 +- .../client/gui/container/GuiMerchant.java | 6 +- .../java/client/gui/container/GuiRepair.java | 6 +- .../main/java/client/init/RenderRegistry.java | 5 +- .../java/client/network/ClientPlayer.java | 2 + .../client/renderer/entity/RenderMissile.java | 15 ++ .../java/client/util/PlayerController.java | 19 +++ client/src/main/resources/sounds/blast.ogg | Bin 11694 -> 0 bytes .../src/main/resources/sounds/blast_far.ogg | Bin 15534 -> 0 bytes .../src/main/resources/sounds/large_blast.ogg | Bin 18137 -> 0 bytes .../main/resources/sounds/large_blast_far.ogg | Bin 22782 -> 0 bytes client/src/main/resources/sounds/launch.ogg | Bin 16449 -> 0 bytes client/src/main/resources/sounds/twinkle.ogg | Bin 15098 -> 0 bytes .../src/main/resources/sounds/twinkle_far.ogg | Bin 24969 -> 0 bytes .../resources/textures/entity/missile.png | Bin 0 -> 5300 bytes .../resources/textures/items/fireworks.png | Bin 192 -> 0 bytes .../main/resources/textures/items/rocket.png | Bin 0 -> 4777 bytes .../textures/items/rocket_launcher.png | Bin 0 -> 5647 bytes .../java/common/block/tech/BlockCauldron.java | 2 +- .../common/entity/item/EntityFireworks.java | 155 ------------------ .../java/common/entity/npc/EntityNPC.java | 17 +- .../entity/projectile/EntityBullet.java | 69 ++++---- .../entity/projectile/EntityMissile.java | 79 +++++++++ .../main/java/common/init/EntityRegistry.java | 4 +- .../main/java/common/init/ItemRegistry.java | 5 +- common/src/main/java/common/init/Items.java | 5 +- .../src/main/java/common/init/SoundEvent.java | 7 - .../main/java/common/inventory/Container.java | 11 +- .../inventory/ContainerBrewingStand.java | 9 +- .../inventory/ContainerEnchantment.java | 33 ++-- .../common/inventory/ContainerFurnace.java | 15 +- .../common/inventory/ContainerMerchant.java | 3 +- .../common/inventory/ContainerRepair.java | 5 +- .../java/common/inventory/ContainerTile.java | 17 +- .../inventory/ICfarsfadtfdwgfdgdvgs.java | 5 + .../main/java/common/inventory/ICrafting.java | 13 -- common/src/main/java/common/item/Item.java | 4 + .../java/common/item/tool/ItemBoltgun.java | 3 +- .../java/common/item/tool/ItemFirework.java | 48 ------ .../java/common/item/tool/ItemGunBase.java | 49 +++--- .../common/item/tool/ItemLauncherBase.java | 32 ++++ .../common/item/tool/ItemRocketLauncher.java | 33 ++++ .../src/main/java/common/network/IPlayer.java | 6 +- server/src/main/java/server/Server.java | 2 +- .../src/main/java/server/network/Player.java | 65 +++----- 54 files changed, 452 insertions(+), 478 deletions(-) create mode 100644 client/src/main/java/client/renderer/entity/RenderMissile.java delete mode 100644 client/src/main/resources/sounds/blast.ogg delete mode 100644 client/src/main/resources/sounds/blast_far.ogg delete mode 100644 client/src/main/resources/sounds/large_blast.ogg delete mode 100644 client/src/main/resources/sounds/large_blast_far.ogg delete mode 100644 client/src/main/resources/sounds/launch.ogg delete mode 100644 client/src/main/resources/sounds/twinkle.ogg delete mode 100644 client/src/main/resources/sounds/twinkle_far.ogg create mode 100755 client/src/main/resources/textures/entity/missile.png delete mode 100755 client/src/main/resources/textures/items/fireworks.png create mode 100755 client/src/main/resources/textures/items/rocket.png create mode 100755 client/src/main/resources/textures/items/rocket_launcher.png delete mode 100755 common/src/main/java/common/entity/item/EntityFireworks.java create mode 100755 common/src/main/java/common/entity/projectile/EntityMissile.java create mode 100755 common/src/main/java/common/inventory/ICfarsfadtfdwgfdgdvgs.java delete mode 100755 common/src/main/java/common/inventory/ICrafting.java delete mode 100755 common/src/main/java/common/item/tool/ItemFirework.java create mode 100644 common/src/main/java/common/item/tool/ItemLauncherBase.java create mode 100755 common/src/main/java/common/item/tool/ItemRocketLauncher.java diff --git a/client/src/main/java/client/Client.java b/client/src/main/java/client/Client.java index 293b85ba..f8af0e09 100755 --- a/client/src/main/java/client/Client.java +++ b/client/src/main/java/client/Client.java @@ -770,6 +770,8 @@ public class Client implements IThreadListener { if (this.keyBindsHotbar[l].isPressed()) { // if(!this.showDebugProfilerChart) { + if(this.player.inventory.currentItem != l) + this.controller.resetUseCooldown(); this.player.inventory.currentItem = l; // } } @@ -1127,7 +1129,7 @@ public class Client implements IThreadListener { ItemStack itemstack = this.player.inventory.mainInventory[index]; if(itemstack != null) { GuiContainer.renderItemOverlay(itemstack, - this.fb_x / 2 - 180 + 4 + 1 + index * 40, this.fb_y - 40 + 1, null); + this.fb_x / 2 - 180 + 4 + 1 + index * 40, this.fb_y - 40 + 1, null, index == this.player.inventory.currentItem ? this.controller.getUseCooldown() : 0, this.controller.getUseCooldownMax()); } } } @@ -1270,8 +1272,10 @@ public class Client implements IThreadListener { // } if(this.zooming) this.zoomLevel = ExtMath.clampf(this.zoomLevel + (dir < 0 ? -0.25f : 0.25f), 2.0f, 16.0f); - else if(this.player != null) + else if(this.player != null) { this.player.inventory.changeCurrentItem(dir); + this.controller.resetUseCooldown(); + } } // public void resize(int width, int height) @@ -1558,7 +1562,8 @@ public class Client implements IThreadListener { InventoryPlayer inventoryplayer = this.player.inventory; - inventoryplayer.setCurrentItem(item); + if(inventoryplayer.setCurrentItem(item)) + this.controller.resetUseCooldown(); if(this.itemCheat) { this.player.client.addToSendQueue(new CPacketCheat(item, -2 - inventoryplayer.currentItem, this.ctrl())); } diff --git a/client/src/main/java/client/gui/container/GuiBrewing.java b/client/src/main/java/client/gui/container/GuiBrewing.java index a0c47c48..4dd3dfee 100755 --- a/client/src/main/java/client/gui/container/GuiBrewing.java +++ b/client/src/main/java/client/gui/container/GuiBrewing.java @@ -5,30 +5,27 @@ import common.inventory.IInventory; import common.inventory.InventoryPlayer; public class GuiBrewing extends GuiContainer { - private final InventoryPlayer playerInventory; - private final IInventory tileBrewingStand; + private final InventoryPlayer playerInv; + private final IInventory brewer; - public GuiBrewing(InventoryPlayer player, IInventory inc) { - super(new ContainerBrewingStand(player, inc)); - this.playerInventory = player; - this.tileBrewingStand = inc; + public GuiBrewing(InventoryPlayer player, IInventory brewer) { + super(new ContainerBrewingStand(player, brewer)); + this.playerInv = player; + this.brewer = brewer; } public void draw() { super.draw(); - int k = this.tileBrewingStand.getField(0); - - if(k > 0) { - int l = (int)(28.0F * (1.0F - (float)k / 400.0F)); - - if(l > 0) { - this.rect(97, 16, 9, l, 0xffff20); - } + int progress = this.brewer.getField(0); + if(progress > 0) { + int value = (int)(28.0F * (1.0F - (float)progress / 400.0F)); + if(value > 0) + this.rect(97, 16, 9, value, 0xffff20); } } public void addElements() { - this.label(this.tileBrewingStand.getCommandName(), 8, 6); - this.label(this.playerInventory.getCommandName(), 8, this.ySize - 96 + 2); + this.label(this.brewer.getCommandName(), 8, 6); + this.label(this.playerInv.getCommandName(), 8, this.ySize - 96 + 2); } } diff --git a/client/src/main/java/client/gui/container/GuiChest.java b/client/src/main/java/client/gui/container/GuiChest.java index dbc9d495..fcd57c3e 100755 --- a/client/src/main/java/client/gui/container/GuiChest.java +++ b/client/src/main/java/client/gui/container/GuiChest.java @@ -5,22 +5,20 @@ import common.inventory.ContainerChest; import common.inventory.IInventory; public class GuiChest extends GuiContainer { - private final IInventory upperChestInventory; - private final IInventory lowerChestInventory; - private final int inventoryRows; + private final IInventory upper; + private final IInventory lower; - public GuiChest(IInventory upperInv, IInventory lowerInv) { - super(new ContainerChest(upperInv, lowerInv, Client.CLIENT.player)); - this.upperChestInventory = upperInv; - this.lowerChestInventory = lowerInv; + public GuiChest(IInventory upper, IInventory lower) { + super(new ContainerChest(upper, lower, Client.CLIENT.player)); + this.upper = upper; + this.lower = lower; int i = 222; int j = i - 108; - this.inventoryRows = lowerInv.getSizeInventory() / 9; - this.ySize = j + this.inventoryRows * 18; + this.ySize = j + (lower.getSizeInventory() / 9) * 18; } public void addElements() { - this.label(this.lowerChestInventory.getCommandName(), 8, 6); - this.label(this.upperChestInventory.getCommandName(), 8, this.ySize - 96 + 2); + this.label(this.lower.getCommandName(), 8, 6); + this.label(this.upper.getCommandName(), 8, this.ySize - 96 + 2); } } diff --git a/client/src/main/java/client/gui/container/GuiContainer.java b/client/src/main/java/client/gui/container/GuiContainer.java index 5a641f61..c9975a92 100755 --- a/client/src/main/java/client/gui/container/GuiContainer.java +++ b/client/src/main/java/client/gui/container/GuiContainer.java @@ -858,10 +858,10 @@ public abstract class GuiContainer extends Gui public void renderItemOverlayIntoGUI(ItemStack stack, int xPosition, int yPosition, String text) { - renderItemOverlay(stack, this.container_x + xPosition * 2, this.container_y + yPosition * 2, text); + renderItemOverlay(stack, this.container_x + xPosition * 2, this.container_y + yPosition * 2, text, 0, 0); } - public static void renderItemOverlay(ItemStack stack, int xPosition, int yPosition, String text) + public static void renderItemOverlay(ItemStack stack, int xPosition, int yPosition, String text, int bar2, int bar2max) { if (stack != null) { @@ -884,6 +884,15 @@ public abstract class GuiContainer extends Gui draw(xPosition + 2, yPosition + 26, 26, 2, (255 - i) / 4, 64, 0); draw(xPosition + 2, yPosition + 26, j, 2, 255 - i, i, 0); } + + if (bar2 > 0) + { + int j = (int)Math.round(28.0D - (double)bar2 * 28.0D / (double)bar2max); + int i = (int)Math.round(255.0D - (double)bar2 * 255.0D / (double)bar2max); + draw(xPosition + 2, yPosition + 4, 28, 4, 0, 0, 0); + draw(xPosition + 2, yPosition + 4, 26, 2, (255 - i) / 8, (255 - i) / 16, i / 4); + draw(xPosition + 2 + 28 - j, yPosition + 4, j, 2, (255 - i) / 2, (255 - i) / 4, i); + } } } diff --git a/client/src/main/java/client/gui/container/GuiCrafting.java b/client/src/main/java/client/gui/container/GuiCrafting.java index 3876cd86..7deee648 100755 --- a/client/src/main/java/client/gui/container/GuiCrafting.java +++ b/client/src/main/java/client/gui/container/GuiCrafting.java @@ -9,8 +9,8 @@ import common.world.World; public class GuiCrafting extends GuiContainer { private final BlockWorkbench type; - public GuiCrafting(InventoryPlayer playerInv, World world, BlockWorkbench type) { - super(new ContainerWorkbench(playerInv, world, BlockPos.ORIGIN, type)); + public GuiCrafting(InventoryPlayer inv, World world, BlockWorkbench type) { + super(new ContainerWorkbench(inv, world, BlockPos.ORIGIN, type)); this.type = type; this.ySize = 112 + 18 * this.type.getSize(); } diff --git a/client/src/main/java/client/gui/container/GuiDispenser.java b/client/src/main/java/client/gui/container/GuiDispenser.java index d82248d5..2d9735a6 100755 --- a/client/src/main/java/client/gui/container/GuiDispenser.java +++ b/client/src/main/java/client/gui/container/GuiDispenser.java @@ -5,17 +5,17 @@ import common.inventory.IInventory; import common.inventory.InventoryPlayer; public class GuiDispenser extends GuiContainer { - private final InventoryPlayer playerInventory; - private final IInventory dispenserInventory; + private final InventoryPlayer playerInv; + private final IInventory dispenser; - public GuiDispenser(InventoryPlayer playerInv, IInventory dispenserInv) { - super(new ContainerDispenser(playerInv, dispenserInv)); - this.playerInventory = playerInv; - this.dispenserInventory = dispenserInv; + public GuiDispenser(InventoryPlayer playerInv, IInventory dispenser) { + super(new ContainerDispenser(playerInv, dispenser)); + this.playerInv = playerInv; + this.dispenser = dispenser; } public void addElements() { - this.label(this.dispenserInventory.getCommandName(), 8, 6); - this.label(this.playerInventory.getCommandName(), 8, this.ySize - 96 + 2); + this.label(this.dispenser.getCommandName(), 8, 6); + this.label(this.playerInv.getCommandName(), 8, this.ySize - 96 + 2); } } diff --git a/client/src/main/java/client/gui/container/GuiEnchant.java b/client/src/main/java/client/gui/container/GuiEnchant.java index fbe7f018..6cfb79d4 100755 --- a/client/src/main/java/client/gui/container/GuiEnchant.java +++ b/client/src/main/java/client/gui/container/GuiEnchant.java @@ -17,10 +17,10 @@ public class GuiEnchant extends GuiContainer implements ButtonCallback { "the elder scrolls klaatu berata niktu xyzzy bless curse light darkness fire air earth water hot dry cold wet ignite snuff embiggen twist shorten stretch fiddle destroy imbue galvanize enchant free limited range of towards inside sphere cube self other ball mental physical grow shrink demon elemental spirit animal creature beast humanoid undead fresh stale " .split(" "); - private final InventoryPlayer playerInventory; + private final InventoryPlayer playerInv; private final Random nameRand = new Random(); private final Random random = new Random(); - private final ContainerEnchantment container; + private final ContainerEnchantment enchantment; private final String title; private final ActButton[] buttons = new ActButton[3]; private final Label[] labels = new Label[3]; @@ -28,18 +28,18 @@ public class GuiEnchant extends GuiContainer implements ButtonCallback { public GuiEnchant(InventoryPlayer inv, World world, String title) { super(new ContainerEnchantment(inv, world)); - this.playerInventory = inv; - this.container = (ContainerEnchantment)this.inventorySlots; + this.playerInv = inv; + this.enchantment = (ContainerEnchantment)this.inventorySlots; this.title = title; } public void updateScreen() { super.updateScreen(); - this.nameRand.setSeed((long)this.container.seed); + this.nameRand.setSeed((long)this.enchantment.seed); for(int l = 0; l < 3; ++l) { String name = this.getRandomName(); - int mana = this.container.mana[l]; + int mana = this.enchantment.mana[l]; if(mana == 0) { this.buttons[l].enabled = false; @@ -63,7 +63,7 @@ public class GuiEnchant extends GuiContainer implements ButtonCallback { public void addElements() { this.label(this.title, 12, 5); - this.label(this.playerInventory.getCommandName(), 8, this.ySize - 96 + 2); + this.label(this.playerInv.getCommandName(), 8, this.ySize - 96 + 2); for(int l = 0; l < 3; ++l) { int i1 = 60; int j1 = i1 + 2; @@ -74,8 +74,8 @@ public class GuiEnchant extends GuiContainer implements ButtonCallback { public void use(ActButton btn, PressType type) { for(int k = 0; k < 3; ++k) { - if(btn == this.buttons[k] && this.container.enchantItem(this.gm.player, k)) - this.gm.controller.sendEnchantPacket(this.container.windowId, k); + if(btn == this.buttons[k] && this.enchantment.enchantItem(this.gm.player, k)) + this.gm.controller.sendEnchantPacket(this.enchantment.windowId, k); } } @@ -90,8 +90,8 @@ public class GuiEnchant extends GuiContainer implements ButtonCallback { super.drawScreen(mouseX, mouseY); for(int j = 0; j < 3; ++j) { - int k = this.container.mana[j]; - Pair l = this.container.ench[j]; + int k = this.enchantment.mana[j]; + Pair l = this.enchantment.ench[j]; int i1 = j + 1; if(this.isPointInRegion(60, 14 + 19 * j, 108, 17, mouseX, mouseY) && k > 0 && l != null) { @@ -101,7 +101,7 @@ public class GuiEnchant extends GuiContainer implements ButtonCallback { sb.append(TextColor.WHITE + s + " . . . ?"); if(this.gm.player.getManaPoints() < k) { - sb.append((sb.length() != 0 ? "\n" : "") + TextColor.RED + String.format("%d Mana erforderlich", this.container.mana[j])); + sb.append((sb.length() != 0 ? "\n" : "") + TextColor.RED + String.format("%d Mana erforderlich", this.enchantment.mana[j])); } else { String s1 = ""; diff --git a/client/src/main/java/client/gui/container/GuiEntity.java b/client/src/main/java/client/gui/container/GuiEntity.java index 56a7bba8..8697f99a 100755 --- a/client/src/main/java/client/gui/container/GuiEntity.java +++ b/client/src/main/java/client/gui/container/GuiEntity.java @@ -6,17 +6,17 @@ import common.inventory.ContainerEntityInventory; import common.inventory.IInventory; public class GuiEntity extends GuiContainer { - private final IInventory playerInventory; - private final IInventory entityInventory; + private final IInventory playerInv; + private final IInventory entity; public GuiEntity(IInventory playerInv, IInventory entityInv, Entity entity) { super(new ContainerEntityInventory(playerInv, entityInv, entity, Client.CLIENT.player)); - this.playerInventory = playerInv; - this.entityInventory = entityInv; + this.playerInv = playerInv; + this.entity = entityInv; } public void addElements() { - this.label(this.entityInventory.getCommandName(), 8, 6); - this.label(this.playerInventory.getCommandName(), 8, this.ySize - 96 + 2); + this.label(this.entity.getCommandName(), 8, 6); + this.label(this.playerInv.getCommandName(), 8, this.ySize - 96 + 2); } } diff --git a/client/src/main/java/client/gui/container/GuiFurnace.java b/client/src/main/java/client/gui/container/GuiFurnace.java index e8c6b678..0ef44160 100755 --- a/client/src/main/java/client/gui/container/GuiFurnace.java +++ b/client/src/main/java/client/gui/container/GuiFurnace.java @@ -6,43 +6,43 @@ import common.inventory.InventoryPlayer; import common.tileentity.TileEntityFurnace; public class GuiFurnace extends GuiContainer { - private final InventoryPlayer playerInventory; - private final IInventory tileFurnace; + private final InventoryPlayer playerInv; + private final IInventory furnace; public GuiFurnace(InventoryPlayer playerInv, IInventory furnaceInv) { super(new ContainerFurnace(playerInv, furnaceInv)); - this.playerInventory = playerInv; - this.tileFurnace = furnaceInv; + this.playerInv = playerInv; + this.furnace = furnaceInv; } public void draw() { super.draw(); this.rect(58, 36, 12, 14, 0x202020); - if(TileEntityFurnace.isBurning(this.tileFurnace)) { - int k = this.getBurnLeftScaled(13); - k = Math.min(k, 13); - this.rect(58, 36 + 13 - k, 12, k + 1, 0xff7f00); + if(TileEntityFurnace.isBurning(this.furnace)) { + int burn = this.getBurnLeftScaled(13); + burn = Math.min(burn, 13); + this.rect(58, 36 + 13 - burn, 12, burn + 1, 0xff7f00); } - int l = this.getCookProgressScaled(24); + int progress = this.getCookProgressScaled(24); this.rect(79, 39, 24, 8, 0x606060); - if(l > 0) - this.rect(79, 39, l + 1, 8, 0xffaf00); + if(progress > 0) + this.rect(79, 39, progress + 1, 8, 0xffaf00); } public void addElements() { - this.label(this.tileFurnace.getCommandName(), 8, 6); - this.label(this.playerInventory.getCommandName(), 8, this.ySize - 96 + 2); + this.label(this.furnace.getCommandName(), 8, 6); + this.label(this.playerInv.getCommandName(), 8, this.ySize - 96 + 2); } private int getCookProgressScaled(int pixels) { - int i = this.tileFurnace.getField(2); - int j = this.tileFurnace.getField(3); - return j != 0 && i != 0 ? i * pixels / j : 0; + int progress = this.furnace.getField(2); + int total = this.furnace.getField(3); + return total != 0 && progress != 0 ? progress * pixels / total : 0; } private int getBurnLeftScaled(int pixels) { - int i = this.tileFurnace.getField(1); - return this.tileFurnace.getField(0) * pixels / (i == 0 ? 200 : i); + int total = this.furnace.getField(1); + return this.furnace.getField(0) * pixels / (total == 0 ? 200 : total); } } diff --git a/client/src/main/java/client/gui/container/GuiHopper.java b/client/src/main/java/client/gui/container/GuiHopper.java index 203bd7ac..7faf467b 100755 --- a/client/src/main/java/client/gui/container/GuiHopper.java +++ b/client/src/main/java/client/gui/container/GuiHopper.java @@ -6,18 +6,18 @@ import common.inventory.IInventory; import common.inventory.InventoryPlayer; public class GuiHopper extends GuiContainer { - private final IInventory playerInventory; - private final IInventory hopperInventory; + private final IInventory playerInv; + private final IInventory hopper; - public GuiHopper(InventoryPlayer playerInv, IInventory hopperInv) { - super(new ContainerHopper(playerInv, hopperInv, Client.CLIENT.player)); - this.playerInventory = playerInv; - this.hopperInventory = hopperInv; + public GuiHopper(InventoryPlayer playerInv, IInventory hopper) { + super(new ContainerHopper(playerInv, hopper, Client.CLIENT.player)); + this.playerInv = playerInv; + this.hopper = hopper; this.ySize = 133; } public void addElements() { - this.label(this.hopperInventory.getCommandName(), 8, 6); - this.label(this.playerInventory.getCommandName(), 8, this.ySize - 96 + 2); + this.label(this.hopper.getCommandName(), 8, 6); + this.label(this.playerInv.getCommandName(), 8, this.ySize - 96 + 2); } } diff --git a/client/src/main/java/client/gui/container/GuiMerchant.java b/client/src/main/java/client/gui/container/GuiMerchant.java index 44d2989a..b42270ec 100755 --- a/client/src/main/java/client/gui/container/GuiMerchant.java +++ b/client/src/main/java/client/gui/container/GuiMerchant.java @@ -16,7 +16,7 @@ import common.village.MerchantRecipeList; import common.world.World; public class GuiMerchant extends GuiContainer implements ButtonCallback { - private final String merchantName; + private final String title; private int recipe; private ActButton prevBtn; @@ -24,7 +24,7 @@ public class GuiMerchant extends GuiContainer implements ButtonCallback { public GuiMerchant(InventoryPlayer inv, String name, World world) { super(new ContainerMerchant(inv, null, world)); - this.merchantName = name != null ? name : "NSC"; + this.title = name != null ? name : "NSC"; } public void addButtons() { @@ -39,7 +39,7 @@ public class GuiMerchant extends GuiContainer implements ButtonCallback { } public void addElements() { - this.label(this.merchantName, 8, 6); + this.label(this.title, 8, 6); this.label("Inventar", 8, this.ySize - 96 + 2); } diff --git a/client/src/main/java/client/gui/container/GuiRepair.java b/client/src/main/java/client/gui/container/GuiRepair.java index 7349f17c..ce8bf126 100755 --- a/client/src/main/java/client/gui/container/GuiRepair.java +++ b/client/src/main/java/client/gui/container/GuiRepair.java @@ -9,11 +9,11 @@ import common.world.World; public class GuiRepair extends GuiContainer { private ContainerRepair anvil; private Label info; - private InventoryPlayer playerInventory; + private InventoryPlayer playerInv; public GuiRepair(InventoryPlayer inv, World world) { super(new ContainerRepair(inv, world)); - this.playerInventory = inv; + this.playerInv = inv; this.anvil = (ContainerRepair)this.inventorySlots; } @@ -23,7 +23,7 @@ public class GuiRepair extends GuiContainer { this.info.setText(TextColor.DRED + "Zu teuer!"); else if(this.anvil.maximumCost <= 0 || !this.anvil.getSlot(2).getHasStack()) this.info.setText(""); - else if(!this.anvil.getSlot(2).canTakeStack(this.playerInventory.player)) + else if(!this.anvil.getSlot(2).canTakeStack(this.playerInv.player)) this.info.setText(TextColor.RED + "Manakosten: " + this.anvil.maximumCost); else this.info.setText(TextColor.GREEN + "Manakosten: " + this.anvil.maximumCost); diff --git a/client/src/main/java/client/init/RenderRegistry.java b/client/src/main/java/client/init/RenderRegistry.java index 39f62d2a..a862a28c 100644 --- a/client/src/main/java/client/init/RenderRegistry.java +++ b/client/src/main/java/client/init/RenderRegistry.java @@ -30,6 +30,7 @@ import client.renderer.entity.RenderLeashKnot; import client.renderer.entity.RenderLightning; import client.renderer.entity.RenderManager; import client.renderer.entity.RenderMinecart; +import client.renderer.entity.RenderMissile; import client.renderer.entity.RenderMooshroom; import client.renderer.entity.RenderMouse; import client.renderer.entity.RenderNpc; @@ -85,7 +86,6 @@ import common.entity.item.EntityBoat; import common.entity.item.EntityCart; import common.entity.item.EntityCrystal; import common.entity.item.EntityFalling; -import common.entity.item.EntityFireworks; import common.entity.item.EntityItem; import common.entity.item.EntityLeashKnot; import common.entity.item.EntityNuke; @@ -104,6 +104,7 @@ import common.entity.projectile.EntityEgg; import common.entity.projectile.EntityFireCharge; import common.entity.projectile.EntityFireball; import common.entity.projectile.EntityHook; +import common.entity.projectile.EntityMissile; import common.entity.projectile.EntityPotion; import common.entity.projectile.EntitySnowball; import common.init.Blocks; @@ -136,7 +137,6 @@ public abstract class RenderRegistry { map.put(EntityEgg.class, new RenderItemEntity(mgr, Items.egg, ritem)); map.put(EntityPotion.class, new RenderPotion(mgr, ritem)); map.put(EntityXpBottle.class, new RenderItemEntity(mgr, Items.experience_bottle, ritem)); - map.put(EntityFireworks.class, new RenderItemEntity(mgr, Items.fireworks, ritem)); map.put(EntityFireball.class, new RenderFireball(mgr, 0.75F)); map.put(EntityFireCharge.class, new RenderFireball(mgr, 0.5F)); map.put(EntityBox.class, new RenderFlyingBox(mgr)); @@ -154,6 +154,7 @@ public abstract class RenderRegistry { map.put(EntityMouse.class, new RenderMouse(mgr, new ModelMouse())); map.put(EntityDie.class, new RenderDie(mgr)); map.put(EntityBullet.class, new RenderBullet(mgr)); + map.put(EntityMissile.class, new RenderMissile(mgr)); map.put(EntityLightning.class, new RenderLightning(mgr)); models.put(ModelType.HUMANOID, new RenderHumanoid(mgr, 12, 12, "textures/entity/char.png")); models.put(ModelType.ARACHNOID, new RenderArachnoid(mgr)); diff --git a/client/src/main/java/client/network/ClientPlayer.java b/client/src/main/java/client/network/ClientPlayer.java index 8f898692..8fc2ca6b 100755 --- a/client/src/main/java/client/network/ClientPlayer.java +++ b/client/src/main/java/client/network/ClientPlayer.java @@ -576,6 +576,8 @@ public class ClientPlayer implements IClientPlayer if (packetIn.getHeldItemHotbarIndex() >= 0 && packetIn.getHeldItemHotbarIndex() < InventoryPlayer.getHotbarSize()) { + if(this.gm.player.inventory.currentItem != packetIn.getHeldItemHotbarIndex()) + this.gm.controller.resetUseCooldown(); this.gm.player.inventory.currentItem = packetIn.getHeldItemHotbarIndex(); } } diff --git a/client/src/main/java/client/renderer/entity/RenderMissile.java b/client/src/main/java/client/renderer/entity/RenderMissile.java new file mode 100644 index 00000000..89dfeb04 --- /dev/null +++ b/client/src/main/java/client/renderer/entity/RenderMissile.java @@ -0,0 +1,15 @@ +package client.renderer.entity; + +import common.entity.projectile.EntityBullet; + +public class RenderMissile extends RenderBullet { + private static final String MISSILE_TEXTURE = "textures/entity/missile.png"; + + public RenderMissile(RenderManager renderManagerIn) { + super(renderManagerIn); + } + + protected String getEntityTexture(EntityBullet entity) { + return MISSILE_TEXTURE; + } +} diff --git a/client/src/main/java/client/util/PlayerController.java b/client/src/main/java/client/util/PlayerController.java index 4ecb1725..758773db 100755 --- a/client/src/main/java/client/util/PlayerController.java +++ b/client/src/main/java/client/util/PlayerController.java @@ -35,6 +35,8 @@ public class PlayerController { private boolean hitting; private int lastSelected; private boolean interacting; + private int itemUseCooldown; + private int itemUseCooldownMax; public PlayerController(Client gm, ClientPlayer handler) { this.gm = gm; @@ -174,6 +176,8 @@ public class PlayerController { public void update() { this.syncItem(); + if(this.itemUseCooldown > 0) + --this.itemUseCooldown; if(this.handler.getConnection().isChannelOpen()) { this.handler.getConnection().processReceivedPackets(); @@ -254,8 +258,11 @@ public class PlayerController { public boolean sendUseItem(EntityNPC player, World world, ItemStack stack) { this.syncItem(); + if(this.itemUseCooldown > 0) + return false; this.handler.addToSendQueue(new CPacketPlace(player.inventory.getCurrentItem())); int size = stack.getSize(); + this.itemUseCooldown = this.itemUseCooldownMax = stack.getItem().getUseCooldown(stack, world, player); ItemStack changed = stack.getItem().onItemRightClick(stack, world, player); if(changed != stack || changed != null && changed.getSize() != size) { @@ -310,4 +317,16 @@ public class PlayerController { public boolean isHittingBlock() { return this.hitting; } + + public int getUseCooldown() { + return this.itemUseCooldown; + } + + public int getUseCooldownMax() { + return this.itemUseCooldownMax; + } + + public void resetUseCooldown() { + this.itemUseCooldown = 0; + } } diff --git a/client/src/main/resources/sounds/blast.ogg b/client/src/main/resources/sounds/blast.ogg deleted file mode 100644 index 574a89a731f5788bc6298659b6b6e9e5fa74312e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11694 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 SrQdEU%J~UHb&6>b@c#gAmRVf@ diff --git a/client/src/main/resources/sounds/blast_far.ogg b/client/src/main/resources/sounds/blast_far.ogg deleted file mode 100644 index 9bd770903aef99fc03da1e5c650880f76c4b0b24..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15534 zcmajGWmp`+5-2*j6FkUb!QEYgyTjt{PH-nU1Pks2hd^-m;10oEf&`ZkJOp@4a?ZK; z{(AlO&eoK5b#+xw&3?VgR#xf&H1MA`<(B&K1$4?bcm+iQ<>BOFYUBEXfC_AX`2v7I zUZ}s{El|oYlK*Qjk}s4mPEM8RBG3O<3xfHl1`R@0F!8YD;$vp#VP<1xePJhsd@LNz zoXjm;gdjvS2$AD2k<8x4^q(9Q+`sQPV&a-mfCvCky5iGI6}#evVi1a{5bS`&ChblL z#1t@tLF@{8V^ps3bw?O#CF+IuZwyLNnfMTR(P8{hDN%?8@O&*e zp<|+-2}9}m5J^MHIL&c^cmT*Npp7b^MaCekLk5Nc07FC-XUG{ek^ma11)(6K>A*qO z0YHTC$wU>&#O=x?QtBj9{q1`n${EM%{&x1i;xYiBqKYc%jDzr3&Kv*`^LV3*wWEry zqxK`?5JST&pn*UDfQ1ahDXuOkohy;KW=zv2)dV$9fBmcd7|!Vtj! zT?dF6ftXRO{ek~=av;7OdI3@;-)8nso(_7ZTrD4QwoIdUVpdcu-+s31x-(tm!pA0P&W3^A^ znG~ieA^V}|?ExziVMw;v(e#0JQ8GUwRf@Bk9L+z6Ljxj+{nBF;9AhOJLB8W3~A8RwX1AYlcOt6 zRzv>lKQf5##o!6d<5gcYn?}-=X1gHMfBxrAvX`X+0OenxX-wk((=R~ZFsW3rAf0KJ zooiNI66|iVnCh<6?60>JW^n7j4(WI9CfcbMI{#1qH+4volR<+0-$dvJ@mK%LtFtm&YY z>Y&%;zM5vSdh5UWe{}@Fr5q zCQ{iXT6w2_&d5B>_(Wg+mj%FhVR>m$C0@=C(k_(JYLt>{5a6$O15sbR3+iK|lyqSno8kO7$7yUKh(op9{%sonSpWb) z9jU+s*A_O2nJ}CK9@wiYTH~|vm@2-aHghiINxS6s#ggHyrF^A_M#cOy6Ox~9SMB3Ng^e{~_uXu-et zb9tNNXjRphx{8N7=7+Y^<7C-cg%^Y7B~-zRT8$3s?hbm`l8du!sMqn}I=^yMeZ)-fh^dySqV(#io{p&aH*P(1QEs zt-@@R;^MsfEZBW>!Tm>u!|EMG%pIH>W(46|4BPT{Tz~yZ73{vAY+wWtd+lh%v(n`# zSnXi8DqL4hfhyfq!)UO|-PWa;?!JCNB)-KH&N2Kr7I~goRfi0^6_verUG1f@ma82xKdu3yoLn#}6Inqa$!t6Qe5& zQ&Wq^4~gfargBx1qs=c?k(194T@a(I4O7##ubj`+jphoS(WNbJRFR7=D<;&lGhX!gq~(8JyP)jMu*_(w2Jy_QDjNyK>HZBq zk7rid`7$`wV4_^?%iyuCknK>Z_D7~}MeD$lokQz&rt4H$qprF_>x)&ba5}DMogq_@ znGdMQ#Z)%x>c#Ly{Aci}Mu;lA+8YP~qDo$ls|nvOj_W2<_X~tzXIs0M>3Yt#x1?^z z)r@Zk8ABJMYHz^|QvAT6L$(L%S&^@jZ3B#*&!-wa+L#wW{{X#(5RL=DY7XU6ZcegwP#Xs7md;uIta2VltZT zb}i&5q`=gV;oBz({n>+H0sx*NFn~mGEJp=p4sIO$>zCOgA^~I=rjP~BhU6h++7NCK zU!$mC(>5JbexL_@4WC8eJVN{Z48a|->Ga#e$=p_N*u5!L!6a%JuwTc4gVE^@PhP$g1N zIJ2o#0LJ6yfR66eDG{c~RD^I38=EFfV9J{*-0Dvv-bI{SJ% zc`w<)yyB*(-1c$)cC+g9dWq9j_01*Z&2IUQy77FEU@FfW-V=0=q<6{*y!Tp%D-O#3 z2uu2f`kNBTHysuidoXtg zlIPyRM?mL;VdrmNxIi{5G$Q2n();AWQ#@Z|X{WM`$`cSQ*iFOo4-_;QN^q`!UWfQ@ zk|k(SGK7O%OwUF4QoCF<<-;YkTi>GaE6}*)tuJzEbw_5r=Z}a&;`9mPG2_ z+Sb_0((?GRV@6tmwp*~mDFjswz4P0#;s}z9U0H|Zo!@2{Db8ggp@3U{q%Yot^=GH6 z6?5|TvGRjm35NU{zMnI<@5_xEhmM|JnE}AYp@b>|rm;5K&xQ%i!e){~0*P-iba?72 zo!)c5!7Jmj7iTT!39&mfo&$x<%g7wJh8p{JZc1uV$5tTH9^-@EDrGBeq4x$~_J+1+ zpW?|gDH2~hQt;f)>+BtMzH1Ssv*joExPe|+#b$u{wysHO=F(!=QwnvFFLdzrraI_eO0ptCvCC$RlW0}fW8d=6cR#h=3`;95%TqCGauw2XVgPtTf}4~! z#>s@k(;KqsaV*7izoBl|=Ijal;GJ=~@9Nt{?C^ZCC>3)tRefaaY0#U@S!yeJMF1^z zyT#KgxjQ*Pok9mURd?j;2m4yi2Inf%kavzM>_K}eNFet?0@s-uFUr|xyfX-K(l}dk zoK-@y@Hh4d$`GyM1m2kb6N=5ww319A+QkftpPwFfeAoewV~2ZMcjG9f>9Qg9eOVT{ z!X%Vt{p=OWT7k%#+Xy*8LI~GYk}cZTZ`%Gw=}<@R>XV5sH}AE`z+++mU8&J`&_l(< z!qVNv=x4pIUhDfoCJuXI2PdJ@3R@gj+A-0(V4=5*Cns_ot+7`Y+%v~=qi#216cyzA zW33N&^n@MxhCF7nJ_|cYrrYD*c&M5jk6ivrwVyu5^vDegp{`u%Y9u(t%3gQdWaEDr zs1UJFJCh{1D~Q_ts2Zb4eeymCrXHq5<*T}eIvR=_2X@=N4$OORF%lxkn<9x1oHJ4n zS!G49!6>%kWFgWjwlwrqy#O{`KFsIolgDI>_eJLzLeIv!3TmGW2|!nLIuA{xpP@dH zz7Hdh9fEWJ)k%@@;hsaYP=UR9w*R%^N>BDJ5zj2^KIgqQ{N)2fh+)hag4Ax>EOlks zt5RWVrjyrK%1R{-1?W$#k@&rdCS8+y3G#JY{v@;h;y1cQ!g^M7JswqkP`_gR zdz&V8^pval1GK2w{jdQ;TewS|J;}W5zRc{ty$V4P@v6@GQAS20EPBl%ldJcG^-eYZ z?>{|GvH0$8&b-7@_}B6W&f$jq-km#LKgi62H>-#X3g`~D5^y6aXj033TNp43r9G?v5ltiNb!?=nvmNqg5zPe4kl$j58#cHhu+L$zHJzd; za;cU(39ffMJz-jomFM`+b46-X>?vOd)hw^`fT!nM8eC596*DciWNDvENAIp6u^6*g zNJE54CTGuQ6-1SYdT^e^qb)3YS2;0%7#ECt$kQXSU5oWo_pQ@-8=wZWrW>OLT`H{8 zMl_|bt)cv8(siN+P7)rr7vL(VJn%SdQHu}GVP=)cGAL4nq$@u9s$Zyf2^PElY2PYT zf&v2MQf9g9M3GTN8P5r%U6uly7|q2O4Q<4v%7Fe^Y8GbO6Rg!Y(Q#}M+dERH*@r%P zYi~GIP;@v-g?F6~Q#s}ydKoK%E-=|t|NNl^vo`I68*t9Qr0q{;c5|k=>?x4AAzB@H zleV@vMNioL_Kc$8XDPNp_(ML$XLKlB55CsF;~?bN^hAT>7C8U3Z&mX+uO?`Dtcv0x z1g-bAQFGwS&A(SH8)sO9iEc2g6bVS4EoMnSS{=zRL< zRJ=G{{Bx5oX)C6ht+w%^{vvuZ!uBxFKt^`QFec>rZ+rLdLZ_B2}p>k%ZnW#XahV)QpT$Ak+MWX$}O~#;(#}kOu1P zwRsUhF{5{4p#*>8G(#qbMcfo^19LtrFI>=|<(fq_Tr9UY5nkI=XNqbI7NJlC;8Zs7 zAr;F9OO@Z%kEp{q+j3X-9DE}oSm}O?Eu*hhT!K;kAd?Z_h}*0gctBv|uaR01qb#*R zLv7gFO#Sgw@9t3zFYjc`cusEuQoD6Ex0EBkknx(mY$dY4;N61K*2RVhvVYX0>*}l_Tg~6r&0KZv5qa zZrZhSYstr3&^Je1z);R%KLaOb5|~^pEGQ($j6(vVQ9GyT#6$yING@7bf1SH{5RW-^ z6`#ZTy>Wi7J*4^8{Q8>z*~Cu2rhTEzS9iphMc3g_m}v2Q7c;`ZRdC2A;oMY~mLW3W z(z&3IZn*-G+nD|G_Kl9G+cEZOWDdf$?&w>OFs0d1WYO}6=@twg({CRtK5cQ0m{hflBTp4 zt-;=qC6LePc>x=AifImJ0w^*XEZNn$ z%GYlSB{y7A8AZOuur-iT0vlMrmGlTt2%f$B3;j*biTUUImb?6TGz=@3jAyXaQPkHM7mfpTw z;&0P#6ozN$vVf?rNDw6fX4X1?(U!kRyqPl6tBKSTnHDSBZ>LrXn( z=E~8~pAl41Z{PZ6w!iX+scdB$85ZRG;JAFOl)>%CBD9#Bf;LIBda`0p53&%Ar)kh1 zqa1yj7vaL5AKt9(I*#jbKEF?ztzk8uX2j&s#ol=q&l1PS@s13cF*NFrv@tXc`vqt^ zlcJ!*yqy`6zq?UY`#2{Ic(#DMv5}>)kpRj~fwGecVv+B}fkIYEMLP$#z*_sFpL_#DY7KOjLX@D+}n_}3jmpPKAdEgIgZ-RBaCYC(Pp=KIDI7}Vv7@EwHs zWdL-_O|OQAyyH2m?(ZECo-fA4ar*FEAFNwBR7QjWwDICza#7e;qf#c?VQB$@{F>B( zkvd|_kY5KBz9wZu1?I81H+Qa)v(UA=kne0gwfhTC&*x`krp#B>Jn9U~G3j5vHx9WD z$`L~0df3KgS`bGT*w;We6Qau)y)G@4c)C~Z8fCL6iK{M54j&%4ZS@^NUxhwp7pEfl zwQiEUv|-%pq%|~=dR`Jhm7(fO`LHd+SI3Q4n}mesvl*Y6znIWW{KM7^bvcH3tA%uv zy$Tk1I=I^ZF!9)Ir10JAQGI#3&z7sO9;${-zVw%UlJWKP=Ge_KgN>4ZmCzq)c|pCr zV@tA=-jFo2T==Vo^A9;I;_T#HJ&e%dt4iEndBbqhF6-1M!M}SRg~WN_Gx~gAi!2Z{ zA8csBohfzj@J9Q2tCmWQW?Pd$A#WhLOZ%1ZJ*0>F(>bZfY7-p5IU5JJBRQ{9enVIt zPyB;-W%hxQV3 zzlLMjO0X@^H5}87Eif4U*<|mXo?>kS1rK`Rq<<|ESznBaPX>&J>jJuOfUkqVwTW$Y z0ILh@gmdRA!rP}CYI+$9(uq%gg)usV^H-#u)CIdp&TTY9hZNs4N-)=2sqZTN{JUOv zbH}r`=~&kvU1WbfBiVWYP@Hj2(Fv->#UF6OiruVgV+aY}R_Pe!aI)&pc3ZFsXYPjm zh?BAO)LK$R$S4)9;jXyK5^e9Iidm7sa`+K+XpucJm3%^sy;JFehP%YTms z_!dwVnqYB&m4kIt-+4%CA*=)?u`;p21U)x-f3>b%!Ka=dFI9E2Q&l(I!o6l5DIy4p zVqkIHD*QNe=ju>-x_+u^R_vLf z;#FMt?iBF2texkQ9L(*{Zg?77?@nPI^Jwob1xECt#ABU^Pv@Yy5kkTO<$k(Xlbox( zTmH1V#qF`8)56zN8B;o!fNFr<&eq=DJ}-M-!AOmtG+hwpz${#HnZFS0C55@|GqIr& zx}Us?ia19eMdfT%Vd0^inuAsq%H>;tHRxsBoR zEmY_`{tx!|FX9M_DG^{e!)LSy`gAbE@s|KY^ro{!no)DNaYb#p!n;cS& zBK4$(^ED=}(02#pO>O3f&93x({rt{kMM>Olf&>F7b)CO`Ems+e#jVLnc5pSXnFLAc zHl*|ZHr$sq7pge%$rI2U5TuKt(a!dC!*-A%@kHw>F^p}K7qegXkCR+I^+hE?1y|EQyTX%+yU+@7W&r&5 zS6rTEshiEz<%dgzNF@G)dg$)i1U-l4M6(zB4E-~EAUnyF#_~F-PU(@pvFg&K#+1B~ z`08adC#^xl?z*PSrsMfzqK;rs9i^(8u_W2flxLotKXyY8w{PC^SI9Uh{&_?$J+NpD zIRsJDw{{WQ(lS2s`j_3!8mN2j?Gt^sq{OxNnDk#J(d*F>vG*N%0MR>e2;{HF3X<;t zU5n=XcTCU8H856@k%-b zVQEvg&YO4f1hLNbMy=VIo*AbR&$ccP8}EAu`06sDp8iRXO~WB%|3l8~;lLNj5t&_O zffu!66g8d1TFTSS{8@ZkZXz{!B&VeIt)e4N-wan zd-*9?gZ)~DL3;JI5)~kPFn1l^aLS>NRj1wmC^*GcQI$Xe3^OXaB{~~tY8hqj79l;{ z8ueC>INN?ExyTB?#AZ|EWXPmW-1}1$BASk2s-m38&^WF}2BspIN3!*hzyiBiyyN<6 zkxK1*s!P**)q;9v9bZ7FVO!7aC8=pr7VWW3UEiz0hWp(R{`JE6CUZ0C1+!m;=@-e> zxrO)ZT3WoW&>@kQI9Z%qGFI{Om9(GAWAui+GA5VuGnpG(N9X~=1N%ouK*=l$2!PORr_y z(oNE1A}3>sw5qcCJmG7EUdzN|eMF4%v#+*gYG_oa$MeiH0h9eng^Kl>isjvAE4RNz zTBSGxA|7e41HTUe{aO8OA4vCRwAQ+Vytvh6(WLyBi76e6$&6w2gD!=0Aha%WZR4vA0573L|3Z8%(nmEMoj#epF!k zu6=RqCZu}4EKGQDtVLd)B#Clw>uqnDXg{Om-l1CH#tuL%&xgbr35 zW$Z^!OMd6GntoLVf)YN+Znn!%K427@qwafr=veScaEaTJ10-D9%Ef6B=RSSRa#h&J z;hK(J!_&P=-$9>;MZKMro_uy&kZ*Qr!EE`RE9S$d)5Xt!+8}LsNTULU z_O-G#I#(e`%4sZ+>5EOJ<<&iIU^l!0&AE2rO@VC6zURAT-#5g*THU`%Df{rwNUY{T zeHA9A>M`$%$-*}rnG>(ZAA9M9-Eq^)`58N0W^{JlT1HTdUH zwrA{(!}A;;MU#~OxJc*K=>{ofQ)M+*Z_%?d+JyW~VX zjn+$!QnRi=7QtWb0L*z!-EatcYN{S5>fOr(sY;GlEs@AAP3bCI-bJze zTGslK4kc`Fb$$1aZ1JsOl<6^d{-V0SZ`yoPwXUXG`xwHRXI)Xgw!EMtE|)-hNAQA+ z)6de08rtSj)S-mu<|U`6-r~v~sFGBWHCjDeA|cNu_tTnrvA_c?^_IrbuS?}T4KJl8 zczqoI*AZ|)Ky$_ZMta`V0)i8xgESq2h1gZFHnDIdP21Qdin1JMRfSE~R zextI@!PEOXP9;-bHB5<8-~DX#pp`2$a}jr2tAFia)j8pUw63tvyqhRN<(4^VQZ)A5 ztg7zg5H2$*-5VmY?Uq3r)qqT`kd2K6>OzZ519hV$`c^uJ6efm@PUSZIkj<>xz^xerh z6TxmSjxqOPmY+RJNRjsG{;#ZTOKo0Je zW;GmS9n5}X_!uY^LX?nzYt4L4+J@!y#0`)%&s{cxsQJr78+7~pEw*{{ZihGQjmbG| zWWr2Yc{mogyu*+;*N$Te8xXIE^;&1D8!vVYqkKK~jeaBGkGLp;$V1mUXItO02lKs- zsZUe!ExiuHOy;Y?ZEHtMtR_kEFjPFFZR%_vC!_o@nR?h~_?_W#Mdv4ob~AUk znWC(q(Ex=CRtLqCCH=`B#T&%}t#8))m-KK(+}&?u%A#pxK)AW$SSOQAx$})&KJ`y2 zi=y$M6ygj7z`TT#jbh0m7vB7MAT?O81{MG#z4uXd~t3Dcnyw*?Co8&t2RG)Ii`94yD2WiH5GySlYk zEJRM1G**lo?g_e-{s2D^l;eD5-kLWqG0ze1`Dl889s3<#VFV!@76@pHSuGxMDtMJ> zUU0D4$x*v*&}%obQ}atm(qB6xDC*LEw8%HvNEw&4?JS$add zprrZ5bHRv*PhNsvftF^oH-tDU!P_8_M67t-Z~V-k2%Gsh8XZ6r-?Ax0CZ^7+sKF0t zIvL8Gn~tTXak|5&upTM1&TniAv)I)P(jy0b zpno#@d?)>Tq5@Wg;O{XF;N?UG4CF*b`5CJmeop?U+@k!?1xcT>lT%U>KV>EtWW?nr zQVKU!?5piX6DvSvt|>Lo#ZuZ!F$2>aY;}~dwi9FQEsd-A((D@-+pJ+xgwtY_E{thD ze@2H$9(=|KcpQJ73jE7EagpBORbv`)--pX} z*j_ZrQ4C)niH&<^tjdHH|5wAFpzEDU;jb!p{)dbNnUu|!5o-%gvky?r_I(?7Z; z>|~*Yo3d}pW=0%vX>I4{0<(LwYoV(sI833YIIhHy=%7s~*HWvh+e_|85bcaSyB6MR z%vrjle7iiMGCpQXdVO>Bk@$?TzfYmL&`%gGh*S%+5W!mqcxR~AvG_0737 zvP3NL);;BKSMesg1@TSYuGdbtklf0aa z063~m-%eI&#_Sg~+|emoRr-r9{d>!X(TSfuC*aAd|dpLo~=sgN6+Q~FfN0Q3xG zz9UO_#@ncY3$sbm+w8h9<^={Kn>hoMIya*^rfLc>zGDM-;H^&H($RIJrUTqRF`HT`q-cBpe) z#ofBG>!$K1x{a*ZRHU5#ptB`=V@Jv-e!+j{mkN^8@B5Z`T2iXtAE{ybK#C{yviirb zmXu(VcX&U0@Zw7EF%?jIiJyN-{Ag;Y2{u6&CnA{iUp+bT?sI?pxjg{{MZaS0V@KVn zQO96Dumr;XDc3D52L+HcWmj`#&Y$C*;upEwc968UqmN63vH>bId{VD*DDb%r%yAW0 zW-AGk+sNq>6vt#{{qU})m0(2Ce;1khDr=0X({hl;hoNKnp281YJ28&mYU*r%A?yxH znyC~pN@;(}+C7y;yvcE-qQW(ih|Mh-;E`s$HMW#pFZjJ_qJkoNrriZ!ys3Qx1YU73;?A>7Pn^=4#(wAbm$M6Lx^48e?w(~j52S-16}{Z}RAM4;?9mHJ zyN0U;c0;MK6Z=w0!WFrMHg_ILS&e7DJ=>pN9hDlS$S$`?FRs^2?yW!JSC3$HqA%uB zzt{feNZu(Gm**<%?yb$X_0Cw)1Gv(pN3sT<8bRlmt4fGX#xaCDjgy2kRhJF^oPf#4 z3>U26i&xJxU0v)_ap(4$x(8=G+J~R{(K||m*RP?n74J^@z2k?3S%z(zxGaQzl4CP< zjFNM}7(Snd@|ZZyW;juzW^Cj!F5P1R0krqm7xOZjAC z1n3(-H_@qrvS~b^RWdvcx4(Fxz_eLfk?aaPBK*A0HiqA<3y$cshf#v zZ26lfLBtt>XBkn6*um3yafV~rsh*{Oru#V!6lIDUY18gYq&<~S=@UuUNNg24ZY zzm54eZhYy+pv||>onGWEI&RSVsQ{Y_{qHw5NDvG4t54&w zt)b^48}cInvMbXfEDGq0k^Ad+_qCdZz4LR1x6B{UAY>*@tLLw@>SiD53%zu4SV_mNv%H8aDy8gL)C?Q0C0v_Gw!OxU?JJ`$}L z%}LwB=CLG+oaLV~WJ$uX*^%aZJvC}BNs=FL?ILr1a*6uZ<)>h`fLE|+w<+`J`=Ot< z>Jp0Fb!;#)i#?_NVa+jM^UEJrTpPx!1GL$TMIPa9+&|ypE3y7sH%p8WpBFwn%&ML+ zfGBbf2rVQG_pz`{<9}_tNAP@%Xa^gmufJX$%tyQb89mC%BBXZ?kNiF*FlC9CmVTN3 zit2q$(uQJ8CAVEdt>PvU$A?SqW-k{c2NdS(&=SMCDWM|+FC*-*i8Cz;DU`S!dp6yY z6!jm**rCboha4ZyTLi7Pakx6g)LHiexILXi2gi#G@}-ZfTma zM*C^l1g@(~T@4t^hwTWaiM(=3%}soSP2tB?Cqfie@Ix(T3+fXi8GBOM1Ct8#4N}m! zTD#xxL^F7F>hyOR>9<&`m1BPZeD@R5^qS~qik`|OZLjNhfsxmG&6`qH1qI>VzaLAe zi!(q|*Ul-_biQEhE3~aT6(*U#jyie`C7PHA-x5?Mo2ej>oQKf^e7=SJM4EV#h3*|G zmq0RpvC7xhvYjqVuuO56d?QLd-R!7--66W~BWU&nHlw1SD8Xx?UPZ?zwlX&)!9aL- z7Fj4%VYQlzCxjm`C%7hEjJwnWa#3pu@%Z8< zfv!$C)Xr+%@bNE38P2{&jL(xYFG>)kXM-H6w>b9TAAIteKDit%8Ac%06*5-(q`y~5 zAM9fN0KcI~>)(qhwW#c?t5n7+109~@5Vo89%MQdt`PVdm7i`-QvljLiwOVSM>!tjm z+wQ65p>v-KK*+c$C+ZnAohMYxg^v&6KH`Vg&c`B^9&7ajf663}@P=~Ce6pQPPy#tP zmg{3LlY!$@TeAxXoF})Bx-dRO)Q!Drx?DcI#SUK{hs_9AhFw-BS-x>?oh&3%X>um{ z=dVRkks!h?cnmsM`%E6Xhli&L+cEe}sh{BS$%MBfAU(co`x;}f zmkw*VdycTr^+~FLHLC4n=9MJ8-O)syFMroe-;yKG&1}P;A8_=?6x2giC$}f9E+n^G zH9=EFP$Zkdm=9<|M<^Zz-XG1yU?1=6H`Iw??0R#5biy&c*t9wGnv6^|_8m;{~BzdIMX~iqCIyLztn6*ULK^$H`QS4*U0GXwp6%NhyJgHBC+qxHKe2m z5CJ#rwI+V#rw##9p-=u#e|RqL*2=8}o*(-876-&X`h1$8*hx>1k&+~9id$vYqIzXJ%qNsFm|Jh} z0A2%-b*lD%t*Mb228`jGkUj)*zVh)o55DSP8+I_+1*5yWXnai5;7`Jd@w%szuFTJP z>}*EXH@{om{y?C8%g9gpHz~)opc62Ytp$O)q&zM_mYZ$B6cz?3{K?hj!@uY06KmZu zV=G7IVP-nYE!e@snd&2WO!dlZ{!3@;yPGWEdDB2o#pRpxdnv_m!?5JpwfV^?tq-^n zr5HM643C|W&334kk|AudpRLjY*q`R1!QM4rMiiwBTgaPtN1S;o$&oy@dRQt)S3ftz z#CgvL19D%4L?djQhYkWECpaN-cC;8coTm^wGQ1Ma205G$1m-97RS!9stY_{pxhU=? zq5114Tc2}AsTy7v3O=b1{=g~(`&q}BAF|#1AKVgU6c`tOvW*e0_9D-x%yM|Oi8nT& zPgTJ@`$-wqb$)Z>31m}BR~V18MmI7!F7;l0i>=kZ+;0ninK2usfodjJXp`2PSe4#PYE diff --git a/client/src/main/resources/sounds/large_blast.ogg b/client/src/main/resources/sounds/large_blast.ogg deleted file mode 100644 index ed0a28637a8ae820139f281eafe5aaf454d231e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18137 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 I000000CM-6OaK4? diff --git a/client/src/main/resources/sounds/large_blast_far.ogg b/client/src/main/resources/sounds/large_blast_far.ogg deleted file mode 100644 index 4be6eaf3647181a68075d4ad484afb1479adb932..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22782 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

#!mRIfmM?Ep<4X2=_=c4=hkc-pQ+a

gSR($*^W}=Zvns!>k3N{TtNr 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 literal 0 HcmV?d00001 diff --git a/client/src/main/resources/textures/items/fireworks.png b/client/src/main/resources/textures/items/fireworks.png deleted file mode 100755 index f1e07fd1096efa4ba4cb4c7248c5de6d2f3b388f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 192 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`?Vc`-|KvADGtvZj52;8uHn0Y0v^UEL{p?0F7X^v(4UaYpu=P`7(8A5T-G@yGywqM7(^)m diff --git a/client/src/main/resources/textures/items/rocket.png b/client/src/main/resources/textures/items/rocket.png new file mode 100755 index 0000000000000000000000000000000000000000..02bff6a64249f3f7c059f9b122df2a642ac5fb22 GIT binary patch literal 4777 zcmeHKdsGu=77s@k1VzEBD58#0E38i5&yk2=5D)_hL3wEFWM+~Kh_Ksp_IS?rKa!creD}Necklgu z_q!+GnuxFgYmgv_WrD=R)tG$P<>N=4fn=x(j#LIV6YFn3W_wyJ(>-ZLdEbdI%kY$e!jQB_5 z%`dx>J4OuuZ0q{yNlPeQ6)T;gO&{eyIf!W?DqKCB*q3SmosX;arcIM)YNi*J(W|2!VJeR{W5;3bzKm5vzuV)ksw`scbTRvco{#k&IcV|p&}}2l35Bp6`oYK@ zw&==|n5Ij#we|)|C&73yO z#|^%FaWuu=h|fI_3IFxbk=~$+G|Qf(f3~qIdXB-+fvu5F73dkI*R<1fMxWeQ@VzcE zCvEre9D3%WtjP`z5mOc#Pg<4XnNmmE{G1Ku@5c=e-Zn#8dM?)?uW|}+V*ANtf{>4I zz_^2)N3Z64oR1qcGjVjsgxLcYtP@Z*7NXH;a4 z3_ZH!?~1M?#jiaRioRZ0El(&TO;^9ESAC~F%chgpS$`Z;q zdro-k?|SNX8$+#`j_h<8dz(J^UOH5n*<7V@#^Djhl|PLfR~RskZe|tovcB4u?;sOV%KO34O7kTMHQFU40`wEC=yQ=(}Tiq z-TsE@6|y#MQfJHU=6GS_p@o&|SvT4Oclo)Ui0e3&mD&K8w`_hI6|^^w9X`r%6gQ`B zZ*4zbaP}IWUP5e9)W#jq#d$ZQ<}{|Z>4Mz%gVF-^!w1ozJy=Q524Z9j z5KOOSptxQ^FsxbwXcIJ=ubrE1Arp&vt=)jkpqtl+Npc03!)qO;HAf$+TE33=5Z`H>#Lyu~^JxahMzq3^ZU< zijG39u+B8a2GNZnB}|x+G*F~o2iY)Dh2Bg_=yWg-y^l|8kjZ-Cb*3H`03S>%YGAS% zET&e=>}z470+RtqPe6ZYVUmMx%8VpTdb1HD0+R_HHKi{Ej`i9b%tnnp9UNm48bS+H zO~5O=pUa>SSwydejRF;^HQ22H+5I#rQu%?bezDnR?CJCk1eo{Y_S1f!yImP*$z+IB zkC|=Zg-9iIn|}n?VjzaisU@N))W#-T$Y+aLVwO-KW^qNrZbx?O zMTF4=D$$0?W-+)tySZ&y5ReQY7PZwW0I<_Ts|D92p#wrWC4ezm{%2T;GpHG z2n~|bTy0;==^O}1oDIRTCK_$%C$`&xmYY8o2%V@9S)kJ+Cnxu@QZ+@H~THE-9xL*%`Z zB(Ibr$(`V8*1;2R>b8B`g1oL^1~hCFXI7SJt!+uQUk5p_&=iyYtK8JNj@SaW)}2+y zjcZBEH?3}~P_+jRUSVF^Qf3HZ(z1rcwID09>dUkfKV5NZOyc9SaLw2dA9w6ZGZCxn jDo`{^<}?n|eg4WxVMX@W9yzxbgiQ+x43icIEX(*e&8z># literal 0 HcmV?d00001 diff --git a/client/src/main/resources/textures/items/rocket_launcher.png b/client/src/main/resources/textures/items/rocket_launcher.png new file mode 100755 index 0000000000000000000000000000000000000000..ef13f1dc8b7db8d7a2b6367a4bfc18d3f0a6b0a9 GIT binary patch literal 5647 zcmeHKc~}!!5)Y1`0&=N{cMObznmgo@0Kp(+HHZ)d9Rxa^4um5KNkamof(~AYCt7oq&qF^L_id-_C!gkMyfo^?Oyns#i&Gb#-wX zuRB#2g+h(zI&<8RZzJ_JRtLGy>iqRn=d&kze7pd+xfA{HT-HvwAJIpZRbubc>I1 zS9a>5IcwYUil*p18Jv(~K9-hlWHH0Ow-VshnvCwSa`|wvI6ut&Ms}6nyuJJUOV4IQ zs@NyL?ChR7>s@Telw|U2-*DgMgyVEj?`}Q1rpIBr$SKA?5;YNE29=K+yL0Shv&zLmdcijRM+z@hTV1{AH~&TT_2`&@ zZMwZB^{Cy%4Ie|Vm~Y+}K*R_xZ%sj02L>JX3QFtd5t-W!o?cq{_;=+6$D<`L+m9$) zKD2>tnbnk^8{0M*&c3vTWlnKA9B;IR7+OCgLCVtQ=>)QQIkNzpmy1czP=1upYb|7W>g9&-KC)B_; z<|)3bbZ!mtC%?n`TA>ZI?Hv>qT`z?C$_}Q;$&bI05SJ9cGArK9h?49z727q@kh4(! zNsspMx}M~tZ-V=bv%Z-A_&XBGhMif<*X}uLdwjEfc~e=MEnGj>*u!pA zMc348g)wjmZvf!inFO~VkoP(0M2*>4@AMRV&OLuu@%1K<`;L9xnL z`joJzNw@8rS{odet}v=PaqwkC?Rm;B%0bR~l;jZbt4O*{4ZIrk)GpmY90* z?wFj*KNP&fbCqk@^XKXBA>R6$`PZrV%T1Gu!WD92tE%+wgoIxrl0ADe*NzJ1HwLkx zh52XiM;TAeL28gx6{ub zJh^(mPLe83mP1OHJB$-A#z`_TuXyuT^G>bpe9#$WuB@h)*6e9{A9$>P-<4`R%QgP3 zJ8DfzyW>2k-8;Br)ppFoeITy)VOfI}@Acul6rCR1#{D;IyG6A(v!9J#^MnokdUu(@ zn=MdzznSfdi00-OtkLzV`2%`^eLVPRF!iH#^RKZb<%18)T+T({$MTqaKV`&UTKIeb zjpY>B-u)f#YQD&_Y_JCg9%pNi^DbWJypgw=uI>j;=RJTqR_ssZc zd;Mo*ZF72|b_KIz>e=~?zMO=z-4Aa)f3rVi{KimAIMCtpEL)bb%{&90#NBa1zE=7i}XKikNPk#lsND zh=mD&VHp#TS1Oe_B^f7``{RiW1_MtZ;YlPcqJdRJNMJyPl_<>B5JMOoNCC6f?{74H0>==%K3_J9f779M{ zTZeap6w)v`2swsB64-nsgb@5E-WbmH<{zgVa#@E3>3 zG*$@N-)O>O(O0s*@l8FW31_4ui1`=XZ?r$hu2Dv`cswRY3WllO<8oLS_4-Vq6ch`Y znnw~y76@oG01J=+DwaYeim(g;m4Jl=$RVVOXhIQr1Qb`IfB^{zsi6>XoEX6Y$OJMK zqzSQPGL345}iV|{?^0)B_4GFUBv$=pT!G7r#H~`a#!sG4Nf= zKdS2oUEjsPcPamMuokrziD!4fA9YL@y~zuqkgk&Kf$ zuT-E=ICJ%-rOL4jM}%WwF3)ky(=lU=r%lrHZx2JEw6eJzHlKbiIk7OlmN0#@U5XZN zwQhdG?^)G6i*4H1td{(2!IUklnoFNu*k`5E(V3Hef6f5|PFzXWf?Sfr&7Jy{(F-|k zdpnmDc#a!PgjT+f%IMA*Ulv%j&v#d4Ocb`z8z;WA`+(Rob^|@065HjKH4SjdSS(l zvUNULZ&;o(Inl7kXY|%2Ir^!8O-kJR#MNgG7SbH7Ciw_XG|5o;`4<^ZcZz3E(8?_8 zyU8eMu`$UwZ`&7gXOxknaoB2ikGkruyDTo4nJ?aarQq4yw-0ZjS|q0g%rs1njfolP zoOo#mDt&NZc9I*snil;bIw|pkR`_aV%7tr>S6Jq_{zIF7jpW-9wsSW$#UgY%cw`b= zR&X<*YrAD^JG;@$yoQpq;2LVPkycF;{bTonYc|me+-oxswddC3btOJyo}0$}t8GE_ Ss)iCIgD9?}3#Y)rZ^NIlwvkQ% literal 0 HcmV?d00001 diff --git a/common/src/main/java/common/block/tech/BlockCauldron.java b/common/src/main/java/common/block/tech/BlockCauldron.java index ad067e52..d384467a 100755 --- a/common/src/main/java/common/block/tech/BlockCauldron.java +++ b/common/src/main/java/common/block/tech/BlockCauldron.java @@ -518,7 +518,7 @@ public class BlockCauldron extends Block } else { - playerIn.connection.sendContainerToPlayer(playerIn.inventoryContainer); + playerIn.connection.sendContainer(playerIn.inventoryContainer, playerIn.inventoryContainer.getInventory()); } // playerIn.triggerAchievement(StatRegistry.cauldronUsedStat); diff --git a/common/src/main/java/common/entity/item/EntityFireworks.java b/common/src/main/java/common/entity/item/EntityFireworks.java deleted file mode 100755 index 038b7e5f..00000000 --- a/common/src/main/java/common/entity/item/EntityFireworks.java +++ /dev/null @@ -1,155 +0,0 @@ -package common.entity.item; - -import common.entity.Entity; -import common.entity.EntityType; -import common.init.SoundEvent; -import common.model.ParticleType; -import common.tags.TagObject; -import common.util.ExtMath; -import common.world.World; - -public class EntityFireworks extends Entity -{ - private int fireworkAge; - private int lifetime; - - public EntityFireworks(World worldIn) - { - super(worldIn); - this.setSize(0.25F, 0.25F); - } - - protected void entityInit() - { - } - - public boolean isInRangeToRenderDist(double distance) - { - return distance < 4096.0D; - } - - public EntityFireworks(World worldIn, double x, double y, double z) - { - super(worldIn); - this.fireworkAge = 0; - this.setSize(0.25F, 0.25F); - this.setPosition(x, y, z); - - this.motionX = this.rand.gaussian() * 0.001D; - this.motionZ = this.rand.gaussian() * 0.001D; - this.motionY = 0.05D; - this.lifetime = 25 + this.rand.zrange(6) + this.rand.zrange(7); - } - - public void setVelocity(double x, double y, double z) - { - this.motionX = x; - this.motionY = y; - this.motionZ = z; - - if (this.prevPitch == 0.0F && this.prevYaw == 0.0F) - { - float f = ExtMath.sqrtd(x * x + z * z); - this.prevYaw = this.rotYaw = (float)(ExtMath.atan2(x, z) * 180.0D / Math.PI); - this.prevPitch = this.rotPitch = (float)(ExtMath.atan2(y, (double)f) * 180.0D / Math.PI); - } - } - - public void onUpdate() - { - this.lastTickPosX = this.posX; - this.lastTickPosY = this.posY; - this.lastTickPosZ = this.posZ; - super.onUpdate(); - this.motionX *= 1.15D; - this.motionZ *= 1.15D; - this.motionY += 0.04D; - this.moveEntity(this.motionX, this.motionY, this.motionZ); - float f = ExtMath.sqrtd(this.motionX * this.motionX + this.motionZ * this.motionZ); - this.rotYaw = (float)(ExtMath.atan2(this.motionX, this.motionZ) * 180.0D / Math.PI); - - for (this.rotPitch = (float)(ExtMath.atan2(this.motionY, (double)f) * 180.0D / Math.PI); this.rotPitch - this.prevPitch < -180.0F; this.prevPitch -= 360.0F) - { - ; - } - - while (this.rotPitch - this.prevPitch >= 180.0F) - { - this.prevPitch += 360.0F; - } - - while (this.rotYaw - this.prevYaw < -180.0F) - { - this.prevYaw -= 360.0F; - } - - while (this.rotYaw - this.prevYaw >= 180.0F) - { - this.prevYaw += 360.0F; - } - - this.rotPitch = this.prevPitch + (this.rotPitch - this.prevPitch) * 0.2F; - this.rotYaw = this.prevYaw + (this.rotYaw - this.prevYaw) * 0.2F; - - if (this.fireworkAge == 0) - { - this.worldObj.playSoundAtEntity(this, SoundEvent.LAUNCH, 3.0F); - } - - ++this.fireworkAge; - - if (this.worldObj.client && this.fireworkAge % 2 < 2) - { - this.worldObj.spawnParticle(ParticleType.FIREWORKS_SPARK, this.posX, this.posY - 0.3D, this.posZ, this.rand.gaussian() * 0.05D, -this.motionY * 0.5D, this.rand.gaussian() * 0.05D); - } - - if (!this.worldObj.client && this.fireworkAge > this.lifetime) - { - this.setDead(); - this.worldObj.newExplosion(this, this.posX, this.posY, this.posZ, 3.0f, false, false, false); - } - } - - public void writeEntity(TagObject tagCompound) - { - tagCompound.setInt("Life", this.fireworkAge); - tagCompound.setInt("LifeTime", this.lifetime); - } - - public void readEntity(TagObject tagCompund) - { - this.fireworkAge = tagCompund.getInt("Life"); - this.lifetime = tagCompund.getInt("LifeTime"); - } - - public float getBrightness(float partialTicks) - { - return super.getBrightness(partialTicks); - } - - public int getBrightnessForRender(float partialTicks) - { - return super.getBrightnessForRender(partialTicks); - } - - public boolean canAttackWithItem() - { - return false; - } - - public int getTrackingRange() { - return 64; - } - - public int getUpdateFrequency() { - return 10; - } - - public boolean isSendingVeloUpdates() { - return true; - } - - public EntityType getType() { - return EntityType.EXPLOSIVE; - } -} diff --git a/common/src/main/java/common/entity/npc/EntityNPC.java b/common/src/main/java/common/entity/npc/EntityNPC.java index 8bc4decf..828a3cbb 100755 --- a/common/src/main/java/common/entity/npc/EntityNPC.java +++ b/common/src/main/java/common/entity/npc/EntityNPC.java @@ -739,10 +739,9 @@ public abstract class EntityNPC extends EntityLiving this.playSound(SoundEvent.THROW, 1.0F); this.worldObj.spawnEntityInWorld(entityarrow); } - else if(stack.getItem() instanceof ItemGunBase) { - EntityBullet bullet = new EntityBullet(this.worldObj, this, target, ((ItemGunBase)stack.getItem()).getVelocity(), 0.75f); + else if(stack.getItem() instanceof ItemGunBase gun) { + EntityBullet bullet = gun.createBulletFor(this.worldObj, this, target); int i = EnchantmentHelper.getEnchantmentLevel(Enchantment.POWER, this.getHeldItem()); -// int j = EnchantmentHelper.getEnchantmentLevel(Enchantment.punch.effectId, this.getHeldItem()); bullet.setDamage(((ItemGunBase)stack.getItem()).getAmmo().getDamage(stack)); if (i > 0) @@ -750,17 +749,7 @@ public abstract class EntityNPC extends EntityLiving bullet.setDamage(bullet.getDamage() + i); } -// if (j > 0) -// { -// entityarrow.setKnockbackStrength(j); -// } - -// if (EnchantmentHelper.getEnchantmentLevel(Enchantment.flame.effectId, this.getHeldItem()) > 0) -// { -// entityarrow.setFire(100); -// } - - this.playSound(SoundEvent.EXPLODE_ALT, 1.0f); + this.playSound(gun.getLaunchSound(), 1.0f); this.worldObj.spawnEntityInWorld(bullet); } else if(stack.getItem() == Items.snowball) { diff --git a/common/src/main/java/common/entity/projectile/EntityBullet.java b/common/src/main/java/common/entity/projectile/EntityBullet.java index b471f480..1924aa65 100755 --- a/common/src/main/java/common/entity/projectile/EntityBullet.java +++ b/common/src/main/java/common/entity/projectile/EntityBullet.java @@ -11,6 +11,7 @@ import common.entity.types.IObjectData; import common.entity.types.IProjectile; import common.init.SoundEvent; import common.tags.TagObject; +import common.util.BlockPos; import common.util.BoundingBox; import common.util.ExtMath; import common.util.HitPosition; @@ -20,10 +21,10 @@ import common.world.State; import common.world.World; public class EntityBullet extends Entity implements IProjectile, IObjectData { - private Entity shooter; + protected Entity shooter; private int ticksMoved; - private int age; - private int damage = 5; + protected int age; + protected int damage = 5; public EntityBullet(World world) { super(world); @@ -175,33 +176,10 @@ public class EntityBullet extends Entity implements IProjectile, IObjectData { if(hit != null) { if(hit.entity != null) { - float velo = ExtMath.sqrtd(this.motionX * this.motionX + this.motionY * this.motionY + this.motionZ * this.motionZ); - int damage = ExtMath.ceild((double)velo * (double)this.damage); - - DamageSource source; - - if(this.shooter == null) { - source = DamageSource.causeShotDamage(this, this); - } - else { - source = DamageSource.causeShotDamage(this, this.shooter); - } - - if((this.worldObj.client || Vars.damageBullet) && hit.entity.attackEntityFrom(source, damage)) { - if(hit.entity instanceof EntityLiving living && this.shooter instanceof EntityLiving shooter) { - EnchantmentHelper.applyThornEnchantments(living, shooter); - EnchantmentHelper.applyArthropodEnchantments(shooter, living); - } - this.playSound(SoundEvent.METALHIT, 0.2F); - } - this.setDead(); + this.onHitEntity(hit.entity); } - else if(!this.worldObj.client) { - State state = hit.block != null ? this.worldObj.getState(hit.block) : null; - if(state == null || state.getBlock().onShot(this.worldObj, hit.block, state, this)) { - this.playSound(SoundEvent.METALHIT, 0.5F); - this.setDead(); - } + else { + this.onHitBlock(hit.block); } } @@ -232,6 +210,39 @@ public class EntityBullet extends Entity implements IProjectile, IObjectData { this.rotYaw = this.prevYaw + (this.rotYaw - this.prevYaw) * 0.2F; this.setPosition(this.posX, this.posY, this.posZ); } + + protected void onHitBlock(BlockPos pos) { + if(!this.worldObj.client) { + State state = pos != null ? this.worldObj.getState(pos) : null; + if(state == null || state.getBlock().onShot(this.worldObj, pos, state, this)) { + this.playSound(SoundEvent.METALHIT, 0.5F); + this.setDead(); + } + } + } + + protected void onHitEntity(Entity entity) { + float velo = ExtMath.sqrtd(this.motionX * this.motionX + this.motionY * this.motionY + this.motionZ * this.motionZ); + int damage = ExtMath.ceild((double)velo * (double)this.damage); + + DamageSource source; + + if(this.shooter == null) { + source = DamageSource.causeShotDamage(this, this); + } + else { + source = DamageSource.causeShotDamage(this, this.shooter); + } + + if((this.worldObj.client || Vars.damageBullet) && entity.attackEntityFrom(source, damage)) { + if(entity instanceof EntityLiving living && this.shooter instanceof EntityLiving shooter) { + EnchantmentHelper.applyThornEnchantments(living, shooter); + EnchantmentHelper.applyArthropodEnchantments(shooter, living); + } + this.playSound(SoundEvent.METALHIT, 0.2F); + } + this.setDead(); + } public void writeEntity(TagObject tag) { tag.setInt("damage", this.damage); diff --git a/common/src/main/java/common/entity/projectile/EntityMissile.java b/common/src/main/java/common/entity/projectile/EntityMissile.java new file mode 100755 index 00000000..0638ad06 --- /dev/null +++ b/common/src/main/java/common/entity/projectile/EntityMissile.java @@ -0,0 +1,79 @@ +package common.entity.projectile; + +import common.entity.Entity; +import common.entity.EntityType; +import common.entity.types.EntityLiving; +import common.init.SoundEvent; +import common.model.ParticleType; +import common.tags.TagObject; +import common.util.BlockPos; +import common.world.World; + +public class EntityMissile extends EntityBullet { + private int fuse; + private boolean flames; + + public EntityMissile(World world) { + super(world); + } + + public EntityMissile(World world, double x, double y, double z) { + super(world, x, y, z); + } + + public EntityMissile(World world, double x, double y, double z, int data) { + super(world, x, y, z, data); + } + + public EntityMissile(World world, EntityLiving shooter, EntityLiving target, int fuse, boolean flames, float velocity, float innacuracy) { + super(world, shooter, target, velocity, innacuracy); + this.fuse = fuse; + this.flames = flames; + } + + public EntityMissile(World world, EntityLiving shooter, int fuse, boolean flames, float velocity) { + super(world, shooter, velocity); + this.fuse = fuse; + this.flames = flames; + } + + public void onUpdate() { + super.onUpdate(); + if(this.worldObj.client && this.age % 2 < 2) + this.worldObj.spawnParticle(ParticleType.SMOKE_NORMAL, this.posX, this.posY, this.posZ, this.rand.gaussian() * 0.05D, + this.rand.gaussian() * 0.05D, this.rand.gaussian() * 0.05D); + if(!this.worldObj.client && this.age > this.fuse) + this.explode(); + } + + protected void explode() { + this.setDead(); + this.worldObj.newExplosion(this.shooter == null ? this : this.shooter, this.posX, this.posY, this.posZ, (float)this.damage, this.flames, true, false); + } + + protected void onHitBlock(BlockPos pos) { + if(!this.worldObj.client) + this.explode(); + } + + protected void onHitEntity(Entity entity) { + if(!this.worldObj.client) + this.explode(); + } + + public void writeEntity(TagObject tag) { + super.writeEntity(tag); + tag.setInt("fuse", this.fuse); + tag.setBool("flames", this.flames); + } + + public void readEntity(TagObject tag) { + super.readEntity(tag); + this.fuse = tag.getInt("fuse"); + this.flames = tag.getBool("flames"); + } + + public EntityType getType() { + return EntityType.EXPLOSIVE; + } +} diff --git a/common/src/main/java/common/init/EntityRegistry.java b/common/src/main/java/common/init/EntityRegistry.java index 0867aa92..cdc245f4 100755 --- a/common/src/main/java/common/init/EntityRegistry.java +++ b/common/src/main/java/common/init/EntityRegistry.java @@ -24,7 +24,6 @@ import common.entity.item.EntityChestCart; import common.entity.item.EntityCrystal; import common.entity.item.EntityExplosion; import common.entity.item.EntityFalling; -import common.entity.item.EntityFireworks; import common.entity.item.EntityHopperCart; import common.entity.item.EntityItem; import common.entity.item.EntityLeashKnot; @@ -45,6 +44,7 @@ import common.entity.projectile.EntityEgg; import common.entity.projectile.EntityFireCharge; import common.entity.projectile.EntityFireball; import common.entity.projectile.EntityHook; +import common.entity.projectile.EntityMissile; import common.entity.projectile.EntityPotion; import common.entity.projectile.EntitySnowball; import common.entity.types.EntityLiving; @@ -253,7 +253,7 @@ public abstract class EntityRegistry { registerEntity("Box", EntityBox.class, "Eisenwürfel"); registerEntity("Tnt", EntityTnt.class, "TNT"); registerEntity("Falling", EntityFalling.class, "Fallender Block"); - registerEntity("Fireworks", EntityFireworks.class, "Feuerwerk"); + registerEntity("Fireworks", EntityMissile.class, "Feuerwerk"); registerEntity("Boat", EntityBoat.class, "Boot"); registerEntity("Minecart", EntityMinecart.class, "Lore"); registerEntity("ChestCart", EntityChestCart.class, "Güterlore"); diff --git a/common/src/main/java/common/init/ItemRegistry.java b/common/src/main/java/common/init/ItemRegistry.java index cf6500f4..c785e602 100755 --- a/common/src/main/java/common/init/ItemRegistry.java +++ b/common/src/main/java/common/init/ItemRegistry.java @@ -62,7 +62,7 @@ import common.item.tool.ItemEgg; import common.item.tool.ItemExpBottle; import common.item.tool.ItemExterminator; import common.item.tool.ItemFireball; -import common.item.tool.ItemFirework; +import common.item.tool.ItemRocketLauncher; import common.item.tool.ItemFishFood; import common.item.tool.ItemFishingRod; import common.item.tool.ItemFlintAndSteel; @@ -229,6 +229,8 @@ public abstract class ItemRegistry { register("bow", (new ItemBow()).setDisplay("Bogen")); register("boltgun", (new ItemBoltgun()).setDisplay("Bolter")); register("bolt", (new ItemAmmo(5, 1.0f, StackSize.L)).setDisplay("Bolter-Munition")); + register("rocket_launcher", (new ItemRocketLauncher()).setDisplay("Raketenwerfer")); + register("rocket", (new ItemAmmo(6, 6.0f, StackSize.L)).setDisplay("Rakete")); register("arrow", (new ItemArrow()).setDisplay("Pfeil").setTab(CheatTab.WEAPONS).setMaxAmount(StackSize.L)); Item coal = (new Item()).setDisplay("Kohle").setTab(CheatTab.METALS); register("coal", coal); @@ -314,7 +316,6 @@ public abstract class ItemRegistry { register("carrot_on_a_stick", (new ItemCarrotOnAStick()).setDisplay("Karottenrute")); register("charge_crystal", (new ItemEffect()).setDisplay("Energiekristall").setTab(CheatTab.MISC).setColor(TextColor.DMAGENTA)); register("pumpkin_pie", (new ItemFood(8, false)).setDisplay("Kürbiskuchen").setTab(CheatTab.FOOD)); - register("fireworks", (new ItemFirework()).setDisplay("Feuerwerksrakete").setTab(CheatTab.EXPLOSIVES)); for(Enchantment ench : Enchantment.values()) { register("enchanted_book_" + ench.getName(), (new ItemEnchantedBook(ench, 1)).setUnstackable().setDisplay("Verzaubertes Buch mit " + ench.getFormattedName(1)).setTab(CheatTab.ENCHANTMENTS)); int max = ench.getMaxLevel(); diff --git a/common/src/main/java/common/init/Items.java b/common/src/main/java/common/init/Items.java index 9796c999..9c6b7b87 100755 --- a/common/src/main/java/common/init/Items.java +++ b/common/src/main/java/common/init/Items.java @@ -60,7 +60,7 @@ import common.item.tool.ItemEgg; import common.item.tool.ItemExpBottle; import common.item.tool.ItemExterminator; import common.item.tool.ItemFireball; -import common.item.tool.ItemFirework; +import common.item.tool.ItemRocketLauncher; import common.item.tool.ItemFishFood; import common.item.tool.ItemFishingRod; import common.item.tool.ItemFlintAndSteel; @@ -373,7 +373,6 @@ public abstract class Items { public static final Item fermented_spider_eye = get("fermented_spider_eye"); public static final ItemColored fern = get("fern"); public static final ItemFireball fireball = get("fireball"); - public static final ItemFirework fireworks = get("fireworks"); public static final ItemFishingRod fishing_rod = get("fishing_rod"); public static final Item flint = get("flint"); public static final ItemFlintAndSteel flint_and_steel = get("flint_and_steel"); @@ -1018,6 +1017,8 @@ public abstract class Items { public static final ItemEnchantedBook enchanted_book_thorns_3 = get("enchanted_book_thorns_3"); public static final ItemEnchantedBook enchanted_book_unbreaking = get("enchanted_book_unbreaking"); public static final ItemEnchantedBook enchanted_book_unbreaking_3 = get("enchanted_book_unbreaking_3"); + public static final ItemRocketLauncher rocket_launcher = get("rocket_launcher"); + public static final ItemAmmo rocket = get("rocket"); private static T get(String id) { T item = (T)ItemRegistry.byName(id); diff --git a/common/src/main/java/common/init/SoundEvent.java b/common/src/main/java/common/init/SoundEvent.java index 4ab1d86e..701583d8 100755 --- a/common/src/main/java/common/init/SoundEvent.java +++ b/common/src/main/java/common/init/SoundEvent.java @@ -53,13 +53,6 @@ public enum SoundEvent { LAVA_POP("lavapop"), WATER("water"), NOTE("note"), - BLAST_SMALL("blast"), - BLAST_SMALL_FAR("blast_far"), - BLAST_LARGE("large_blast"), - BLAST_LARGE_FAR("large_blast_far"), - LAUNCH("launch"), - TWINKLE("twinkle"), - TWINKLE_FAR("twinkle_far"), PLOP("plop"), CUT("cut"), diff --git a/common/src/main/java/common/inventory/Container.java b/common/src/main/java/common/inventory/Container.java index 13ab4d5e..1a8e72ab 100755 --- a/common/src/main/java/common/inventory/Container.java +++ b/common/src/main/java/common/inventory/Container.java @@ -8,6 +8,7 @@ import common.collect.Sets; import common.entity.npc.EntityNPC; import common.item.Item; import common.item.ItemStack; +import common.network.IPlayer; import common.tileentity.TileEntity; import common.util.ExtMath; @@ -26,7 +27,7 @@ public abstract class Container /** The current drag event (0 : start, 1 : add slot : 2 : end) */ private int dragEvent; private final Set dragSlots = Sets.newHashSet(); - protected List crafters = Lists.newArrayList(); + protected List crafters = Lists.newArrayList(); private Set playerList = Sets.newHashSet(); /** @@ -40,7 +41,7 @@ public abstract class Container return slotIn; } - public void onCraftGuiOpened(ICrafting listener) + public void onCraftGuiOpened(IPlayer listener) { if (this.crafters.contains(listener)) { @@ -49,7 +50,7 @@ public abstract class Container else { this.crafters.add(listener); - listener.updateCraftingInventory(this, this.getInventory()); + listener.sendContainer(this, this.getInventory()); this.detectAndSendChanges(); } } @@ -57,7 +58,7 @@ public abstract class Container /** * Remove the given Listener. Method name is for legacy. */ - public void removeCraftingFromCrafters(ICrafting listeners) + public void removeCraftingFromCrafters(IPlayer listeners) { this.crafters.remove(listeners); } @@ -91,7 +92,7 @@ public abstract class Container for (int j = 0; j < this.crafters.size(); ++j) { - ((ICrafting)this.crafters.get(j)).sendSlotContents(this, i, last); + ((IPlayer)this.crafters.get(j)).sendSlot(this, i, last); } } } diff --git a/common/src/main/java/common/inventory/ContainerBrewingStand.java b/common/src/main/java/common/inventory/ContainerBrewingStand.java index 9f5584ef..fada2687 100755 --- a/common/src/main/java/common/inventory/ContainerBrewingStand.java +++ b/common/src/main/java/common/inventory/ContainerBrewingStand.java @@ -3,6 +3,7 @@ package common.inventory; import common.entity.npc.EntityNPC; import common.init.Items; import common.item.ItemStack; +import common.network.IPlayer; public class ContainerBrewingStand extends Container { @@ -34,10 +35,10 @@ public class ContainerBrewingStand extends Container } } - public void onCraftGuiOpened(ICrafting listener) + public void onCraftGuiOpened(IPlayer listener) { super.onCraftGuiOpened(listener); - listener.sendAllWindowProperties(this, this.tileBrewingStand); + listener.sendProperties(this, this.tileBrewingStand); } /** @@ -49,11 +50,11 @@ public class ContainerBrewingStand extends Container for (int i = 0; i < this.crafters.size(); ++i) { - ICrafting icrafting = (ICrafting)this.crafters.get(i); + IPlayer icrafting = (IPlayer)this.crafters.get(i); if (this.brewTime != this.tileBrewingStand.getField(0)) { - icrafting.sendProgressBarUpdate(this, 0, this.tileBrewingStand.getField(0)); + icrafting.sendProperty(this, 0, this.tileBrewingStand.getField(0)); } } diff --git a/common/src/main/java/common/inventory/ContainerEnchantment.java b/common/src/main/java/common/inventory/ContainerEnchantment.java index 28e9766e..b79650b7 100755 --- a/common/src/main/java/common/inventory/ContainerEnchantment.java +++ b/common/src/main/java/common/inventory/ContainerEnchantment.java @@ -10,6 +10,7 @@ import common.init.Blocks; import common.init.Items; import common.item.ItemStack; import common.item.material.ItemEnchantedBook; +import common.network.IPlayer; import common.rng.Random; import common.util.BlockPos; import common.util.Pair; @@ -88,16 +89,16 @@ public class ContainerEnchantment extends Container return data < 0 ? null : new Pair(Enchantment.values()[(data & 0xff) % Enchantment.values().length], data >> 8); } - public void onCraftGuiOpened(ICrafting listener) + public void onCraftGuiOpened(IPlayer listener) { super.onCraftGuiOpened(listener); - listener.sendProgressBarUpdate(this, 0, this.mana[0]); - listener.sendProgressBarUpdate(this, 1, this.mana[1]); - listener.sendProgressBarUpdate(this, 2, this.mana[2]); - listener.sendProgressBarUpdate(this, 3, this.seed & -16); - listener.sendProgressBarUpdate(this, 4, encodeData(this.ench[0])); - listener.sendProgressBarUpdate(this, 5, encodeData(this.ench[1])); - listener.sendProgressBarUpdate(this, 6, encodeData(this.ench[2])); + listener.sendProperty(this, 0, this.mana[0]); + listener.sendProperty(this, 1, this.mana[1]); + listener.sendProperty(this, 2, this.mana[2]); + listener.sendProperty(this, 3, this.seed & -16); + listener.sendProperty(this, 4, encodeData(this.ench[0])); + listener.sendProperty(this, 5, encodeData(this.ench[1])); + listener.sendProperty(this, 6, encodeData(this.ench[2])); } public void detectAndSendChanges() @@ -106,14 +107,14 @@ public class ContainerEnchantment extends Container for (int i = 0; i < this.crafters.size(); ++i) { - ICrafting icrafting = (ICrafting)this.crafters.get(i); - icrafting.sendProgressBarUpdate(this, 0, this.mana[0]); - icrafting.sendProgressBarUpdate(this, 1, this.mana[1]); - icrafting.sendProgressBarUpdate(this, 2, this.mana[2]); - icrafting.sendProgressBarUpdate(this, 3, this.seed & -16); - icrafting.sendProgressBarUpdate(this, 4, encodeData(this.ench[0])); - icrafting.sendProgressBarUpdate(this, 5, encodeData(this.ench[1])); - icrafting.sendProgressBarUpdate(this, 6, encodeData(this.ench[2])); + IPlayer icrafting = (IPlayer)this.crafters.get(i); + icrafting.sendProperty(this, 0, this.mana[0]); + icrafting.sendProperty(this, 1, this.mana[1]); + icrafting.sendProperty(this, 2, this.mana[2]); + icrafting.sendProperty(this, 3, this.seed & -16); + icrafting.sendProperty(this, 4, encodeData(this.ench[0])); + icrafting.sendProperty(this, 5, encodeData(this.ench[1])); + icrafting.sendProperty(this, 6, encodeData(this.ench[2])); } } diff --git a/common/src/main/java/common/inventory/ContainerFurnace.java b/common/src/main/java/common/inventory/ContainerFurnace.java index c7853285..79ffc12f 100755 --- a/common/src/main/java/common/inventory/ContainerFurnace.java +++ b/common/src/main/java/common/inventory/ContainerFurnace.java @@ -3,6 +3,7 @@ package common.inventory; import common.entity.npc.EntityNPC; import common.init.SmeltingRegistry; import common.item.ItemStack; +import common.network.IPlayer; import common.tileentity.TileEntityFurnace; public class ContainerFurnace extends Container @@ -34,10 +35,10 @@ public class ContainerFurnace extends Container } } - public void onCraftGuiOpened(ICrafting listener) + public void onCraftGuiOpened(IPlayer listener) { super.onCraftGuiOpened(listener); - listener.sendAllWindowProperties(this, this.tileFurnace); + listener.sendProperties(this, this.tileFurnace); } /** @@ -49,26 +50,26 @@ public class ContainerFurnace extends Container for (int i = 0; i < this.crafters.size(); ++i) { - ICrafting icrafting = (ICrafting)this.crafters.get(i); + IPlayer icrafting = (IPlayer)this.crafters.get(i); if (this.cookTime != this.tileFurnace.getField(2)) { - icrafting.sendProgressBarUpdate(this, 2, this.tileFurnace.getField(2)); + icrafting.sendProperty(this, 2, this.tileFurnace.getField(2)); } if (this.furnaceBurnTime != this.tileFurnace.getField(0)) { - icrafting.sendProgressBarUpdate(this, 0, this.tileFurnace.getField(0)); + icrafting.sendProperty(this, 0, this.tileFurnace.getField(0)); } if (this.currentItemBurnTime != this.tileFurnace.getField(1)) { - icrafting.sendProgressBarUpdate(this, 1, this.tileFurnace.getField(1)); + icrafting.sendProperty(this, 1, this.tileFurnace.getField(1)); } if (this.totalCookTime != this.tileFurnace.getField(3)) { - icrafting.sendProgressBarUpdate(this, 3, this.tileFurnace.getField(3)); + icrafting.sendProperty(this, 3, this.tileFurnace.getField(3)); } } diff --git a/common/src/main/java/common/inventory/ContainerMerchant.java b/common/src/main/java/common/inventory/ContainerMerchant.java index 603450dc..6d5291fd 100755 --- a/common/src/main/java/common/inventory/ContainerMerchant.java +++ b/common/src/main/java/common/inventory/ContainerMerchant.java @@ -2,6 +2,7 @@ package common.inventory; import common.entity.npc.EntityNPC; import common.item.ItemStack; +import common.network.IPlayer; import common.world.World; public class ContainerMerchant extends Container @@ -46,7 +47,7 @@ public class ContainerMerchant extends Container return this.merchantInventory; } - public void onCraftGuiOpened(ICrafting listener) + public void onCraftGuiOpened(IPlayer listener) { super.onCraftGuiOpened(listener); } diff --git a/common/src/main/java/common/inventory/ContainerRepair.java b/common/src/main/java/common/inventory/ContainerRepair.java index e45c8244..cffccd63 100755 --- a/common/src/main/java/common/inventory/ContainerRepair.java +++ b/common/src/main/java/common/inventory/ContainerRepair.java @@ -9,6 +9,7 @@ import common.enchantment.EnchantmentHelper; import common.entity.npc.EntityNPC; import common.item.ItemStack; import common.item.material.ItemEnchantedBook; +import common.network.IPlayer; import common.util.BlockPos; import common.vars.Vars; import common.world.State; @@ -381,10 +382,10 @@ public class ContainerRepair extends Container } } - public void onCraftGuiOpened(ICrafting listener) + public void onCraftGuiOpened(IPlayer listener) { super.onCraftGuiOpened(listener); - listener.sendProgressBarUpdate(this, 0, this.maximumCost); + listener.sendProperty(this, 0, this.maximumCost); } public void updateProgressBar(int id, int data) diff --git a/common/src/main/java/common/inventory/ContainerTile.java b/common/src/main/java/common/inventory/ContainerTile.java index 884ad068..4b9b3431 100755 --- a/common/src/main/java/common/inventory/ContainerTile.java +++ b/common/src/main/java/common/inventory/ContainerTile.java @@ -2,6 +2,7 @@ package common.inventory; import common.entity.npc.EntityNPC; import common.item.ItemStack; +import common.network.IPlayer; import common.tileentity.TileEntityDevice; import common.tileentity.TileEntityDevice.Status; @@ -96,13 +97,13 @@ public class ContainerTile extends Container this.tileInv.closeInventory(playerIn); } - public void onCraftGuiOpened(ICrafting listener) + public void onCraftGuiOpened(IPlayer listener) { super.onCraftGuiOpened(listener); - listener.sendProgressBarUpdate(this, this.resources.length, this.tile.getTemperature()); - listener.sendProgressBarUpdate(this, this.resources.length + 1, this.tile.getStatus().ordinal()); + listener.sendProperty(this, this.resources.length, this.tile.getTemperature()); + listener.sendProperty(this, this.resources.length + 1, this.tile.getStatus().ordinal()); for(int z = 0; z < this.resources.length; z++) { - listener.sendProgressBarUpdate(this, z, this.tile.getResource(z).getValue()); + listener.sendProperty(this, z, this.tile.getResource(z).getValue()); } } @@ -122,14 +123,14 @@ public class ContainerTile extends Container for (int i = 0; i < this.crafters.size(); ++i) { - ICrafting listener = this.crafters.get(i); + IPlayer listener = this.crafters.get(i); if(this.temperature != this.tile.getTemperature()) - listener.sendProgressBarUpdate(this, this.resources.length, this.tile.getTemperature()); + listener.sendProperty(this, this.resources.length, this.tile.getTemperature()); if(this.status != this.tile.getStatus()) - listener.sendProgressBarUpdate(this, this.resources.length + 1, this.tile.getStatus().ordinal()); + listener.sendProperty(this, this.resources.length + 1, this.tile.getStatus().ordinal()); for(int z = 0; z < this.resources.length; z++) { if(this.resources[z] != this.tile.getResource(z).getValue()) - listener.sendProgressBarUpdate(this, z, this.tile.getResource(z).getValue()); + listener.sendProperty(this, z, this.tile.getResource(z).getValue()); } } diff --git a/common/src/main/java/common/inventory/ICfarsfadtfdwgfdgdvgs.java b/common/src/main/java/common/inventory/ICfarsfadtfdwgfdgdvgs.java new file mode 100755 index 00000000..6e831513 --- /dev/null +++ b/common/src/main/java/common/inventory/ICfarsfadtfdwgfdgdvgs.java @@ -0,0 +1,5 @@ +package common.inventory; + +public interface ICfarsfadtfdwgfdgdvgs +{ +} diff --git a/common/src/main/java/common/inventory/ICrafting.java b/common/src/main/java/common/inventory/ICrafting.java deleted file mode 100755 index ce90d833..00000000 --- a/common/src/main/java/common/inventory/ICrafting.java +++ /dev/null @@ -1,13 +0,0 @@ -package common.inventory; - -import java.util.List; - -import common.item.ItemStack; - -public interface ICrafting -{ - void updateCraftingInventory(Container containerToSend, List itemsList); - void sendSlotContents(Container containerToSend, int slotInd, ItemStack stack); - void sendProgressBarUpdate(Container containerIn, int varToUpdate, int newValue); - void sendAllWindowProperties(Container p_175173_1_, IInventory p_175173_2_); -} diff --git a/common/src/main/java/common/item/Item.java b/common/src/main/java/common/item/Item.java index 0f064b34..96c2f159 100755 --- a/common/src/main/java/common/item/Item.java +++ b/common/src/main/java/common/item/Item.java @@ -160,6 +160,10 @@ public class Item { public float getStrVsBlock(ItemStack stack, Block state) { return 1.0F; } + + public int getUseCooldown(ItemStack itemStackIn, World worldIn, EntityNPC playerIn) { + return 0; + } public ItemStack onItemRightClick(ItemStack itemStackIn, World worldIn, EntityNPC playerIn) { return itemStackIn; diff --git a/common/src/main/java/common/item/tool/ItemBoltgun.java b/common/src/main/java/common/item/tool/ItemBoltgun.java index 9e95e657..4d15cca7 100755 --- a/common/src/main/java/common/item/tool/ItemBoltgun.java +++ b/common/src/main/java/common/item/tool/ItemBoltgun.java @@ -1,6 +1,7 @@ package common.item.tool; import common.init.Items; +import common.rng.Random; public class ItemBoltgun extends ItemGunBase { public ItemBoltgun() { @@ -11,7 +12,7 @@ public class ItemBoltgun extends ItemGunBase { return Items.bolt; } - public float getVelocity() { + public float getVelocity(Random rand) { return 8.0f; } } diff --git a/common/src/main/java/common/item/tool/ItemFirework.java b/common/src/main/java/common/item/tool/ItemFirework.java deleted file mode 100755 index f9b2a9dd..00000000 --- a/common/src/main/java/common/item/tool/ItemFirework.java +++ /dev/null @@ -1,48 +0,0 @@ -package common.item.tool; - -import common.entity.item.EntityFireworks; -import common.entity.npc.EntityNPC; -import common.item.Item; -import common.item.ItemStack; -import common.tileentity.TileEntity; -import common.util.BlockPos; -import common.util.Facing; -import common.util.Vec3; -import common.world.World; - -public class ItemFirework extends Item -{ - public boolean onItemUse(ItemStack stack, EntityNPC playerIn, World worldIn, BlockPos pos, Facing side, float hitX, float hitY, float hitZ) - { - if (!worldIn.client) - { - EntityFireworks entityfireworkrocket = new EntityFireworks(worldIn, (double)((float)pos.getX() + hitX), (double)((float)pos.getY() + hitY), (double)((float)pos.getZ() + hitZ)); - worldIn.spawnEntityInWorld(entityfireworkrocket); - -// if (!playerIn.creative) -// { - stack.decrSize(); -// } - - return true; - } - else - { - return false; - } - } - - public ItemStack dispenseStack(World world, TileEntity source, Vec3 position, BlockPos blockpos, Facing facing, ItemStack stack) { - double d0 = blockpos.getX() + 0.5 + (double)facing.getFrontOffsetX(); - double d1 = (double)blockpos.getY() + 0.2; - double d2 = blockpos.getZ() + 0.5 + (double)facing.getFrontOffsetZ(); - EntityFireworks entityfireworkrocket = new EntityFireworks(world, d0, d1, d2); - world.spawnEntityInWorld(entityfireworkrocket); - stack.split(1); - return stack; - } - - public int getDispenseSoundId() { - return 1002; - } -} diff --git a/common/src/main/java/common/item/tool/ItemGunBase.java b/common/src/main/java/common/item/tool/ItemGunBase.java index 4b921e10..fbd80df5 100755 --- a/common/src/main/java/common/item/tool/ItemGunBase.java +++ b/common/src/main/java/common/item/tool/ItemGunBase.java @@ -4,18 +4,20 @@ import common.enchantment.Enchantment; import common.enchantment.EnchantmentHelper; import common.entity.npc.EntityNPC; import common.entity.projectile.EntityBullet; +import common.entity.types.EntityLiving; import common.init.SoundEvent; import common.item.CheatTab; import common.item.Item; import common.item.ItemAction; import common.item.ItemStack; import common.model.Transforms; +import common.rng.Random; import common.world.World; public abstract class ItemGunBase extends Item { public abstract ItemAmmo getAmmo(); - public abstract float getVelocity(); + public abstract float getVelocity(Random rand); public ItemGunBase(int durability) { @@ -28,15 +30,14 @@ public abstract class ItemGunBase extends Item return ItemAction.AIM; } - public ItemStack onItemRightClick(ItemStack stack, World worldIn, EntityNPC playerIn) + public ItemStack onItemRightClick(ItemStack stack, World world, EntityNPC player) { if(stack.getItemDamage() >= this.getMaxDamage()) return stack; - boolean flag = // playerIn.creative || - EnchantmentHelper.getEnchantmentLevel(Enchantment.INFINITY, stack) > 0; - if (flag || playerIn.inventory.hasItem(this.getAmmo())) + boolean flag = EnchantmentHelper.getEnchantmentLevel(Enchantment.INFINITY, stack) > 0; + if (flag || player.inventory.hasItem(this.getAmmo())) { - EntityBullet bullet = new EntityBullet(worldIn, playerIn, this.getVelocity()); + EntityBullet bullet = this.createBullet(world, player); bullet.setDamage(this.getAmmo().getDamage(stack)); int j = EnchantmentHelper.getEnchantmentLevel(Enchantment.POWER, stack); @@ -46,34 +47,32 @@ public abstract class ItemGunBase extends Item bullet.setDamage(bullet.getDamage() + j); } -// int k = EnchantmentHelper.getEnchantmentLevel(Enchantment.punch.effectId, stack); -// -// if (k > 0) -// { -// entityarrow.setKnockbackStrength(k); -// } - -// if (EnchantmentHelper.getEnchantmentLevel(Enchantment.flame.effectId, stack) > 0) -// { -// entityarrow.setFire(100); -// } - - stack.damage(1, playerIn); - worldIn.playSoundAtEntity(playerIn, SoundEvent.EXPLODE_ALT, 1.0F); + stack.damage(1, player); + world.playSoundAtEntity(player, this.getLaunchSound(), 1.0F); if(!flag) - playerIn.inventory.consumeInventoryItem(this.getAmmo()); + player.inventory.consumeInventoryItem(this.getAmmo()); -// playerIn.triggerAchievement(StatRegistry.objectUseStats[ItemRegistry.getIdFromItem(this)]); - - if (!worldIn.client) + if (!world.client) { - worldIn.spawnEntityInWorld(bullet); + world.spawnEntityInWorld(bullet); } } return stack; } + public SoundEvent getLaunchSound() { + return SoundEvent.EXPLODE_ALT; + } + + protected EntityBullet createBullet(World world, EntityNPC player) { + return new EntityBullet(world, player, this.getVelocity(player.getRNG())); + } + + public EntityBullet createBulletFor(World world, EntityLiving shooter, EntityLiving target) { + return new EntityBullet(world, shooter, target, this.getVelocity(shooter.getRNG()), 0.75f); + } + public int getItemEnchantability() { return 1; diff --git a/common/src/main/java/common/item/tool/ItemLauncherBase.java b/common/src/main/java/common/item/tool/ItemLauncherBase.java new file mode 100644 index 00000000..15ac466c --- /dev/null +++ b/common/src/main/java/common/item/tool/ItemLauncherBase.java @@ -0,0 +1,32 @@ +package common.item.tool; + +import common.entity.npc.EntityNPC; +import common.entity.projectile.EntityBullet; +import common.entity.projectile.EntityMissile; +import common.entity.types.EntityLiving; +import common.init.SoundEvent; +import common.rng.Random; +import common.world.World; + +public abstract class ItemLauncherBase extends ItemGunBase +{ + public abstract int getFuse(Random rand); + public abstract boolean hasFlames(); + + public ItemLauncherBase(int durability) + { + super(durability); + } + + public SoundEvent getLaunchSound() { + return SoundEvent.FIREBALL; + } + + protected EntityBullet createBullet(World world, EntityNPC player) { + return new EntityMissile(world, player, this.getFuse(player.getRNG()), this.hasFlames(), this.getVelocity(player.getRNG())); + } + + public EntityBullet createBulletFor(World world, EntityLiving shooter, EntityLiving target) { + return new EntityMissile(world, shooter, target, this.getFuse(shooter.getRNG()), this.hasFlames(), this.getVelocity(shooter.getRNG()), 0.75f); + } +} diff --git a/common/src/main/java/common/item/tool/ItemRocketLauncher.java b/common/src/main/java/common/item/tool/ItemRocketLauncher.java new file mode 100755 index 00000000..d2bccb40 --- /dev/null +++ b/common/src/main/java/common/item/tool/ItemRocketLauncher.java @@ -0,0 +1,33 @@ +package common.item.tool; + +import common.entity.npc.EntityNPC; +import common.init.Items; +import common.item.ItemStack; +import common.rng.Random; +import common.world.World; + +public class ItemRocketLauncher extends ItemLauncherBase { + public ItemRocketLauncher() { + super(2560); + } + + public int getFuse(Random rand) { + return rand.range(25, 40); + } + + public boolean hasFlames() { + return false; + } + + public ItemAmmo getAmmo() { + return Items.rocket; + } + + public float getVelocity(Random rand) { + return 4.0f; + } + + public int getUseCooldown(ItemStack itemStackIn, World worldIn, EntityNPC playerIn) { + return 20; + } +} diff --git a/common/src/main/java/common/network/IPlayer.java b/common/src/main/java/common/network/IPlayer.java index 8e5a2337..803ce210 100644 --- a/common/src/main/java/common/network/IPlayer.java +++ b/common/src/main/java/common/network/IPlayer.java @@ -95,7 +95,6 @@ public interface IPlayer extends NetHandler { void onEnchantmentCritical(Entity entity); void updateEffectMeta(); void playSound(SoundEvent name, float volume); - void sendContainerToPlayer(Container container); void updateEntity(); void setSelection(boolean primary, BlockPos pos); void setSelectMode(); @@ -106,6 +105,11 @@ public interface IPlayer extends NetHandler { double getManagedZ(); void setManagedPos(double x, double z); + void sendContainer(Container container, List items); + void sendSlot(Container container, int index, ItemStack stack); + void sendProperty(Container container, int variable, int value); + void sendProperties(Container container, IInventory inventory); + void processKeepAlive(CPacketKeepAlive packet); void processMessage(CPacketMessage packet); void processComplete(CPacketComplete packet); diff --git a/server/src/main/java/server/Server.java b/server/src/main/java/server/Server.java index 0ca92ddf..1e81b281 100755 --- a/server/src/main/java/server/Server.java +++ b/server/src/main/java/server/Server.java @@ -1016,7 +1016,7 @@ public final class Server implements IThreadListener, Executor { } public void syncPlayerInventory(EntityNPC player) { - player.connection.sendContainerToPlayer(player.inventoryContainer); + player.connection.sendContainer(player.inventoryContainer, player.inventoryContainer.getInventory()); player.connection.setPlayerHealthUpdated(); player.connection.sendPacket(new SPacketHeldItemChange(player.inventory.currentItem)); } diff --git a/server/src/main/java/server/network/Player.java b/server/src/main/java/server/network/Player.java index c85fa8bc..a7b2978c 100755 --- a/server/src/main/java/server/network/Player.java +++ b/server/src/main/java/server/network/Player.java @@ -36,7 +36,6 @@ import common.inventory.ContainerChest; import common.inventory.ContainerEnchantment; import common.inventory.ContainerEntityInventory; import common.inventory.ContainerMerchant; -import common.inventory.ICrafting; import common.inventory.IInventory; import common.inventory.InventoryPlayer; import common.inventory.Slot; @@ -133,7 +132,7 @@ import server.world.ChunkServer; import server.world.Region; import server.world.WorldServer; -public class Player extends User implements ICrafting, Executor, IPlayer +public class Player extends User implements Executor, IPlayer { private static enum EditAction { SELECT("Auswahlmodus"), COPYPASTE("Kopiermodus"), TRANSFORM("Drehmodus"); @@ -196,6 +195,7 @@ public class Player extends User implements ICrafting, Executor, IPlayer private int lastExperience = -99999999; private int currentWindowId; private int currentFormId; + private int itemUseCooldown; private int pointedEntity; private BlockPos pointedPosition; @@ -235,6 +235,7 @@ public class Player extends User implements ICrafting, Executor, IPlayer this.currentWindowId = 0; this.loadedChunks.clear(); // this.destroyedItemsNetCache.clear(); + this.itemUseCooldown = 0; return this.entity; } @@ -255,6 +256,8 @@ public class Player extends User implements ICrafting, Executor, IPlayer this.respawnPlayer(); } } + if(this.itemUseCooldown > 0) + --this.itemUseCooldown; } public boolean isOnline() { @@ -834,38 +837,33 @@ public class Player extends User implements ICrafting, Executor, IPlayer - public void sendSlotContents(Container containerToSend, int slotInd, ItemStack stack) + public void sendSlot(Container container, int index, ItemStack stack) { - if (!(containerToSend.getSlot(slotInd) instanceof SlotCrafting)) + if (!(container.getSlot(index) instanceof SlotCrafting)) { if (!this.isChangingQuantityOnly) { - this.sendPacket(new SPacketSetSlot(containerToSend.windowId, slotInd, stack)); + this.sendPacket(new SPacketSetSlot(container.windowId, index, stack)); } } } - - public void sendContainerToPlayer(Container container) - { - this.updateCraftingInventory(container, container.getInventory()); - } - public void updateCraftingInventory(Container containerToSend, List itemsList) + public void sendContainer(Container container, List items) { - this.sendPacket(new SPacketWindowItems(containerToSend.windowId, itemsList)); + this.sendPacket(new SPacketWindowItems(container.windowId, items)); this.sendPacket(new SPacketSetSlot(-1, -1, this.entity.inventory.getItemStack())); } - public void sendProgressBarUpdate(Container containerIn, int varToUpdate, int newValue) + public void sendProperty(Container container, int variable, int value) { - this.sendPacket(new SPacketWindowProperty(containerIn.windowId, varToUpdate, newValue)); + this.sendPacket(new SPacketWindowProperty(container.windowId, variable, value)); } - public void sendAllWindowProperties(Container p_175173_1_, IInventory p_175173_2_) + public void sendProperties(Container container, IInventory inventory) { - for (int i = 0; i < p_175173_2_.getFieldCount(); ++i) + for (int z = 0; z < inventory.getFieldCount(); z++) { - this.sendPacket(new SPacketWindowProperty(p_175173_1_.windowId, i, p_175173_2_.getField(i))); + this.sendPacket(new SPacketWindowProperty(container.windowId, z, inventory.getField(z))); } } @@ -1249,29 +1247,19 @@ public class Player extends User implements ICrafting, Executor, IPlayer // } } - public boolean tryUseItem(ItemStack stack) + public void tryUseItem(ItemStack stack) { -// if(this.onPlayerInteract(false, null)) { -// return true; -// } + if(this.itemUseCooldown > 0) + return; int i = stack.getSize(); int j = stack.getItemDamage(); + this.itemUseCooldown = stack.getItem().getUseCooldown(stack, this.entity.worldObj, this.entity); ItemStack itemstack = stack.getItem().onItemRightClick(stack, this.entity.worldObj, this.entity); if (itemstack != stack || itemstack != null && (itemstack.getSize() != i || itemstack.getMaxItemUseDuration() > 0 || itemstack.getItemDamage() != j)) { this.entity.inventory.mainInventory[this.entity.inventory.currentItem] = itemstack; -// if (this.creative) -// { -// itemstack.stackSize = i; -// -// if (itemstack.isItemStackDamageable()) -// { -// itemstack.setItemDamage(j); -// } -// } - if (itemstack.isEmpty()) { this.entity.inventory.mainInventory[this.entity.inventory.currentItem] = null; @@ -1279,14 +1267,8 @@ public class Player extends User implements ICrafting, Executor, IPlayer if (!this.entity.isUsingItem()) { - this.sendContainerToPlayer(this.entity.inventoryContainer); + this.sendContainer(this.entity.inventoryContainer, this.entity.inventoryContainer.getInventory()); } - - return true; - } - else - { - return false; } } @@ -2637,8 +2619,11 @@ public class Player extends User implements ICrafting, Executor, IPlayer break; case SET_ITEMSLOT: - if(packetIn.getAuxData() >= 0 && packetIn.getAuxData() < InventoryPlayer.getHotbarSize()) + if(packetIn.getAuxData() >= 0 && packetIn.getAuxData() < InventoryPlayer.getHotbarSize()) { + if(packetIn.getAuxData() != this.entity.inventory.currentItem) + this.itemUseCooldown = 0; this.entity.inventory.currentItem = packetIn.getAuxData(); + } // else // Log.warn(this.user + " versuchte, einen ungültigen Slot zu wählen"); break; @@ -2886,7 +2871,7 @@ public class Player extends User implements ICrafting, Executor, IPlayer list1.add(((Slot)this.entity.openContainer.inventorySlots.get(j)).getStack()); } - this.updateCraftingInventory(this.entity.openContainer, list1); + this.sendContainer(this.entity.openContainer, list1); } // } }