diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AnimalGrowthAccelerator.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AnimalGrowthAccelerator.java index 48640e0ab..605777e2c 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AnimalGrowthAccelerator.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AnimalGrowthAccelerator.java @@ -1,5 +1,14 @@ package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines; +import org.bukkit.Material; +import org.bukkit.Particle; +import org.bukkit.block.Block; +import org.bukkit.entity.Ageable; +import org.bukkit.entity.Entity; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; + import me.mrCookieSlime.CSCoreLibPlugin.CSCoreLib; import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config; import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.InvUtils; @@ -17,15 +26,7 @@ import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock; import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu; import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset; import me.mrCookieSlime.Slimefun.api.item_transport.ItemTransportFlow; - -import org.bukkit.Material; -import org.bukkit.Particle; -import org.bukkit.block.Block; -import org.bukkit.entity.Ageable; -import org.bukkit.entity.Entity; -import org.bukkit.entity.LivingEntity; -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; +import me.mrCookieSlime.Slimefun.holograms.AnimalGrowthAcceleratorHologram; public class AnimalGrowthAccelerator extends SlimefunItem { @@ -66,7 +67,7 @@ public class AnimalGrowthAccelerator extends SlimefunItem { @Override public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { - me.mrCookieSlime.Slimefun.holograms.AnimalGrowthAccelerator.getArmorStand(b).remove(); + AnimalGrowthAcceleratorHologram.remove(b); BlockMenu inv = BlockStorage.getInventory(b); if (inv != null) { for (int slot : getInputSlots()) { @@ -124,7 +125,7 @@ public class AnimalGrowthAccelerator extends SlimefunItem { } protected void tick(Block b) throws Exception { - for (Entity n : me.mrCookieSlime.Slimefun.holograms.AnimalGrowthAccelerator.getArmorStand(b).getNearbyEntities(3D, 3D, 3D)) { + for (Entity n : AnimalGrowthAcceleratorHologram.getArmorStand(b, true).getNearbyEntities(3D, 3D, 3D)) { if (n instanceof Ageable && !((Ageable) n).isAdult()) { for (int slot: getInputSlots()) { if (SlimefunManager.isItemSimiliar(BlockStorage.getInventory(b).getItemInSlot(slot), SlimefunItems.ORGANIC_FOOD, false)) { diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AutoBreeder.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AutoBreeder.java index 5a1d4a01a..c0d8934c9 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AutoBreeder.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AutoBreeder.java @@ -26,6 +26,7 @@ import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock; import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu; import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset; import me.mrCookieSlime.Slimefun.api.item_transport.ItemTransportFlow; +import me.mrCookieSlime.Slimefun.holograms.AutoBreederHologram; public class AutoBreeder extends SlimefunItem { @@ -65,7 +66,7 @@ public class AutoBreeder extends SlimefunItem { @Override public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { - me.mrCookieSlime.Slimefun.holograms.AutoBreeder.getArmorStand(b).remove(); + AutoBreederHologram.remove(b); BlockMenu inv = BlockStorage.getInventory(b); if (inv != null) { for (int slot : getInputSlots()) { @@ -123,7 +124,7 @@ public class AutoBreeder extends SlimefunItem { } protected void tick(Block b) throws Exception { - for (Entity n : me.mrCookieSlime.Slimefun.holograms.AutoBreeder.getArmorStand(b).getNearbyEntities(4D, 2D, 4D)) { + for (Entity n : AutoBreederHologram.getArmorStand(b, true).getNearbyEntities(4D, 2D, 4D)) { if (Animals.isFeedable(n)) { for (int slot : getInputSlots()) { if (SlimefunManager.isItemSimiliar(BlockStorage.getInventory(b).getItemInSlot(slot), SlimefunItems.ORGANIC_FOOD, false)) { diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/HologramProjector.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/HologramProjector.java new file mode 100644 index 000000000..6a59d470a --- /dev/null +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/HologramProjector.java @@ -0,0 +1,60 @@ +package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines; + +import org.bukkit.block.Block; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; + +import me.mrCookieSlime.CSCoreLibPlugin.events.ItemUseEvent; +import me.mrCookieSlime.Slimefun.Lists.RecipeType; +import me.mrCookieSlime.Slimefun.Objects.Category; +import me.mrCookieSlime.Slimefun.Objects.SlimefunBlockHandler; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason; +import me.mrCookieSlime.Slimefun.Objects.handlers.ItemInteractionHandler; +import me.mrCookieSlime.Slimefun.api.BlockStorage; +import me.mrCookieSlime.Slimefun.holograms.HologramProjectorHologram; + +public class HologramProjector extends SlimefunItem { + + public HologramProjector(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe, ItemStack recipeOutput) { + super(category, item, id, recipeType, recipe, recipeOutput); + + SlimefunItem.registerBlockHandler(getID(), new SlimefunBlockHandler() { + + @Override + public void onPlace(Player p, Block b, SlimefunItem item) { + BlockStorage.addBlockInfo(b, "text", "&bHi, I am a Hologram, &3configure me using the Projector"); + BlockStorage.addBlockInfo(b, "offset", "-0.5"); + BlockStorage.addBlockInfo(b, "owner", p.getUniqueId().toString()); + + HologramProjectorHologram.getArmorStand(b, true); + } + + @Override + public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { + HologramProjectorHologram.remove(b); + return true; + } + }); + } + + @Override + public void register(boolean slimefun) { + super.register(slimefun, new ItemInteractionHandler() { + + @Override + public boolean onRightClick(ItemUseEvent e, Player p, ItemStack stack) { + if (e.getClickedBlock() == null) return false; + SlimefunItem item = BlockStorage.check(e.getClickedBlock()); + if (item == null || !item.getID().equals(getID())) return false; + e.setCancelled(true); + + if (BlockStorage.getLocationInfo(e.getClickedBlock().getLocation(), "owner").equals(p.getUniqueId().toString())) { + HologramProjectorHologram.openEditor(p, e.getClickedBlock()); + } + + return true; + } + }); + } +} diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/InfusedHopper.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/InfusedHopper.java new file mode 100644 index 000000000..1cd226e12 --- /dev/null +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/InfusedHopper.java @@ -0,0 +1,80 @@ +package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines; + +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.block.Block; +import org.bukkit.entity.ArmorStand; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Item; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.util.Vector; + +import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config; +import me.mrCookieSlime.Slimefun.Lists.RecipeType; +import me.mrCookieSlime.Slimefun.Objects.Category; +import me.mrCookieSlime.Slimefun.Objects.SlimefunBlockHandler; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason; +import me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker; +import me.mrCookieSlime.Slimefun.api.BlockStorage; +import me.mrCookieSlime.Slimefun.holograms.InfusedHopperHologram; + +public class InfusedHopper extends SlimefunItem { + + public InfusedHopper(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe) { + super(category, item, id, recipeType, recipe); + + SlimefunItem.registerBlockHandler(getID(), new SlimefunBlockHandler() { + + @Override + public void onPlace(Player p, Block b, SlimefunItem item) { + InfusedHopperHologram.getArmorStand(b, true); + } + + @Override + public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { + InfusedHopperHologram.remove(b); + return true; + } + }); + } + + @Override + public void register(boolean slimefun) { + super.register(slimefun, new BlockTicker() { + + @Override + public void uniqueTick() { + + } + + @Override + public void tick(Block b, SlimefunItem item, Config data) { + if (b.getType() != Material.HOPPER) { + // we're no longer a hopper, we were probably destroyed. skipping this tick. + BlockStorage.clearBlockInfo(b); + return; + } + + ArmorStand hologram = InfusedHopperHologram.getArmorStand(b, true); + boolean sound = false; + + for (Entity n: hologram.getNearbyEntities(3.5D, 3.5D, 3.5D)) { + if (n instanceof Item && !n.hasMetadata("no_pickup") && n.getLocation().distance(hologram.getLocation()) > 0.4D) { + n.setVelocity(new Vector(0, 0.1, 0)); + n.teleport(hologram); + sound = true; + } + } + + if (sound) b.getWorld().playSound(b.getLocation(), Sound.ENTITY_ENDERMAN_TELEPORT, 5F, 2F); + } + + @Override + public boolean isSynchronized() { + return true; + } + }); + } +} diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/XPCollector.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/XPCollector.java index 9c198266e..6e0290676 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/XPCollector.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/XPCollector.java @@ -25,6 +25,7 @@ import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock; import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu; import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset; import me.mrCookieSlime.Slimefun.api.item_transport.ItemTransportFlow; +import me.mrCookieSlime.Slimefun.holograms.XPCollectorHologram; public class XPCollector extends SlimefunItem { @@ -65,7 +66,7 @@ public class XPCollector extends SlimefunItem { @Override public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { - me.mrCookieSlime.Slimefun.holograms.XPCollector.getArmorStand(b).remove(); + XPCollectorHologram.remove(b); BlockMenu inv = BlockStorage.getInventory(b); if (inv != null) { for (int slot: getOutputSlots()) { @@ -148,7 +149,7 @@ public class XPCollector extends SlimefunItem { } protected void tick(Block b) throws Exception { - Iterator iterator = me.mrCookieSlime.Slimefun.holograms.XPCollector.getArmorStand(b).getNearbyEntities(4D, 4D, 4D).iterator(); + Iterator iterator = XPCollectorHologram.getArmorStand(b, true).getNearbyEntities(4D, 4D, 4D).iterator(); while (iterator.hasNext()) { Entity n = iterator.next(); if (n instanceof ExperienceOrb) { diff --git a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java index 7a74af178..b1cf9e257 100644 --- a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java +++ b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java @@ -8,8 +8,6 @@ import java.util.Random; import java.util.Set; import java.util.UUID; -import io.github.thebusybiscuit.cscorelib2.materials.MaterialTools; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.*; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Effect; @@ -50,6 +48,7 @@ import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; import org.bukkit.util.Vector; +import io.github.thebusybiscuit.cscorelib2.materials.MaterialTools; import me.mrCookieSlime.CSCoreLibPlugin.CSCoreLib; import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config; import me.mrCookieSlime.CSCoreLibPlugin.compatibility.MaterialHelper; @@ -104,6 +103,43 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AGenerator; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AReactor; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineFuel; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.Teleporter; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.AdvancedCargoOutputNode; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.AnimalGrowthAccelerator; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.AutoAnvil; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.AutoBreeder; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.AutoDisenchanter; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.AutoDrier; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.AutoEnchanter; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.AutomatedCraftingChamber; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.CarbonPress; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.CargoInputNode; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.CargoOutputNode; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.ChargingBench; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.CropGrowthAccelerator; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.ElectricDustWasher; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.ElectricFurnace; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.ElectricGoldPan; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.ElectricIngotFactory; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.ElectricSmeltery; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.ElectrifiedCrucible; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.EnhancedCraftingTable; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.FluidPump; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.FoodComposter; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.FoodFabricator; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.Freezer; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.HeatedPressureChamber; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.HologramProjector; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.InfusedHopper; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.MagicWorkbench; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.NetherDrill; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.OilPump; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.OreWasher; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.ReactorAccessPort; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.Refinery; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.Smeltery; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.TrashCan; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.WitherAssembler; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.XPCollector; import me.mrCookieSlime.Slimefun.Objects.handlers.AutonomousMachineHandler; import me.mrCookieSlime.Slimefun.Objects.handlers.BlockBreakHandler; import me.mrCookieSlime.Slimefun.Objects.handlers.BlockPlaceHandler; @@ -123,8 +159,6 @@ import me.mrCookieSlime.Slimefun.api.energy.EnergyTicker; import me.mrCookieSlime.Slimefun.api.item_transport.CargoNet; import me.mrCookieSlime.Slimefun.holograms.CargoHologram; import me.mrCookieSlime.Slimefun.holograms.EnergyHologram; -import me.mrCookieSlime.Slimefun.holograms.InfusedHopper; -import me.mrCookieSlime.Slimefun.holograms.Projector; import me.mrCookieSlime.Slimefun.holograms.ReactorHologram; import me.mrCookieSlime.Slimefun.listeners.AncientAltarListener; import me.mrCookieSlime.Slimefun.utils.Utilities; @@ -828,42 +862,9 @@ public final class SlimefunSetup { new ItemStack[] {SlimefunItems.CLOTH, SlimefunItems.CLOTH, SlimefunItems.CLOTH, SlimefunItems.CHAIN, null, SlimefunItems.CHAIN, null, null, null}) .register(true); - new SlimefunItem(Categories.TECH, SlimefunItems.HOLOGRAM_PROJECTOR, "HOLOGRAM_PROJECTOR", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, SlimefunItems.POWER_CRYSTAL, null, SlimefunItems.ALUMINUM_BRASS_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.ALUMINUM_BRASS_INGOT, null, SlimefunItems.ALUMINUM_BRASS_INGOT, null}, new CustomItem(SlimefunItems.HOLOGRAM_PROJECTOR, 3)) - .register(true, new ItemInteractionHandler() { - - @Override - public boolean onRightClick(ItemUseEvent e, Player p, ItemStack stack) { - if (e.getClickedBlock() == null) return false; - SlimefunItem item = BlockStorage.check(e.getClickedBlock()); - if (item == null || !item.getID().equals("HOLOGRAM_PROJECTOR")) return false; - e.setCancelled(true); - - if (BlockStorage.getLocationInfo(e.getClickedBlock().getLocation(), "owner").equals(p.getUniqueId().toString())) { - Projector.openEditor(p, e.getClickedBlock()); - } - - return true; - } - }); - - SlimefunItem.registerBlockHandler("HOLOGRAM_PROJECTOR", new SlimefunBlockHandler() { - - @Override - public void onPlace(Player p, Block b, SlimefunItem item) { - BlockStorage.addBlockInfo(b, "text", "&bHi, I am a Hologram, &3configure me using the Projector"); - BlockStorage.addBlockInfo(b, "offset", "-0.5"); - BlockStorage.addBlockInfo(b, "owner", p.getUniqueId().toString()); - - Projector.getArmorStand(b); - } - - @Override - public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { - Projector.getArmorStand(b).remove(); - return true; - } - }); + new HologramProjector(Categories.TECH, SlimefunItems.HOLOGRAM_PROJECTOR, "HOLOGRAM_PROJECTOR", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {null, SlimefunItems.POWER_CRYSTAL, null, SlimefunItems.ALUMINUM_BRASS_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.ALUMINUM_BRASS_INGOT, null, SlimefunItems.ALUMINUM_BRASS_INGOT, null}, new CustomItem(SlimefunItems.HOLOGRAM_PROJECTOR, 3)) + .register(true); new SlimefunItem(Categories.MISC, SlimefunItems.CHAIN, "CHAIN", RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {null, null, SlimefunItems.STEEL_INGOT, null, SlimefunItems.STEEL_INGOT, null, SlimefunItems.STEEL_INGOT, null, null}, new CustomItem(SlimefunItems.CHAIN, 8)) @@ -4149,60 +4150,9 @@ public final class SlimefunSetup { } }); - new SlimefunItem(Categories.MAGIC, SlimefunItems.INFUSED_HOPPER, "INFUSED_HOPPER", RecipeType.ANCIENT_ALTAR, + new InfusedHopper(Categories.MAGIC, SlimefunItems.INFUSED_HOPPER, "INFUSED_HOPPER", RecipeType.ANCIENT_ALTAR, new ItemStack[] {new ItemStack(Material.OBSIDIAN), SlimefunItems.RUNE_EARTH, new ItemStack(Material.HOPPER), SlimefunItems.RUNE_ENDER, SlimefunItems.INFUSED_MAGNET, SlimefunItems.RUNE_ENDER, new ItemStack(Material.HOPPER), SlimefunItems.RUNE_EARTH, new ItemStack(Material.OBSIDIAN)}) - .register(true, new BlockTicker() { - - @Override - public void uniqueTick() { - - } - - @Override - public void tick(Block b, SlimefunItem item, Config data) { - if (b.getType() != Material.HOPPER) { - // we're no longer a hopper, we were probably destroyed. skipping this tick. - BlockStorage.clearBlockInfo(b); - return; - } - - ArmorStand hologram = InfusedHopper.getArmorStand(b, true); - boolean sound = false; - - for (Entity n: hologram.getNearbyEntities(3.5D, 3.5D, 3.5D)) { - if (n instanceof Item && !n.hasMetadata("no_pickup") && n.getLocation().distance(hologram.getLocation()) > 0.4D) { - n.setVelocity(new Vector(0, 0.1, 0)); - n.teleport(hologram); - sound = true; - } - } - - if (sound) b.getWorld().playSound(b.getLocation(), Sound.ENTITY_ENDERMAN_TELEPORT, 5F, 2F); - } - - @Override - public boolean isSynchronized() { - return true; - } - }); - - SlimefunItem.registerBlockHandler("INFUSED_HOPPER", new SlimefunBlockHandler() { - - @Override - public void onPlace(Player p, Block b, SlimefunItem item) { - InfusedHopper.getArmorStand(b, true); - } - - @Override - public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { - final ArmorStand hologram = InfusedHopper.getArmorStand(b, false); - - if (hologram != null) { - hologram.remove(); - } - return true; - } - }); + .register(true); new SlimefunItem(Categories.RESOURCES, SlimefunItems.BLISTERING_INGOT, "BLISTERING_INGOT", RecipeType.HEATED_PRESSURE_CHAMBER, new ItemStack[] {SlimefunItems.GOLD_24K, SlimefunItems.URANIUM, null, null, null, null, null, null, null}) @@ -4599,7 +4549,7 @@ public final class SlimefunSetup { @Override public void extraTick(final Location l) { Bukkit.getScheduler().runTaskLater(SlimefunStartup.instance, () -> { - for (Entity entity : ReactorHologram.getArmorStand(l).getNearbyEntities(5, 5, 5)) { + for (Entity entity : ReactorHologram.getArmorStand(l, true).getNearbyEntities(5, 5, 5)) { if (entity instanceof LivingEntity) { ((LivingEntity) entity).addPotionEffect(new PotionEffect(PotionEffectType.WITHER, 60, 1)); } diff --git a/src/me/mrCookieSlime/Slimefun/androids/ProgrammableAndroid.java b/src/me/mrCookieSlime/Slimefun/androids/ProgrammableAndroid.java index d20f3e504..3082ce1d3 100644 --- a/src/me/mrCookieSlime/Slimefun/androids/ProgrammableAndroid.java +++ b/src/me/mrCookieSlime/Slimefun/androids/ProgrammableAndroid.java @@ -63,7 +63,7 @@ import me.mrCookieSlime.Slimefun.api.BlockStorage; import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu; import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset; import me.mrCookieSlime.Slimefun.api.item_transport.ItemTransportFlow; -import me.mrCookieSlime.Slimefun.holograms.AndroidStatusHologram; +import me.mrCookieSlime.Slimefun.holograms.AndroidHologram; public abstract class ProgrammableAndroid extends SlimefunItem { @@ -230,7 +230,7 @@ public abstract class ProgrammableAndroid extends SlimefunItem { } } } - AndroidStatusHologram.remove(b); + AndroidHologram.remove(b); } return allow; @@ -432,7 +432,7 @@ public abstract class ProgrammableAndroid extends SlimefunItem { break; case ATTACK_MOBS_ANIMALS: entities: - for (Entity n: AndroidStatusHologram.getNearbyEntities(b, 4D + getTier())) { + for (Entity n: AndroidHologram.getNearbyEntities(b, 4D + getTier())) { switch (BlockFace.valueOf(BlockStorage.getLocationInfo(b.getLocation(), "rotation"))) { case NORTH: { if (n instanceof LivingEntity && !(n instanceof ArmorStand) && !(n instanceof Player) && n.getLocation().getZ() < b.getZ()) { @@ -481,7 +481,7 @@ public abstract class ProgrammableAndroid extends SlimefunItem { break; case ATTACK_MOBS: entities: - for (Entity n: AndroidStatusHologram.getNearbyEntities(b, 4D + getTier())) { + for (Entity n: AndroidHologram.getNearbyEntities(b, 4D + getTier())) { if (n instanceof Animals) continue; switch (BlockFace.valueOf(BlockStorage.getLocationInfo(b.getLocation(), "rotation"))) { case NORTH: { @@ -531,7 +531,7 @@ public abstract class ProgrammableAndroid extends SlimefunItem { break; case ATTACK_ANIMALS: entities: - for (Entity n: AndroidStatusHologram.getNearbyEntities(b, 4D + getTier())) { + for (Entity n: AndroidHologram.getNearbyEntities(b, 4D + getTier())) { if (n instanceof Monster) continue; switch (BlockFace.valueOf(BlockStorage.getLocationInfo(b.getLocation(), "rotation"))) { case NORTH: { @@ -581,7 +581,7 @@ public abstract class ProgrammableAndroid extends SlimefunItem { break; case ATTACK_ANIMALS_ADULT: entities: - for (Entity n: AndroidStatusHologram.getNearbyEntities(b, 4D + getTier())) { + for (Entity n: AndroidHologram.getNearbyEntities(b, 4D + getTier())) { if (n instanceof Monster) continue; if (n instanceof org.bukkit.entity.Ageable && !((org.bukkit.entity.Ageable) n).isAdult()) continue; switch (BlockFace.valueOf(BlockStorage.getLocationInfo(b.getLocation(), "rotation"))) { diff --git a/src/me/mrCookieSlime/Slimefun/holograms/AndroidStatusHologram.java b/src/me/mrCookieSlime/Slimefun/holograms/AndroidHologram.java similarity index 73% rename from src/me/mrCookieSlime/Slimefun/holograms/AndroidStatusHologram.java rename to src/me/mrCookieSlime/Slimefun/holograms/AndroidHologram.java index a4404da96..1b9ce0caa 100644 --- a/src/me/mrCookieSlime/Slimefun/holograms/AndroidStatusHologram.java +++ b/src/me/mrCookieSlime/Slimefun/holograms/AndroidHologram.java @@ -9,37 +9,41 @@ import org.bukkit.entity.Entity; import me.mrCookieSlime.CSCoreLibPlugin.general.World.ArmorStandFactory; -public class AndroidStatusHologram { +public final class AndroidHologram { + + private AndroidHologram() {} private static final double offset = 1.2; public static void update(final Block b, final String name) { - ArmorStand hologram = getArmorStand(b); + ArmorStand hologram = getArmorStand(b, true); hologram.setCustomName(name); } public static void remove(final Block b) { - ArmorStand hologram = getArmorStand(b); - hologram.remove(); + ArmorStand hologram = getArmorStand(b, false); + if (hologram != null) hologram.remove(); } public static List getNearbyEntities(final Block b, double radius) { - ArmorStand hologram = getArmorStand(b); + ArmorStand hologram = getArmorStand(b, true); return hologram.getNearbyEntities(radius, 1D, radius); } public static List getNearbyEntities(final Block b, double radius, double y) { - ArmorStand hologram = getArmorStand(b); + ArmorStand hologram = getArmorStand(b, true); return hologram.getNearbyEntities(radius, y, radius); } - private static ArmorStand getArmorStand(Block b) { + private static ArmorStand getArmorStand(Block b, boolean createIfNoneExists) { Location l = new Location(b.getWorld(), b.getX() + 0.5, b.getY() + offset, b.getZ() + 0.5); for (Entity n: l.getChunk().getEntities()) { if (n instanceof ArmorStand && n.getCustomName() == null && l.distanceSquared(n.getLocation()) < 0.4D) return (ArmorStand) n; } + if (!createIfNoneExists) return null; + ArmorStand hologram = ArmorStandFactory.createHidden(l); hologram.setCustomNameVisible(false); hologram.setCustomName(null); diff --git a/src/me/mrCookieSlime/Slimefun/holograms/AnimalGrowthAccelerator.java b/src/me/mrCookieSlime/Slimefun/holograms/AnimalGrowthAcceleratorHologram.java similarity index 67% rename from src/me/mrCookieSlime/Slimefun/holograms/AnimalGrowthAccelerator.java rename to src/me/mrCookieSlime/Slimefun/holograms/AnimalGrowthAcceleratorHologram.java index 020662d97..eae0f3be4 100644 --- a/src/me/mrCookieSlime/Slimefun/holograms/AnimalGrowthAccelerator.java +++ b/src/me/mrCookieSlime/Slimefun/holograms/AnimalGrowthAcceleratorHologram.java @@ -7,21 +7,30 @@ import org.bukkit.entity.Entity; import me.mrCookieSlime.CSCoreLibPlugin.general.World.ArmorStandFactory; -public class AnimalGrowthAccelerator { +public final class AnimalGrowthAcceleratorHologram { + + private AnimalGrowthAcceleratorHologram() {} private static final double offset = 1.2; - public static ArmorStand getArmorStand(Block hopper) { + public static ArmorStand getArmorStand(Block hopper, boolean createIfNoneExists) { Location l = new Location(hopper.getWorld(), hopper.getX() + 0.5, hopper.getY() + offset, hopper.getZ() + 0.5); for (Entity n: l.getChunk().getEntities()) { if (n instanceof ArmorStand && n.getCustomName() == null && l.distanceSquared(n.getLocation()) < 0.4D) return (ArmorStand) n; } + if (!createIfNoneExists) return null; + ArmorStand hologram = ArmorStandFactory.createHidden(l); hologram.setCustomNameVisible(false); hologram.setCustomName(null); return hologram; } + public static void remove(Block b) { + ArmorStand hologram = getArmorStand(b, false); + if (hologram != null) hologram.remove(); + } + } diff --git a/src/me/mrCookieSlime/Slimefun/holograms/AutoBreeder.java b/src/me/mrCookieSlime/Slimefun/holograms/AutoBreederHologram.java similarity index 67% rename from src/me/mrCookieSlime/Slimefun/holograms/AutoBreeder.java rename to src/me/mrCookieSlime/Slimefun/holograms/AutoBreederHologram.java index 925651768..fdbc70afd 100644 --- a/src/me/mrCookieSlime/Slimefun/holograms/AutoBreeder.java +++ b/src/me/mrCookieSlime/Slimefun/holograms/AutoBreederHologram.java @@ -7,19 +7,28 @@ import org.bukkit.entity.Entity; import me.mrCookieSlime.CSCoreLibPlugin.general.World.ArmorStandFactory; -public class AutoBreeder { +public final class AutoBreederHologram { - public static ArmorStand getArmorStand(Block hopper) { + private AutoBreederHologram() {} + + public static ArmorStand getArmorStand(Block hopper, boolean createIfNonExists) { Location l = new Location(hopper.getWorld(), hopper.getX() + 0.5, hopper.getY(), hopper.getZ() + 0.5); for (Entity n: l.getChunk().getEntities()) { if (n instanceof ArmorStand && n.getCustomName() == null && l.distanceSquared(n.getLocation()) < 0.4D) return (ArmorStand) n; } + if (!createIfNonExists) return null; + ArmorStand hologram = ArmorStandFactory.createHidden(l); hologram.setCustomNameVisible(false); hologram.setCustomName(null); return hologram; } + public static void remove(Block b) { + ArmorStand hologram = getArmorStand(b, false); + if (hologram != null) hologram.remove(); + } + } diff --git a/src/me/mrCookieSlime/Slimefun/holograms/CargoHologram.java b/src/me/mrCookieSlime/Slimefun/holograms/CargoHologram.java index 358011bcb..6c02b84c8 100644 --- a/src/me/mrCookieSlime/Slimefun/holograms/CargoHologram.java +++ b/src/me/mrCookieSlime/Slimefun/holograms/CargoHologram.java @@ -10,27 +10,31 @@ import org.bukkit.entity.Entity; import me.mrCookieSlime.CSCoreLibPlugin.general.World.ArmorStandFactory; import me.mrCookieSlime.Slimefun.SlimefunStartup; -public class CargoHologram { +public final class CargoHologram { + + private CargoHologram() {} public static void update(final Block b, final String name) { Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, () -> { - ArmorStand hologram = getArmorStand(b); + ArmorStand hologram = getArmorStand(b, true); hologram.setCustomName(ChatColor.translateAlternateColorCodes('&', name)); }); } public static void remove(Block b) { - ArmorStand hologram = getArmorStand(b); - hologram.remove(); + ArmorStand hologram = getArmorStand(b, false); + if (hologram != null) hologram.remove(); } - private static ArmorStand getArmorStand(Block b) { + private static ArmorStand getArmorStand(Block b, boolean createIfNonExists) { Location l = new Location(b.getWorld(), b.getX() + 0.5, b.getY() + 0.7F, b.getZ() + 0.5); for (Entity n : l.getChunk().getEntities()) { if (n instanceof ArmorStand && n.getCustomName() != null && l.distanceSquared(n.getLocation()) < 0.4D) return (ArmorStand) n; } + if (!createIfNonExists) return null; + ArmorStand hologram = ArmorStandFactory.createHidden(l); return hologram; } diff --git a/src/me/mrCookieSlime/Slimefun/holograms/EnergyHologram.java b/src/me/mrCookieSlime/Slimefun/holograms/EnergyHologram.java index b196a6fe0..784233265 100644 --- a/src/me/mrCookieSlime/Slimefun/holograms/EnergyHologram.java +++ b/src/me/mrCookieSlime/Slimefun/holograms/EnergyHologram.java @@ -11,7 +11,9 @@ import me.mrCookieSlime.CSCoreLibPlugin.general.Math.DoubleHandler; import me.mrCookieSlime.CSCoreLibPlugin.general.World.ArmorStandFactory; import me.mrCookieSlime.Slimefun.SlimefunStartup; -public class EnergyHologram { +public final class EnergyHologram { + + private EnergyHologram() {} public static void update(Block b, double supply, double demand) { update(b, demand > supply ? ("&4&l- &c" + DoubleHandler.getFancyDouble(Math.abs(supply - demand)) + " &7J &e\u26A1"): ("&2&l+ &a" + DoubleHandler.getFancyDouble(supply - demand) + " &7J &e\u26A1")); @@ -19,25 +21,27 @@ public class EnergyHologram { public static void update(final Block b, final String name) { Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, () -> { - ArmorStand hologram = getArmorStand(b); + ArmorStand hologram = getArmorStand(b, true); hologram.setCustomName(ChatColor.translateAlternateColorCodes('&', name)); }); } public static void remove(final Block b) { Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, () -> { - ArmorStand hologram = getArmorStand(b); - hologram.remove(); + ArmorStand hologram = getArmorStand(b, false); + if (hologram != null) hologram.remove(); }); } - private static ArmorStand getArmorStand(Block b) { + private static ArmorStand getArmorStand(Block b, boolean createIfNonExists) { Location l = new Location(b.getWorld(), b.getX() + 0.5, b.getY() + 0.7F, b.getZ() + 0.5); for (Entity n : l.getChunk().getEntities()) { if (n instanceof ArmorStand && n.getCustomName() != null && l.distanceSquared(n.getLocation()) < 0.4D) return (ArmorStand) n; } + if (!createIfNonExists) return null; + ArmorStand hologram = ArmorStandFactory.createHidden(l); return hologram; } diff --git a/src/me/mrCookieSlime/Slimefun/holograms/Projector.java b/src/me/mrCookieSlime/Slimefun/holograms/HologramProjectorHologram.java similarity index 87% rename from src/me/mrCookieSlime/Slimefun/holograms/Projector.java rename to src/me/mrCookieSlime/Slimefun/holograms/HologramProjectorHologram.java index 1edaf849b..24a73f8e1 100644 --- a/src/me/mrCookieSlime/Slimefun/holograms/Projector.java +++ b/src/me/mrCookieSlime/Slimefun/holograms/HologramProjectorHologram.java @@ -17,9 +17,11 @@ import me.mrCookieSlime.CSCoreLibPlugin.general.World.ArmorStandFactory; import me.mrCookieSlime.Slimefun.Setup.Messages; import me.mrCookieSlime.Slimefun.api.BlockStorage; -public class Projector { +public final class HologramProjectorHologram { - public static ArmorStand getArmorStand(Block projector) { + private HologramProjectorHologram() {} + + public static ArmorStand getArmorStand(Block projector, boolean createIfNoneExists) { String nametag = BlockStorage.getLocationInfo(projector.getLocation(), "text"); double offset = Double.parseDouble(BlockStorage.getLocationInfo(projector.getLocation(), "offset")); Location l = new Location(projector.getWorld(), projector.getX() + 0.5, projector.getY() + offset, projector.getZ() + 0.5); @@ -32,6 +34,11 @@ public class Projector { hologram.setCustomName(nametag); return hologram; } + + public static void remove(Block b) { + ArmorStand hologram = getArmorStand(b, false); + if (hologram != null) hologram.remove(); + } public static void openEditor(Player p, final Block projector) { ChestMenu menu = new ChestMenu("Hologram Settings"); @@ -41,7 +48,7 @@ public class Projector { pl.closeInventory(); Messages.local.sendTranslation(pl, "machines.HOLOGRAM_PROJECTOR.enter-text", true); MenuHelper.awaitChatInput(pl, (player, message) -> { - ArmorStand hologram = getArmorStand(projector); + ArmorStand hologram = getArmorStand(projector, true); hologram.setCustomName(ChatColor.translateAlternateColorCodes('&', message)); BlockStorage.addBlockInfo(projector, "text", hologram.getCustomName()); openEditor(player, projector); @@ -53,7 +60,7 @@ public class Projector { menu.addItem(1, new CustomItem(new ItemStack(Material.CLOCK), "&7Offset: &e" + DoubleHandler.fixDouble(Double.valueOf(BlockStorage.getLocationInfo(projector.getLocation(), "offset")) + 1.0D), "", "&rLeft Click: &7+0.1", "&rRight Click: &7-0.1")); menu.addMenuClickHandler(1, (pl, slot, item, action) -> { double offset = DoubleHandler.fixDouble(Double.valueOf(BlockStorage.getLocationInfo(projector.getLocation(), "offset")) + (action.isRightClicked() ? -0.1F : 0.1F)); - ArmorStand hologram = getArmorStand(projector); + ArmorStand hologram = getArmorStand(projector, true); Location l = new Location(projector.getWorld(), projector.getX() + 0.5, projector.getY() + offset, projector.getZ() + 0.5); hologram.teleport(l); BlockStorage.addBlockInfo(projector, "offset", String.valueOf(offset)); diff --git a/src/me/mrCookieSlime/Slimefun/holograms/InfusedHopper.java b/src/me/mrCookieSlime/Slimefun/holograms/InfusedHopperHologram.java similarity index 77% rename from src/me/mrCookieSlime/Slimefun/holograms/InfusedHopper.java rename to src/me/mrCookieSlime/Slimefun/holograms/InfusedHopperHologram.java index e1d0c7652..9594a8ec1 100644 --- a/src/me/mrCookieSlime/Slimefun/holograms/InfusedHopper.java +++ b/src/me/mrCookieSlime/Slimefun/holograms/InfusedHopperHologram.java @@ -7,25 +7,28 @@ import org.bukkit.entity.Entity; import me.mrCookieSlime.CSCoreLibPlugin.general.World.ArmorStandFactory; -public class InfusedHopper { +public class InfusedHopperHologram { private static final double offset = 1.2; - public static ArmorStand getArmorStand(Block hopper, boolean createIfNoneFound) { + public static ArmorStand getArmorStand(Block hopper, boolean createIfNoneExists) { Location l = new Location(hopper.getWorld(), hopper.getX() + 0.5, hopper.getY() + offset, hopper.getZ() + 0.5); for (Entity n: l.getChunk().getEntities()) { if (n instanceof ArmorStand && n.getCustomName() == null && l.distanceSquared(n.getLocation()) < 0.4D) return (ArmorStand) n; } - if (!createIfNoneFound) { - return null; - } + if (!createIfNoneExists) return null; ArmorStand hologram = ArmorStandFactory.createHidden(l); hologram.setCustomNameVisible(false); hologram.setCustomName(null); return hologram; } + + public static void remove(Block b) { + ArmorStand hologram = getArmorStand(b, false); + if (hologram != null) hologram.remove(); + } } diff --git a/src/me/mrCookieSlime/Slimefun/holograms/ReactorHologram.java b/src/me/mrCookieSlime/Slimefun/holograms/ReactorHologram.java index 1584d9da1..51a6ad6b9 100644 --- a/src/me/mrCookieSlime/Slimefun/holograms/ReactorHologram.java +++ b/src/me/mrCookieSlime/Slimefun/holograms/ReactorHologram.java @@ -9,15 +9,18 @@ import org.bukkit.entity.Entity; import me.mrCookieSlime.CSCoreLibPlugin.general.World.ArmorStandFactory; import me.mrCookieSlime.Slimefun.SlimefunStartup; +public final class ReactorHologram { + + private ReactorHologram() {} -public class ReactorHologram { - - public static ArmorStand getArmorStand(Location reactor) { + public static ArmorStand getArmorStand(Location reactor, boolean createIfNoneExists) { Location l = new Location(reactor.getWorld(), reactor.getX() + 0.5, reactor.getY() + 0.7, reactor.getZ() + 0.5); for (Entity n : l.getChunk().getEntities()) { if (n instanceof ArmorStand && l.distanceSquared(n.getLocation()) < 0.4D) return (ArmorStand) n; } + + if (!createIfNoneExists) return null; ArmorStand hologram = ArmorStandFactory.createHidden(l); hologram.setCustomNameVisible(false); @@ -27,14 +30,16 @@ public class ReactorHologram { public static void update(final Location l, final String name) { Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, () -> { - ArmorStand hologram = getArmorStand(l); + ArmorStand hologram = getArmorStand(l, true); if (!hologram.isCustomNameVisible()) hologram.setCustomNameVisible(true); hologram.setCustomName(ChatColor.translateAlternateColorCodes('&', name)); }); } public static void remove(Location l) { - ArmorStand hologram = getArmorStand(l); - hologram.remove(); + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, () -> { + ArmorStand hologram = getArmorStand(l, false); + if (hologram != null) hologram.remove(); + }); } } diff --git a/src/me/mrCookieSlime/Slimefun/holograms/XPCollector.java b/src/me/mrCookieSlime/Slimefun/holograms/XPCollectorHologram.java similarity index 68% rename from src/me/mrCookieSlime/Slimefun/holograms/XPCollector.java rename to src/me/mrCookieSlime/Slimefun/holograms/XPCollectorHologram.java index 8c58f3a7c..bf0dd22c6 100644 --- a/src/me/mrCookieSlime/Slimefun/holograms/XPCollector.java +++ b/src/me/mrCookieSlime/Slimefun/holograms/XPCollectorHologram.java @@ -7,21 +7,30 @@ import org.bukkit.entity.Entity; import me.mrCookieSlime.CSCoreLibPlugin.general.World.ArmorStandFactory; -public class XPCollector { +public final class XPCollectorHologram { + + private XPCollectorHologram() {} private static final double offset = 1.2; - public static ArmorStand getArmorStand(Block hopper) { + public static ArmorStand getArmorStand(Block hopper, boolean createIfNoneExists) { Location l = new Location(hopper.getWorld(), hopper.getX() + 0.5, hopper.getY() + offset, hopper.getZ() + 0.5); for (Entity n: l.getChunk().getEntities()) { if (n instanceof ArmorStand && n.getCustomName() == null && l.distanceSquared(n.getLocation()) < 0.4D) return (ArmorStand) n; } + if (!createIfNoneExists) return null; + ArmorStand hologram = ArmorStandFactory.createHidden(l); hologram.setCustomNameVisible(false); hologram.setCustomName(null); return hologram; } + + public static void remove(Block b) { + ArmorStand hologram = getArmorStand(b, false); + if (hologram != null) hologram.remove(); + } }