1
mirror of https://github.com/StarWishsama/Slimefun4.git synced 2024-09-20 11:45:51 +00:00

More Refactoring

This commit is contained in:
TheBusyBiscuit 2019-08-30 00:43:17 +02:00
parent 69d3990c64
commit a83266104e
16 changed files with 300 additions and 153 deletions

View File

@ -1,5 +1,14 @@
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines; 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.CSCoreLib;
import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config; import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config;
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.InvUtils; 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.BlockMenu;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset; import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset;
import me.mrCookieSlime.Slimefun.api.item_transport.ItemTransportFlow; import me.mrCookieSlime.Slimefun.api.item_transport.ItemTransportFlow;
import me.mrCookieSlime.Slimefun.holograms.AnimalGrowthAcceleratorHologram;
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;
public class AnimalGrowthAccelerator extends SlimefunItem { public class AnimalGrowthAccelerator extends SlimefunItem {
@ -66,7 +67,7 @@ public class AnimalGrowthAccelerator extends SlimefunItem {
@Override @Override
public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { 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); BlockMenu inv = BlockStorage.getInventory(b);
if (inv != null) { if (inv != null) {
for (int slot : getInputSlots()) { for (int slot : getInputSlots()) {
@ -124,7 +125,7 @@ public class AnimalGrowthAccelerator extends SlimefunItem {
} }
protected void tick(Block b) throws Exception { 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()) { if (n instanceof Ageable && !((Ageable) n).isAdult()) {
for (int slot: getInputSlots()) { for (int slot: getInputSlots()) {
if (SlimefunManager.isItemSimiliar(BlockStorage.getInventory(b).getItemInSlot(slot), SlimefunItems.ORGANIC_FOOD, false)) { if (SlimefunManager.isItemSimiliar(BlockStorage.getInventory(b).getItemInSlot(slot), SlimefunItems.ORGANIC_FOOD, false)) {

View File

@ -26,6 +26,7 @@ import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu; import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset; import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset;
import me.mrCookieSlime.Slimefun.api.item_transport.ItemTransportFlow; import me.mrCookieSlime.Slimefun.api.item_transport.ItemTransportFlow;
import me.mrCookieSlime.Slimefun.holograms.AutoBreederHologram;
public class AutoBreeder extends SlimefunItem { public class AutoBreeder extends SlimefunItem {
@ -65,7 +66,7 @@ public class AutoBreeder extends SlimefunItem {
@Override @Override
public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { 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); BlockMenu inv = BlockStorage.getInventory(b);
if (inv != null) { if (inv != null) {
for (int slot : getInputSlots()) { for (int slot : getInputSlots()) {
@ -123,7 +124,7 @@ public class AutoBreeder extends SlimefunItem {
} }
protected void tick(Block b) throws Exception { 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)) { if (Animals.isFeedable(n)) {
for (int slot : getInputSlots()) { for (int slot : getInputSlots()) {
if (SlimefunManager.isItemSimiliar(BlockStorage.getInventory(b).getItemInSlot(slot), SlimefunItems.ORGANIC_FOOD, false)) { if (SlimefunManager.isItemSimiliar(BlockStorage.getInventory(b).getItemInSlot(slot), SlimefunItems.ORGANIC_FOOD, false)) {

View File

@ -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;
}
});
}
}

View File

@ -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;
}
});
}
}

View File

@ -25,6 +25,7 @@ import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu; import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset; import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset;
import me.mrCookieSlime.Slimefun.api.item_transport.ItemTransportFlow; import me.mrCookieSlime.Slimefun.api.item_transport.ItemTransportFlow;
import me.mrCookieSlime.Slimefun.holograms.XPCollectorHologram;
public class XPCollector extends SlimefunItem { public class XPCollector extends SlimefunItem {
@ -65,7 +66,7 @@ public class XPCollector extends SlimefunItem {
@Override @Override
public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { 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); BlockMenu inv = BlockStorage.getInventory(b);
if (inv != null) { if (inv != null) {
for (int slot: getOutputSlots()) { for (int slot: getOutputSlots()) {
@ -148,7 +149,7 @@ public class XPCollector extends SlimefunItem {
} }
protected void tick(Block b) throws Exception { 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()) { while (iterator.hasNext()) {
Entity n = iterator.next(); Entity n = iterator.next();
if (n instanceof ExperienceOrb) { if (n instanceof ExperienceOrb) {

View File

@ -8,8 +8,6 @@ import java.util.Random;
import java.util.Set; import java.util.Set;
import java.util.UUID; 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.Bukkit;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.Effect; import org.bukkit.Effect;
@ -50,6 +48,7 @@ import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType; import org.bukkit.potion.PotionEffectType;
import org.bukkit.util.Vector; import org.bukkit.util.Vector;
import io.github.thebusybiscuit.cscorelib2.materials.MaterialTools;
import me.mrCookieSlime.CSCoreLibPlugin.CSCoreLib; import me.mrCookieSlime.CSCoreLibPlugin.CSCoreLib;
import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config; import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config;
import me.mrCookieSlime.CSCoreLibPlugin.compatibility.MaterialHelper; 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.AReactor;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineFuel; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineFuel;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.Teleporter; 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.AutonomousMachineHandler;
import me.mrCookieSlime.Slimefun.Objects.handlers.BlockBreakHandler; import me.mrCookieSlime.Slimefun.Objects.handlers.BlockBreakHandler;
import me.mrCookieSlime.Slimefun.Objects.handlers.BlockPlaceHandler; 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.api.item_transport.CargoNet;
import me.mrCookieSlime.Slimefun.holograms.CargoHologram; import me.mrCookieSlime.Slimefun.holograms.CargoHologram;
import me.mrCookieSlime.Slimefun.holograms.EnergyHologram; 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.holograms.ReactorHologram;
import me.mrCookieSlime.Slimefun.listeners.AncientAltarListener; import me.mrCookieSlime.Slimefun.listeners.AncientAltarListener;
import me.mrCookieSlime.Slimefun.utils.Utilities; 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}) new ItemStack[] {SlimefunItems.CLOTH, SlimefunItems.CLOTH, SlimefunItems.CLOTH, SlimefunItems.CHAIN, null, SlimefunItems.CHAIN, null, null, null})
.register(true); .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)) 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() { .register(true);
@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 SlimefunItem(Categories.MISC, SlimefunItems.CHAIN, "CHAIN", RecipeType.ENHANCED_CRAFTING_TABLE, 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)) 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)}) 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() { .register(true);
@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;
}
});
new SlimefunItem(Categories.RESOURCES, SlimefunItems.BLISTERING_INGOT, "BLISTERING_INGOT", RecipeType.HEATED_PRESSURE_CHAMBER, 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}) new ItemStack[] {SlimefunItems.GOLD_24K, SlimefunItems.URANIUM, null, null, null, null, null, null, null})
@ -4599,7 +4549,7 @@ public final class SlimefunSetup {
@Override @Override
public void extraTick(final Location l) { public void extraTick(final Location l) {
Bukkit.getScheduler().runTaskLater(SlimefunStartup.instance, () -> { 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) { if (entity instanceof LivingEntity) {
((LivingEntity) entity).addPotionEffect(new PotionEffect(PotionEffectType.WITHER, 60, 1)); ((LivingEntity) entity).addPotionEffect(new PotionEffect(PotionEffectType.WITHER, 60, 1));
} }

View File

@ -63,7 +63,7 @@ import me.mrCookieSlime.Slimefun.api.BlockStorage;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu; import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset; import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset;
import me.mrCookieSlime.Slimefun.api.item_transport.ItemTransportFlow; 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 { public abstract class ProgrammableAndroid extends SlimefunItem {
@ -230,7 +230,7 @@ public abstract class ProgrammableAndroid extends SlimefunItem {
} }
} }
} }
AndroidStatusHologram.remove(b); AndroidHologram.remove(b);
} }
return allow; return allow;
@ -432,7 +432,7 @@ public abstract class ProgrammableAndroid extends SlimefunItem {
break; break;
case ATTACK_MOBS_ANIMALS: case ATTACK_MOBS_ANIMALS:
entities: 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"))) { switch (BlockFace.valueOf(BlockStorage.getLocationInfo(b.getLocation(), "rotation"))) {
case NORTH: { case NORTH: {
if (n instanceof LivingEntity && !(n instanceof ArmorStand) && !(n instanceof Player) && n.getLocation().getZ() < b.getZ()) { 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; break;
case ATTACK_MOBS: case ATTACK_MOBS:
entities: entities:
for (Entity n: AndroidStatusHologram.getNearbyEntities(b, 4D + getTier())) { for (Entity n: AndroidHologram.getNearbyEntities(b, 4D + getTier())) {
if (n instanceof Animals) continue; if (n instanceof Animals) continue;
switch (BlockFace.valueOf(BlockStorage.getLocationInfo(b.getLocation(), "rotation"))) { switch (BlockFace.valueOf(BlockStorage.getLocationInfo(b.getLocation(), "rotation"))) {
case NORTH: { case NORTH: {
@ -531,7 +531,7 @@ public abstract class ProgrammableAndroid extends SlimefunItem {
break; break;
case ATTACK_ANIMALS: case ATTACK_ANIMALS:
entities: 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 Monster) continue;
switch (BlockFace.valueOf(BlockStorage.getLocationInfo(b.getLocation(), "rotation"))) { switch (BlockFace.valueOf(BlockStorage.getLocationInfo(b.getLocation(), "rotation"))) {
case NORTH: { case NORTH: {
@ -581,7 +581,7 @@ public abstract class ProgrammableAndroid extends SlimefunItem {
break; break;
case ATTACK_ANIMALS_ADULT: case ATTACK_ANIMALS_ADULT:
entities: 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 Monster) continue;
if (n instanceof org.bukkit.entity.Ageable && !((org.bukkit.entity.Ageable) n).isAdult()) continue; if (n instanceof org.bukkit.entity.Ageable && !((org.bukkit.entity.Ageable) n).isAdult()) continue;
switch (BlockFace.valueOf(BlockStorage.getLocationInfo(b.getLocation(), "rotation"))) { switch (BlockFace.valueOf(BlockStorage.getLocationInfo(b.getLocation(), "rotation"))) {

View File

@ -9,37 +9,41 @@ import org.bukkit.entity.Entity;
import me.mrCookieSlime.CSCoreLibPlugin.general.World.ArmorStandFactory; import me.mrCookieSlime.CSCoreLibPlugin.general.World.ArmorStandFactory;
public class AndroidStatusHologram { public final class AndroidHologram {
private AndroidHologram() {}
private static final double offset = 1.2; private static final double offset = 1.2;
public static void update(final Block b, final String name) { public static void update(final Block b, final String name) {
ArmorStand hologram = getArmorStand(b); ArmorStand hologram = getArmorStand(b, true);
hologram.setCustomName(name); hologram.setCustomName(name);
} }
public static void remove(final Block b) { public static void remove(final Block b) {
ArmorStand hologram = getArmorStand(b); ArmorStand hologram = getArmorStand(b, false);
hologram.remove(); if (hologram != null) hologram.remove();
} }
public static List<Entity> getNearbyEntities(final Block b, double radius) { 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); return hologram.getNearbyEntities(radius, 1D, radius);
} }
public static List<Entity> getNearbyEntities(final Block b, double radius, double y) { 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); 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); Location l = new Location(b.getWorld(), b.getX() + 0.5, b.getY() + offset, b.getZ() + 0.5);
for (Entity n: l.getChunk().getEntities()) { for (Entity n: l.getChunk().getEntities()) {
if (n instanceof ArmorStand && n.getCustomName() == null && l.distanceSquared(n.getLocation()) < 0.4D) return (ArmorStand) n; 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); ArmorStand hologram = ArmorStandFactory.createHidden(l);
hologram.setCustomNameVisible(false); hologram.setCustomNameVisible(false);
hologram.setCustomName(null); hologram.setCustomName(null);

View File

@ -7,21 +7,30 @@ import org.bukkit.entity.Entity;
import me.mrCookieSlime.CSCoreLibPlugin.general.World.ArmorStandFactory; import me.mrCookieSlime.CSCoreLibPlugin.general.World.ArmorStandFactory;
public class AnimalGrowthAccelerator { public final class AnimalGrowthAcceleratorHologram {
private AnimalGrowthAcceleratorHologram() {}
private static final double offset = 1.2; 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); Location l = new Location(hopper.getWorld(), hopper.getX() + 0.5, hopper.getY() + offset, hopper.getZ() + 0.5);
for (Entity n: l.getChunk().getEntities()) { for (Entity n: l.getChunk().getEntities()) {
if (n instanceof ArmorStand && n.getCustomName() == null && l.distanceSquared(n.getLocation()) < 0.4D) return (ArmorStand) n; 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); ArmorStand hologram = ArmorStandFactory.createHidden(l);
hologram.setCustomNameVisible(false); hologram.setCustomNameVisible(false);
hologram.setCustomName(null); hologram.setCustomName(null);
return hologram; return hologram;
} }
public static void remove(Block b) {
ArmorStand hologram = getArmorStand(b, false);
if (hologram != null) hologram.remove();
}
} }

View File

@ -7,19 +7,28 @@ import org.bukkit.entity.Entity;
import me.mrCookieSlime.CSCoreLibPlugin.general.World.ArmorStandFactory; 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); Location l = new Location(hopper.getWorld(), hopper.getX() + 0.5, hopper.getY(), hopper.getZ() + 0.5);
for (Entity n: l.getChunk().getEntities()) { for (Entity n: l.getChunk().getEntities()) {
if (n instanceof ArmorStand && n.getCustomName() == null && l.distanceSquared(n.getLocation()) < 0.4D) return (ArmorStand) n; 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); ArmorStand hologram = ArmorStandFactory.createHidden(l);
hologram.setCustomNameVisible(false); hologram.setCustomNameVisible(false);
hologram.setCustomName(null); hologram.setCustomName(null);
return hologram; return hologram;
} }
public static void remove(Block b) {
ArmorStand hologram = getArmorStand(b, false);
if (hologram != null) hologram.remove();
}
} }

View File

@ -10,27 +10,31 @@ import org.bukkit.entity.Entity;
import me.mrCookieSlime.CSCoreLibPlugin.general.World.ArmorStandFactory; import me.mrCookieSlime.CSCoreLibPlugin.general.World.ArmorStandFactory;
import me.mrCookieSlime.Slimefun.SlimefunStartup; import me.mrCookieSlime.Slimefun.SlimefunStartup;
public class CargoHologram { public final class CargoHologram {
private CargoHologram() {}
public static void update(final Block b, final String name) { public static void update(final Block b, final String name) {
Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, () -> { Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, () -> {
ArmorStand hologram = getArmorStand(b); ArmorStand hologram = getArmorStand(b, true);
hologram.setCustomName(ChatColor.translateAlternateColorCodes('&', name)); hologram.setCustomName(ChatColor.translateAlternateColorCodes('&', name));
}); });
} }
public static void remove(Block b) { public static void remove(Block b) {
ArmorStand hologram = getArmorStand(b); ArmorStand hologram = getArmorStand(b, false);
hologram.remove(); 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); Location l = new Location(b.getWorld(), b.getX() + 0.5, b.getY() + 0.7F, b.getZ() + 0.5);
for (Entity n : l.getChunk().getEntities()) { for (Entity n : l.getChunk().getEntities()) {
if (n instanceof ArmorStand && n.getCustomName() != null && l.distanceSquared(n.getLocation()) < 0.4D) return (ArmorStand) n; 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); ArmorStand hologram = ArmorStandFactory.createHidden(l);
return hologram; return hologram;
} }

View File

@ -11,7 +11,9 @@ import me.mrCookieSlime.CSCoreLibPlugin.general.Math.DoubleHandler;
import me.mrCookieSlime.CSCoreLibPlugin.general.World.ArmorStandFactory; import me.mrCookieSlime.CSCoreLibPlugin.general.World.ArmorStandFactory;
import me.mrCookieSlime.Slimefun.SlimefunStartup; import me.mrCookieSlime.Slimefun.SlimefunStartup;
public class EnergyHologram { public final class EnergyHologram {
private EnergyHologram() {}
public static void update(Block b, double supply, double demand) { 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")); 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) { public static void update(final Block b, final String name) {
Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, () -> { Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, () -> {
ArmorStand hologram = getArmorStand(b); ArmorStand hologram = getArmorStand(b, true);
hologram.setCustomName(ChatColor.translateAlternateColorCodes('&', name)); hologram.setCustomName(ChatColor.translateAlternateColorCodes('&', name));
}); });
} }
public static void remove(final Block b) { public static void remove(final Block b) {
Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, () -> { Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, () -> {
ArmorStand hologram = getArmorStand(b); ArmorStand hologram = getArmorStand(b, false);
hologram.remove(); 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); Location l = new Location(b.getWorld(), b.getX() + 0.5, b.getY() + 0.7F, b.getZ() + 0.5);
for (Entity n : l.getChunk().getEntities()) { for (Entity n : l.getChunk().getEntities()) {
if (n instanceof ArmorStand && n.getCustomName() != null && l.distanceSquared(n.getLocation()) < 0.4D) return (ArmorStand) n; 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); ArmorStand hologram = ArmorStandFactory.createHidden(l);
return hologram; return hologram;
} }

View File

@ -17,9 +17,11 @@ import me.mrCookieSlime.CSCoreLibPlugin.general.World.ArmorStandFactory;
import me.mrCookieSlime.Slimefun.Setup.Messages; import me.mrCookieSlime.Slimefun.Setup.Messages;
import me.mrCookieSlime.Slimefun.api.BlockStorage; 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"); String nametag = BlockStorage.getLocationInfo(projector.getLocation(), "text");
double offset = Double.parseDouble(BlockStorage.getLocationInfo(projector.getLocation(), "offset")); 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); 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; 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) { public static void openEditor(Player p, final Block projector) {
ChestMenu menu = new ChestMenu("Hologram Settings"); ChestMenu menu = new ChestMenu("Hologram Settings");
@ -41,7 +48,7 @@ public class Projector {
pl.closeInventory(); pl.closeInventory();
Messages.local.sendTranslation(pl, "machines.HOLOGRAM_PROJECTOR.enter-text", true); Messages.local.sendTranslation(pl, "machines.HOLOGRAM_PROJECTOR.enter-text", true);
MenuHelper.awaitChatInput(pl, (player, message) -> { MenuHelper.awaitChatInput(pl, (player, message) -> {
ArmorStand hologram = getArmorStand(projector); ArmorStand hologram = getArmorStand(projector, true);
hologram.setCustomName(ChatColor.translateAlternateColorCodes('&', message)); hologram.setCustomName(ChatColor.translateAlternateColorCodes('&', message));
BlockStorage.addBlockInfo(projector, "text", hologram.getCustomName()); BlockStorage.addBlockInfo(projector, "text", hologram.getCustomName());
openEditor(player, projector); 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.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) -> { menu.addMenuClickHandler(1, (pl, slot, item, action) -> {
double offset = DoubleHandler.fixDouble(Double.valueOf(BlockStorage.getLocationInfo(projector.getLocation(), "offset")) + (action.isRightClicked() ? -0.1F : 0.1F)); 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); Location l = new Location(projector.getWorld(), projector.getX() + 0.5, projector.getY() + offset, projector.getZ() + 0.5);
hologram.teleport(l); hologram.teleport(l);
BlockStorage.addBlockInfo(projector, "offset", String.valueOf(offset)); BlockStorage.addBlockInfo(projector, "offset", String.valueOf(offset));

View File

@ -7,20 +7,18 @@ import org.bukkit.entity.Entity;
import me.mrCookieSlime.CSCoreLibPlugin.general.World.ArmorStandFactory; import me.mrCookieSlime.CSCoreLibPlugin.general.World.ArmorStandFactory;
public class InfusedHopper { public class InfusedHopperHologram {
private static final double offset = 1.2; 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); Location l = new Location(hopper.getWorld(), hopper.getX() + 0.5, hopper.getY() + offset, hopper.getZ() + 0.5);
for (Entity n: l.getChunk().getEntities()) { for (Entity n: l.getChunk().getEntities()) {
if (n instanceof ArmorStand && n.getCustomName() == null && l.distanceSquared(n.getLocation()) < 0.4D) return (ArmorStand) n; if (n instanceof ArmorStand && n.getCustomName() == null && l.distanceSquared(n.getLocation()) < 0.4D) return (ArmorStand) n;
} }
if (!createIfNoneFound) { if (!createIfNoneExists) return null;
return null;
}
ArmorStand hologram = ArmorStandFactory.createHidden(l); ArmorStand hologram = ArmorStandFactory.createHidden(l);
hologram.setCustomNameVisible(false); hologram.setCustomNameVisible(false);
@ -28,4 +26,9 @@ public class InfusedHopper {
return hologram; return hologram;
} }
public static void remove(Block b) {
ArmorStand hologram = getArmorStand(b, false);
if (hologram != null) hologram.remove();
}
} }

View File

@ -9,16 +9,19 @@ import org.bukkit.entity.Entity;
import me.mrCookieSlime.CSCoreLibPlugin.general.World.ArmorStandFactory; import me.mrCookieSlime.CSCoreLibPlugin.general.World.ArmorStandFactory;
import me.mrCookieSlime.Slimefun.SlimefunStartup; 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); Location l = new Location(reactor.getWorld(), reactor.getX() + 0.5, reactor.getY() + 0.7, reactor.getZ() + 0.5);
for (Entity n : l.getChunk().getEntities()) { for (Entity n : l.getChunk().getEntities()) {
if (n instanceof ArmorStand && l.distanceSquared(n.getLocation()) < 0.4D) return (ArmorStand) n; if (n instanceof ArmorStand && l.distanceSquared(n.getLocation()) < 0.4D) return (ArmorStand) n;
} }
if (!createIfNoneExists) return null;
ArmorStand hologram = ArmorStandFactory.createHidden(l); ArmorStand hologram = ArmorStandFactory.createHidden(l);
hologram.setCustomNameVisible(false); hologram.setCustomNameVisible(false);
hologram.setCustomName(null); hologram.setCustomName(null);
@ -27,14 +30,16 @@ public class ReactorHologram {
public static void update(final Location l, final String name) { public static void update(final Location l, final String name) {
Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, () -> { Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, () -> {
ArmorStand hologram = getArmorStand(l); ArmorStand hologram = getArmorStand(l, true);
if (!hologram.isCustomNameVisible()) hologram.setCustomNameVisible(true); if (!hologram.isCustomNameVisible()) hologram.setCustomNameVisible(true);
hologram.setCustomName(ChatColor.translateAlternateColorCodes('&', name)); hologram.setCustomName(ChatColor.translateAlternateColorCodes('&', name));
}); });
} }
public static void remove(Location l) { public static void remove(Location l) {
ArmorStand hologram = getArmorStand(l); Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, () -> {
hologram.remove(); ArmorStand hologram = getArmorStand(l, false);
if (hologram != null) hologram.remove();
});
} }
} }

View File

@ -7,21 +7,30 @@ import org.bukkit.entity.Entity;
import me.mrCookieSlime.CSCoreLibPlugin.general.World.ArmorStandFactory; import me.mrCookieSlime.CSCoreLibPlugin.general.World.ArmorStandFactory;
public class XPCollector { public final class XPCollectorHologram {
private XPCollectorHologram() {}
private static final double offset = 1.2; 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); Location l = new Location(hopper.getWorld(), hopper.getX() + 0.5, hopper.getY() + offset, hopper.getZ() + 0.5);
for (Entity n: l.getChunk().getEntities()) { for (Entity n: l.getChunk().getEntities()) {
if (n instanceof ArmorStand && n.getCustomName() == null && l.distanceSquared(n.getLocation()) < 0.4D) return (ArmorStand) n; 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); ArmorStand hologram = ArmorStandFactory.createHidden(l);
hologram.setCustomNameVisible(false); hologram.setCustomNameVisible(false);
hologram.setCustomName(null); hologram.setCustomName(null);
return hologram; return hologram;
} }
public static void remove(Block b) {
ArmorStand hologram = getArmorStand(b, false);
if (hologram != null) hologram.remove();
}
} }