mirror of
https://github.com/JamesPeters98/ChestsPlusPlus.git
synced 2025-03-13 07:09:07 +01:00
Sign Update Packet
Only sends a packet to set sign invisible if there is an item to display
This commit is contained in:
parent
4d80974431
commit
0805827f17
@ -125,6 +125,8 @@ public class VirtualCraftingHolder implements InventoryHolder {
|
||||
if(recipe != null){
|
||||
setCrafting(recipe);
|
||||
playSound(Sound.BLOCK_NOTE_BLOCK_CHIME,0.5f,1f);
|
||||
} else {
|
||||
stopCraftingItems();
|
||||
}
|
||||
isUpdatingRecipe = false;
|
||||
updateGUI();
|
||||
@ -185,7 +187,7 @@ public class VirtualCraftingHolder implements InventoryHolder {
|
||||
}
|
||||
|
||||
public void startCraftingItems(){
|
||||
craftItemTask = new CraftItems();
|
||||
if(craftItemTask == null || craftItemTask.isCancelled()) craftItemTask = new CraftItems();
|
||||
}
|
||||
public void stopCraftingItems(){
|
||||
if(craftItemTask != null) craftItemTask.cancel();
|
||||
@ -234,6 +236,9 @@ public class VirtualCraftingHolder implements InventoryHolder {
|
||||
//Play sound if crafting occured.
|
||||
if(didCraft) if(location.getLocation().getWorld() != null) {
|
||||
location.getLocation().getWorld().playSound(location.getLocation(), Sound.BLOCK_DISPENSER_DISPENSE, 0.25f, 1f);
|
||||
if(output.getHolder() instanceof VirtualInventoryHolder){
|
||||
((VirtualInventoryHolder) output.getHolder()).getStorage().updateDisplayItem();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -46,6 +46,8 @@ public abstract class AbstractStorage implements ConfigurationSerializable {
|
||||
private List<LocationInfo> locationInfoList;
|
||||
private Inventory inventory;
|
||||
|
||||
private int signUpdateTask;
|
||||
|
||||
public AbstractStorage(OfflinePlayer player, String identifier, Location location, Location signLocation){
|
||||
this.player = player;
|
||||
this.playerUUID = player.getUniqueId();
|
||||
@ -118,16 +120,7 @@ public abstract class AbstractStorage implements ConfigurationSerializable {
|
||||
|
||||
private void init(){
|
||||
if(shouldDisplayArmourStands()) {
|
||||
Bukkit.getScheduler().scheduleSyncRepeatingTask(ChestsPlusPlus.PLUGIN, () -> {
|
||||
for (LocationInfo locationInfo : locationInfoList) {
|
||||
World world = locationInfo.getLocation().getWorld();
|
||||
if (world != null) {
|
||||
//Make client think sign is invisible.
|
||||
if (displayItem != null) world.getPlayers().forEach(player -> player.sendBlockChange(locationInfo.getSignLocation(), air));
|
||||
else locationInfo.getSignLocation().getBlock().getState().update();
|
||||
}
|
||||
}
|
||||
}, 1, 1);
|
||||
startSignChangeTask();
|
||||
} else {
|
||||
for (LocationInfo locationInfo : locationInfoList) {
|
||||
locationInfo.getSignLocation().getBlock().getState().update();
|
||||
@ -135,6 +128,15 @@ public abstract class AbstractStorage implements ConfigurationSerializable {
|
||||
}
|
||||
}
|
||||
|
||||
private int startSignChangeTask(){
|
||||
return Bukkit.getScheduler().scheduleSyncRepeatingTask(ChestsPlusPlus.PLUGIN, () -> Bukkit.getOnlinePlayers().forEach(player -> {
|
||||
for (LocationInfo locationInfo : locationInfoList) {
|
||||
if (displayItem != null) player.sendBlockChange(locationInfo.getSignLocation(), air);
|
||||
else locationInfo.getSignLocation().getBlock().getState().update();
|
||||
}
|
||||
}), 1, 5);
|
||||
}
|
||||
|
||||
/**
|
||||
* This is called after the config has loaded into memory.
|
||||
*/
|
||||
@ -358,6 +360,12 @@ public abstract class AbstractStorage implements ConfigurationSerializable {
|
||||
private ItemStack displayItem;
|
||||
|
||||
public void onItemDisplayUpdate(ItemStack newItem){
|
||||
if(displayItem == null || displayItem.getType().equals(Material.AIR)){
|
||||
Bukkit.getScheduler().cancelTask(signUpdateTask);
|
||||
signUpdateTask = -1;
|
||||
} else {
|
||||
if(signUpdateTask == -1) signUpdateTask = startSignChangeTask();
|
||||
}
|
||||
displayItem = newItem;
|
||||
updateClients();
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user