Skip to content

Commit

Permalink
Merge pull request #1 from focamacho/dev
Browse files Browse the repository at this point in the history
fix item updates
  • Loading branch information
focamacho authored Jan 9, 2023
2 parents 6b48aa5 + 4352a2c commit 9c528cf
Show file tree
Hide file tree
Showing 6 changed files with 133 additions and 46 deletions.
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
allprojects {
group = 'com.focamacho'
version = '1.0.8'
version = '1.0.9'
}

subprojects {
Expand Down
2 changes: 1 addition & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.0-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-6.8.1-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import com.focamacho.sealmenus.bukkit.item.ClickableItem;
import com.focamacho.sealmenus.bukkit.item.MenuItem;
import com.google.common.collect.Sets;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.Setter;
Expand Down Expand Up @@ -55,7 +56,7 @@ public class ChestMenu {
//Bukkit Inventory
@Getter protected Inventory inventory;
protected final Set<Integer> slotsRequiringUpdate = Sets.newHashSet();
private BukkitTask updateItemsTask = null;
@Getter(AccessLevel.PROTECTED) @Setter(AccessLevel.PROTECTED) private BukkitTask updateItemsTask = null;

ChestMenu(String title, int rows, JavaPlugin plugin) {
if(rows <= 0 || rows > 6) throw new IllegalArgumentException("The number of rows for a menu must be >= 1 && <= 6.");
Expand Down Expand Up @@ -187,17 +188,7 @@ public void update() {
}

for (int i = 0; i < this.inventory.getSize(); i++) {
final int finalIndex = i;

ItemStack slotStack = this.inventory.getItem(i);
if(slotStack == null) slotStack = new ItemStack(Material.AIR);

if(containsItem(i)) {
ItemStack stack = getItem(i).getItem();
if(slotStack != stack) Bukkit.getScheduler().runTask(this.plugin, () -> this.inventory.setItem(finalIndex, stack));
} else if(slotStack.getType() != Material.AIR) {
Bukkit.getScheduler().runTask(this.plugin, () -> this.inventory.clear(finalIndex));
}
updateSlotStack(i);
}

slotsRequiringUpdate.clear();
Expand All @@ -211,16 +202,7 @@ public void update() {
*/
public void update(int slot) {
if(this.inventory == null) update();

ItemStack inventoryStack = this.inventory.getItem(slot);
if(inventoryStack == null) inventoryStack = new ItemStack(Material.AIR);

if(containsItem(slot)) {
ItemStack stack = getItem(slot).getItem();
if (inventoryStack != stack)
Bukkit.getScheduler().runTask(this.plugin, () -> this.inventory.setItem(slot, stack));
} else if(inventoryStack.getType() != Material.AIR) Bukkit.getScheduler().runTask(this.plugin, () -> this.inventory.clear(slot));

updateSlotStack(slot);
slotsRequiringUpdate.remove(slot);
}

Expand Down Expand Up @@ -275,6 +257,17 @@ public boolean hasViewers() {
return this.inventory.getViewers().size() > 0;
}

private void updateSlotStack(int slot) {
ItemStack inventoryStack = this.inventory.getItem(slot);
if(inventoryStack == null) inventoryStack = new ItemStack(Material.AIR);

if(containsItem(slot)) {
ItemStack stack = getItem(slot).getItem();
if (inventoryStack != stack)
Bukkit.getScheduler().runTask(this.plugin, () -> this.inventory.setItem(slot, stack));
} else if(inventoryStack.getType() != Material.AIR) Bukkit.getScheduler().runTask(this.plugin, () -> this.inventory.clear(slot));
}

/**
* Creates a copy of this menu.
* @return the copy of this menu.
Expand All @@ -301,20 +294,26 @@ public ChestMenu copy() {
}

protected void handlesUpdateItemsTask() {
if(this.updateItemsTask == null && hasViewers())
updateItemsTask = new BukkitRunnable() {
if(getUpdateItemsTask() == null && hasViewers())
setUpdateItemsTask(new BukkitRunnable() {
@Override
public void run() {
items.forEach((slot, item) -> {
if (item.update()) requireUpdate(slot);
});
handleUpdateItems();

if(!hasViewers()) {
this.cancel();
updateItemsTask = null;
}
}
}.runTaskTimer(this.plugin, 1, 1);
}.runTaskTimer(this.plugin, 1, 1));
}

protected void handleUpdateItems() {
getItems().forEach((slot, item) -> {
if (item.update()) {
requireUpdate(slot);
}
});
}

@RequiredArgsConstructor
Expand All @@ -323,7 +322,7 @@ static class Listener implements org.bukkit.event.Listener {
private static final MenuItem dummyItem = ClickableItem.create(new ItemStack(Material.AIR));

private final JavaPlugin plugin;
private final Set<ChestMenu> chestMenus = Sets.newHashSet();
private final Set<ChestMenu> chestMenus = Collections.synchronizedSet(Sets.newHashSet());

@EventHandler
public void onClick(InventoryClickEvent ce) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,9 @@
import org.bukkit.event.inventory.InventoryOpenEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.scheduler.BukkitTask;

import java.util.AbstractMap;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.*;
import java.util.function.Consumer;

public class PageableChestMenu extends ChestMenu {
Expand Down Expand Up @@ -126,6 +124,22 @@ public PageableChestMenu clearPageableItems() {
return this;
}

/**
* Returns the slot for the inserted pageable item.
*
* @return the slot and page of the pageable item, or null if
* not present in the menu.
*/
public Map.Entry<Integer, Integer> getPageableItemSlot(MenuItem item) {
if(!this.pageableItems.contains(item)) return null;

int indexOf = pageableItems.indexOf(item);
int page = (int) Math.floor((float) indexOf / itemSlots.length);
int slot = itemSlots[indexOf - (page * itemSlots.length)];

return new AbstractMap.SimpleEntry<>(page, slot);
}

/**
* Get the quantity of pages of this menu.
* The quantity is defined by the amount
Expand Down Expand Up @@ -304,6 +318,35 @@ public ChestMenu copy() {
return copy;
}

@Override
protected BukkitTask getUpdateItemsTask() {
if(fatherMenu == null) return super.getUpdateItemsTask();
else return fatherMenu.getUpdateItemsTask();
}

@Override
protected ChestMenu setUpdateItemsTask(BukkitTask updateItemsTask) {
if(fatherMenu == null) return super.setUpdateItemsTask(updateItemsTask);
else return fatherMenu.setUpdateItemsTask(updateItemsTask);
}

@Override
protected void handlesUpdateItemsTask() {
if(fatherMenu == null) super.handlesUpdateItemsTask();
else fatherMenu.handlesUpdateItemsTask();
}

@Override
protected void handleUpdateItems() {
super.handleUpdateItems();

getPageableItems().forEach(item -> {
if (item.update()) {
requireUpdate(getPageableItemSlot(item).getValue());
}
});
}

//Override global actions for mirrored menus
@Override
public Consumer<InventoryOpenEvent> getOnOpen() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import com.focamacho.sealmenus.sponge.item.MenuItem;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;
Expand Down Expand Up @@ -54,7 +55,7 @@ public class ChestMenu {
@Getter protected Inventory inventory;
protected List<Player> playersViewing = Lists.newArrayList();
protected final Set<Integer> slotsRequiringUpdate = Sets.newHashSet();
private Task updateItemsTask = null;
@Getter(AccessLevel.PROTECTED) @Setter(AccessLevel.PROTECTED) private Task updateItemsTask = null;

ChestMenu(String title, int rows, Object plugin) {
if(rows <= 0 || rows > 6) throw new IllegalArgumentException("The number of rows for a menu must be >= 1 && <= 6.");
Expand Down Expand Up @@ -289,6 +290,7 @@ public void update(int slot) {
for (Inventory inventorySlot : this.inventory.slots()) {
Integer slotIndex = inventorySlot.getInventoryProperty(SlotIndex.class).get().getValue();
if(Objects.equals(slot, slotIndex)) {
System.out.println("atualizando slot");
if(containsItem(slot)) {
ItemStack stack = getItem(slot).getItem();
if (inventorySlot.peek().orElse(ItemStack.empty()) != stack)
Expand Down Expand Up @@ -374,17 +376,23 @@ public ChestMenu copy() {
}

protected void handlesUpdateItemsTask() {
if(this.updateItemsTask == null && hasViewers())
updateItemsTask = Task.builder().intervalTicks(1).execute((task) -> {
items.forEach((slot, item) -> {
if(item.update()) requireUpdate(slot);
});
if(getUpdateItemsTask() == null && hasViewers())
setUpdateItemsTask(Task.builder().intervalTicks(1).execute((task) -> {
handleUpdateItems();

if(!hasViewers()) {
task.cancel();
this.updateItemsTask = null;
}
}).submit(this.plugin);
}).submit(this.plugin));
}

protected void handleUpdateItems() {
getItems().forEach((slot, item) -> {
if(item.update()) {
requireUpdate(slot);
}
});
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,9 @@
import org.spongepowered.api.event.item.inventory.InteractInventoryEvent;
import org.spongepowered.api.item.inventory.ItemStack;
import org.spongepowered.api.scheduler.Task;
import org.spongepowered.api.util.Tuple;

import java.util.AbstractMap;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.*;
import java.util.function.Consumer;

public class PageableChestMenu extends ChestMenu {
Expand Down Expand Up @@ -124,6 +122,22 @@ public PageableChestMenu clearPageableItems() {
return this;
}

/**
* Returns the slot for the inserted pageable item.
*
* @return the slot and page of the pageable item, or null if
* not present in the menu.
*/
public Map.Entry<Integer, Integer> getPageableItemSlot(MenuItem item) {
if(!this.pageableItems.contains(item)) return null;

int indexOf = pageableItems.indexOf(item);
int page = (int) Math.floor((float) indexOf / itemSlots.length);
int slot = itemSlots[indexOf - (page * itemSlots.length)];

return new AbstractMap.SimpleEntry<>(page, slot);
}

/**
* Get the quantity of pages of this menu.
* The quantity is defined by the amount
Expand Down Expand Up @@ -302,12 +316,35 @@ public ChestMenu copy() {
return copy;
}

@Override
protected Task getUpdateItemsTask() {
if(fatherMenu == null) return super.getUpdateItemsTask();
else return fatherMenu.getUpdateItemsTask();
}

@Override
protected ChestMenu setUpdateItemsTask(Task updateItemsTask) {
if(fatherMenu == null) return super.setUpdateItemsTask(updateItemsTask);
else return fatherMenu.setUpdateItemsTask(updateItemsTask);
}

@Override
protected void handlesUpdateItemsTask() {
if(fatherMenu == null) super.handlesUpdateItemsTask();
else fatherMenu.handlesUpdateItemsTask();
}

@Override
protected void handleUpdateItems() {
super.handleUpdateItems();

getPageableItems().forEach(item -> {
if(item.update()) {
requireUpdate(getPageableItemSlot(item).getValue());
}
});
}

//Override global actions for mirrored menus
@Override
public Consumer<InteractInventoryEvent.Open> getOnOpen() {
Expand Down

0 comments on commit 9c528cf

Please sign in to comment.