mirror of
https://github.com/songoda/FabledSkyBlock.git
synced 2024-11-26 12:16:30 +01:00
Change how stackables holograms work
This commit is contained in:
parent
da8a77f2d4
commit
8c8d612dfa
@ -55,6 +55,7 @@ public class Block implements Listener {
|
||||
this.skyblock = skyblock;
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
@EventHandler
|
||||
public void onBlockBreak(BlockBreakEvent event) {
|
||||
Player player = event.getPlayer();
|
||||
@ -87,20 +88,23 @@ public class Block implements Listener {
|
||||
&& stackableManager.isStacked(block.getLocation())) {
|
||||
Stackable stackable = stackableManager.getStack(block.getLocation(), block.getType());
|
||||
if (stackable != null) {
|
||||
Material material = block.getType();
|
||||
byte data = block.getData();
|
||||
|
||||
int droppedAmount = 0;
|
||||
if (event.getPlayer().isSneaking()) {
|
||||
Location dropLoc = event.getBlock().getLocation().clone().add(0.5, 0.5, 0.5);
|
||||
int count = stackable.getSize();
|
||||
droppedAmount = count;
|
||||
while (count > 64) {
|
||||
dropLoc.getWorld().dropItemNaturally(dropLoc, new ItemStack(event.getBlock().getType(), 64));
|
||||
dropLoc.getWorld().dropItemNaturally(dropLoc, new ItemStack(material, 64, data));
|
||||
count -= 64;
|
||||
}
|
||||
dropLoc.getWorld().dropItemNaturally(dropLoc, new ItemStack(event.getBlock().getType(), count));
|
||||
dropLoc.getWorld().dropItemNaturally(dropLoc, new ItemStack(material, count, block.getData()));
|
||||
block.setType(Material.AIR);
|
||||
stackable.setSize(0);
|
||||
} else {
|
||||
block.getWorld().dropItemNaturally(block.getLocation().clone().add(.5, 1, .5), new ItemStack(block.getType()));
|
||||
block.getWorld().dropItemNaturally(block.getLocation().clone().add(.5, 1, .5), new ItemStack(material, 1, data));
|
||||
stackable.takeOne();
|
||||
droppedAmount = 1;
|
||||
}
|
||||
@ -113,14 +117,11 @@ public class Block implements Listener {
|
||||
FileConfiguration configLoad = config.getFileConfiguration();
|
||||
|
||||
if (configLoad.getBoolean("Island.Block.Level.Enable")) {
|
||||
Materials materials = Materials.getMaterials(block.getType(), block.getData());
|
||||
|
||||
Materials materials = Materials.getMaterials(material, data);
|
||||
if (materials != null) {
|
||||
|
||||
IslandLevel level = island.getLevel();
|
||||
|
||||
if (level.hasMaterial(materials.name())) {
|
||||
|
||||
int materialAmount = level.getMaterialAmount(materials.name());
|
||||
|
||||
if (materialAmount - droppedAmount <= 0) {
|
||||
@ -154,7 +155,6 @@ public class Block implements Listener {
|
||||
|
||||
if (event.isCancelled() || !configLoad.getBoolean("Island.Block.Level.Enable")) return;
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
Materials materials = Materials.getMaterials(block.getType(), block.getData());
|
||||
|
||||
if (materials == null) return;
|
||||
|
@ -3,18 +3,15 @@ package me.goodandevil.skyblock.listeners;
|
||||
import java.io.File;
|
||||
import java.util.Set;
|
||||
|
||||
import me.goodandevil.skyblock.config.FileManager;
|
||||
import me.goodandevil.skyblock.island.Island;
|
||||
import me.goodandevil.skyblock.island.IslandLevel;
|
||||
import me.goodandevil.skyblock.stackable.Stackable;
|
||||
import me.goodandevil.skyblock.stackable.StackableManager;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.GameMode;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.BlockFace;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.entity.*;
|
||||
import org.bukkit.entity.ArmorStand;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.entity.Horse;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.entity.minecart.StorageMinecart;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
@ -28,9 +25,14 @@ import org.bukkit.inventory.EquipmentSlot;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import me.goodandevil.skyblock.SkyBlock;
|
||||
import me.goodandevil.skyblock.config.FileManager;
|
||||
import me.goodandevil.skyblock.island.Island;
|
||||
import me.goodandevil.skyblock.island.IslandLevel;
|
||||
import me.goodandevil.skyblock.island.IslandManager;
|
||||
import me.goodandevil.skyblock.message.MessageManager;
|
||||
import me.goodandevil.skyblock.sound.SoundManager;
|
||||
import me.goodandevil.skyblock.island.IslandManager;
|
||||
import me.goodandevil.skyblock.stackable.Stackable;
|
||||
import me.goodandevil.skyblock.stackable.StackableManager;
|
||||
import me.goodandevil.skyblock.utils.item.InventoryUtil;
|
||||
import me.goodandevil.skyblock.utils.structure.StructureUtil;
|
||||
import me.goodandevil.skyblock.utils.version.Materials;
|
||||
@ -95,7 +97,6 @@ public class Interact implements Listener {
|
||||
}
|
||||
|
||||
level.setMaterialAmount(materials.name(), materialAmount + 1);
|
||||
|
||||
}
|
||||
if (block.getType() == Material.ANVIL) {
|
||||
if (!islandManager.hasPermission(player, block.getLocation(), "Anvil")) {
|
||||
|
@ -4,6 +4,7 @@ import java.io.File;
|
||||
import java.util.UUID;
|
||||
|
||||
import org.apache.commons.lang3.text.WordUtils;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
@ -25,14 +26,15 @@ public class Stackable {
|
||||
private Location location;
|
||||
private Material material;
|
||||
private Integer size = 2;
|
||||
private ArmorStand display;
|
||||
|
||||
public Stackable(Location location, Material material) {
|
||||
this.uuid = UUID.randomUUID();
|
||||
this.location = location;
|
||||
this.material = material;
|
||||
updateDisplay();
|
||||
this.updateDisplay();
|
||||
SkyBlock.getInstance().getSoundManager().playSound(location, Sounds.ANVIL_LAND.bukkitSound(), 1.0F, 1.0F);
|
||||
save();
|
||||
this.save();
|
||||
}
|
||||
|
||||
public Stackable(UUID uuid, Location location, Material material, int size) {
|
||||
@ -40,7 +42,7 @@ public class Stackable {
|
||||
this.location = location;
|
||||
this.material = material;
|
||||
this.size = size;
|
||||
updateDisplay();
|
||||
this.updateDisplay();
|
||||
}
|
||||
|
||||
public UUID getUuid() {
|
||||
@ -61,7 +63,7 @@ public class Stackable {
|
||||
|
||||
public void setMaterial(Material material) {
|
||||
this.material = material;
|
||||
save();
|
||||
this.save();
|
||||
}
|
||||
|
||||
public Integer getSize() {
|
||||
@ -70,29 +72,43 @@ public class Stackable {
|
||||
|
||||
public void setSize(Integer size) {
|
||||
this.size = size;
|
||||
updateDisplay();
|
||||
save();
|
||||
this.updateDisplay();
|
||||
this.save();
|
||||
}
|
||||
|
||||
public void addOne() {
|
||||
this.size ++;
|
||||
updateDisplay();
|
||||
this.updateDisplay();
|
||||
SkyBlock.getInstance().getSoundManager().playSound(location, Sounds.LEVEL_UP.bukkitSound(), 1.0F, 1.0F);
|
||||
save();
|
||||
this.save();
|
||||
}
|
||||
|
||||
public void takeOne() {
|
||||
this.size --;
|
||||
updateDisplay();
|
||||
this.updateDisplay();
|
||||
SkyBlock.getInstance().getSoundManager().playSound(location, Sounds.ARROW_HIT.bukkitSound(), 1.0F, 1.0F);
|
||||
save();
|
||||
this.save();
|
||||
}
|
||||
|
||||
private void updateDisplay() {
|
||||
removeDisplay();
|
||||
Location dropLocation = location.clone().add(.5,1,.5);
|
||||
if (this.size > 1) {
|
||||
if (this.display != null) {
|
||||
this.display.setCustomName(WordUtils.capitalize(material.name().toLowerCase()).replace("_", " ") + "s: " + size);
|
||||
} else {
|
||||
if (!this.findExistingDisplay()) {
|
||||
this.createDisplay();
|
||||
}
|
||||
this.updateDisplay();
|
||||
}
|
||||
} else {
|
||||
this.removeDisplay();
|
||||
}
|
||||
}
|
||||
|
||||
ArmorStand as = (ArmorStand) location.getWorld().spawnEntity(dropLocation, EntityType.ARMOR_STAND);
|
||||
private void createDisplay() {
|
||||
Location initialLocation = location.clone().add(0.5, -1, 0.5);
|
||||
Location dropLocation = location.clone().add(0.5, 1, 0.5);
|
||||
ArmorStand as = (ArmorStand) location.getWorld().spawnEntity(initialLocation, EntityType.ARMOR_STAND);
|
||||
as.setVisible(false);
|
||||
as.setGravity(false);
|
||||
as.setSmall(true);
|
||||
@ -103,13 +119,25 @@ public class Stackable {
|
||||
as.setHelmet(new ItemStack(material));
|
||||
as.setCustomName(WordUtils.capitalize(material.name().toLowerCase()).replace("_", " ") + "s: " + size);
|
||||
as.setCustomNameVisible(true);
|
||||
|
||||
this.display = as;
|
||||
Bukkit.getScheduler().scheduleSyncDelayedTask(SkyBlock.getInstance(), () -> {
|
||||
this.display.teleport(dropLocation);
|
||||
});
|
||||
}
|
||||
|
||||
void removeDisplay() {
|
||||
for (Entity entity : location.getWorld().getNearbyEntities(getLocation().add(.5,.55,.5), .1,.5,.1)) {
|
||||
if (entity.getType() != EntityType.ARMOR_STAND) continue;
|
||||
entity.remove();
|
||||
private boolean findExistingDisplay() {
|
||||
for (Entity entity : this.location.getWorld().getNearbyEntities(this.location.clone().add(0.5, 0.55, 0.5), 0.1, 0.5, 0.1)) {
|
||||
if (entity instanceof ArmorStand) {
|
||||
this.display = (ArmorStand) entity;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private void removeDisplay() {
|
||||
if (this.display != null) {
|
||||
this.display.remove();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -96,7 +96,6 @@ public class StackableManager {
|
||||
|
||||
public void removeStack(Stackable stackable) {
|
||||
stackable.setSize(0);
|
||||
stackable.removeDisplay();
|
||||
stacks.remove(stackable.getLocation());
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user