mirror of
https://github.com/StarWishsama/Slimefun4.git
synced 2024-09-20 03:35:51 +00:00
More Refactoring
This commit is contained in:
parent
69d3990c64
commit
a83266104e
@ -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)) {
|
||||
|
@ -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)) {
|
||||
|
@ -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;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
@ -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;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
@ -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<Entity> iterator = me.mrCookieSlime.Slimefun.holograms.XPCollector.getArmorStand(b).getNearbyEntities(4D, 4D, 4D).iterator();
|
||||
Iterator<Entity> iterator = XPCollectorHologram.getArmorStand(b, true).getNearbyEntities(4D, 4D, 4D).iterator();
|
||||
while (iterator.hasNext()) {
|
||||
Entity n = iterator.next();
|
||||
if (n instanceof ExperienceOrb) {
|
||||
|
@ -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 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 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;
|
||||
}
|
||||
});
|
||||
.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));
|
||||
}
|
||||
|
@ -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"))) {
|
||||
|
@ -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<Entity> getNearbyEntities(final Block b, double radius) {
|
||||
ArmorStand hologram = getArmorStand(b);
|
||||
ArmorStand hologram = getArmorStand(b, true);
|
||||
return hologram.getNearbyEntities(radius, 1D, radius);
|
||||
}
|
||||
|
||||
public static List<Entity> 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);
|
@ -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();
|
||||
}
|
||||
|
||||
}
|
@ -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();
|
||||
}
|
||||
|
||||
}
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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);
|
||||
@ -33,6 +35,11 @@ public class Projector {
|
||||
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));
|
@ -7,20 +7,18 @@ 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);
|
||||
@ -28,4 +26,9 @@ public class InfusedHopper {
|
||||
return hologram;
|
||||
}
|
||||
|
||||
public static void remove(Block b) {
|
||||
ArmorStand hologram = getArmorStand(b, false);
|
||||
if (hologram != null) hologram.remove();
|
||||
}
|
||||
|
||||
}
|
@ -9,16 +9,19 @@ import org.bukkit.entity.Entity;
|
||||
import me.mrCookieSlime.CSCoreLibPlugin.general.World.ArmorStandFactory;
|
||||
import me.mrCookieSlime.Slimefun.SlimefunStartup;
|
||||
|
||||
public final class ReactorHologram {
|
||||
|
||||
public class ReactorHologram {
|
||||
private 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);
|
||||
hologram.setCustomName(null);
|
||||
@ -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();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -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();
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user