Skip to content

Commit

Permalink
Inventory GUI fixes and close doors if finished pathfinding <1.8 bloc…
Browse files Browse the repository at this point in the history
…ks from the door
  • Loading branch information
fullwall committed Jul 17, 2022
1 parent bf150a5 commit bf51c0c
Show file tree
Hide file tree
Showing 4 changed files with 53 additions and 21 deletions.
Expand Up @@ -90,22 +90,24 @@ private Block getCorrectDoor(Block point) {

@Override
public void onReached(NPC npc, Block point) {
Location centreDoor = point.getLocation().add(0.5, 0, 0.5);
Location doorCentre = point.getLocation().add(0.5, 0, 0.5);
new BukkitRunnable() {
@Override
public void run() {
if (!npc.getNavigator().isNavigating()) {
if (opened && npc.getStoredLocation().distance(doorCentre) <= 1.8) {
close(npc, point);
}
cancel();
return;
}

double dist = npc.getStoredLocation().distance(centreDoor);
if (dist > 1.8) {
if (npc.getStoredLocation().distance(doorCentre) > 1.8) {
close(npc, point);
cancel();
}
}
}.runTaskTimer(CitizensAPI.getPlugin(), 5, 1);
}.runTaskTimer(CitizensAPI.getPlugin(), 3, 1);
}

private void open(NPC npc, Block point) {
Expand Down Expand Up @@ -157,7 +159,8 @@ private void open(NPC npc, Block point) {

@Override
public void run(NPC npc, Block point, ListIterator<Block> path) {
if (!MinecraftBlockExaminer.isDoor(point.getType()) || opened)
if ((!MinecraftBlockExaminer.isDoor(point.getType()) && !MinecraftBlockExaminer.isGate(point.getType()))
|| opened)
return;
if (npc.getStoredLocation().distance(point.getLocation().add(0.5, 0, 0.5)) > 2.5)
return;
Expand Down
17 changes: 10 additions & 7 deletions src/main/java/net/citizensnpcs/api/gui/InventoryMenu.java
Expand Up @@ -9,10 +9,10 @@
import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.Collection;
import java.util.Deque;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Queue;
import java.util.WeakHashMap;
import java.util.function.Consumer;

Expand Down Expand Up @@ -69,8 +69,7 @@ public class InventoryMenu implements Listener, Runnable {
private boolean delayViewerChanges;
private PageContext page;
private int pickupAmount = -1;
private HumanEntity singleViewer;
private final Queue<PageContext> stack = Queues.newArrayDeque();
private final Deque<PageContext> stack = Queues.newArrayDeque();
private boolean transitioning;
private Collection<InventoryView> views = Lists.newArrayList();

Expand Down Expand Up @@ -103,7 +102,9 @@ public void close() {
closingViews = true;
runViewerModifier(() -> {
for (InventoryView view : views) {
page.page.onClose(view.getPlayer());
if (page != null) {
page.page.onClose(view.getPlayer());
}
view.close();
}
views.clear();
Expand Down Expand Up @@ -221,14 +222,15 @@ private void handleClick(InventoryClickEvent event) {
switch (event.getAction()) {
case COLLECT_TO_CURSOR:
event.setCancelled(true);
case NOTHING:
case UNKNOWN:
case DROP_ONE_CURSOR:
case DROP_ALL_CURSOR:
return;
default:
break;
}
if (event.getSlot() < 0)
return;
InventoryMenuSlot slot = page.ctx.getSlot(event.getSlot());
CitizensInventoryClickEvent ev = new CitizensInventoryClickEvent(event, pickupAmount);
slot.onClick(ev);
Expand Down Expand Up @@ -441,7 +443,7 @@ private void transition(InventoryMenuInfo info, InventoryMenuPage instance, Map<
context.putIfAbsent(entry.getKey(), entry.getValue());
}
page.ctx.data().clear();
stack.add(page);
stack.addLast(page);
}
page = new PageContext();
page.page = instance;
Expand Down Expand Up @@ -543,9 +545,10 @@ public void transitionBack() {
page.page.onClose(view.getPlayer());
}
Map<String, Object> data = page.ctx.data();
page = stack.poll();
page = stack.pollLast();
if (page != null) {
page.ctx.data().putAll(data);
page.page.initialise(page.ctx);
}
data.clear();
transitionViewersToInventory(page == null ? null : page.ctx.getInventory());
Expand Down
34 changes: 25 additions & 9 deletions src/main/java/net/citizensnpcs/api/gui/InventoryMenuSlot.java
Expand Up @@ -20,6 +20,7 @@

import net.citizensnpcs.api.util.Colorizer;
import net.citizensnpcs.api.util.Messaging;
import net.md_5.bungee.api.ChatColor;

/**
* Represents a single inventory slot in a {@link InventoryMenu}.
Expand All @@ -45,6 +46,12 @@ public void addClickHandler(Consumer<CitizensInventoryClickEvent> func) {
handlers.add(func);
}

public void clear() {
handlers.clear();
actionFilter = null;
setItemStack(null);
}

@Override
public boolean equals(Object obj) {
if (this == obj) {
Expand Down Expand Up @@ -100,8 +107,8 @@ void initialise(MenuSlot data) {
if (meta != null) {
meta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES);
if (!data.lore().equals("EMPTY")) {
meta.setLore(
Arrays.asList(Colorizer.parseColors(Messaging.tryTranslate(data.lore())).split("\\n|\n")));
meta.setLore(Arrays
.asList(Colorizer.parseColors(Messaging.tryTranslate(data.lore())).split("\\n|\n|<br>")));
}
if (!data.title().equals("EMPTY")) {
meta.setDisplayName(Colorizer.parseColors(Messaging.tryTranslate(data.title())));
Expand All @@ -118,15 +125,17 @@ void onClick(CitizensInventoryClickEvent event) {
event.setCancelled(true);
event.setResult(Result.DENY);
}
for (Consumer<CitizensInventoryClickEvent> runnable : handlers) {
for (Consumer<CitizensInventoryClickEvent> runnable : Lists.newArrayList(handlers)) {
runnable.accept(event);
}
}

public void setDescription(String description) {
ItemStack item = inventory.getItem(index);
ItemMeta meta = item.getItemMeta();
meta.setLore(Arrays.asList(Colorizer.parseColors(description).split("\n")));
List<String> list = Arrays.asList(Colorizer.parseColors(description).split("\\n|\n|<br>"));
meta.setDisplayName(ChatColor.RESET + list.get(0));
meta.setLore(list.subList(1, list.size()));
meta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES);
item.setItemMeta(meta);
inventory.setItem(index, item);
Expand All @@ -153,11 +162,18 @@ public void setItemStack(ItemStack stack) {
inventory.setItem(index, stack);
}

public void setItemStack(ItemStack item, String description) {
ItemMeta meta = item.getItemMeta();
meta.setLore(Arrays.asList(Colorizer.parseColors(description).split("\n")));
public void setItemStack(ItemStack stack, String name) {
setItemStack(stack, name, null);
}

public void setItemStack(ItemStack stack, String name, String description) {
ItemMeta meta = stack.getItemMeta();
meta.setDisplayName(ChatColor.RESET + Colorizer.parseColors(name));
if (description != null) {
meta.setLore(Arrays.asList(Colorizer.parseColors(description).split("\n")));
}
meta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES);
item.setItemMeta(meta);
inventory.setItem(index, item);
stack.setItemMeta(meta);
inventory.setItem(index, stack);
}
}
10 changes: 10 additions & 0 deletions src/main/java/net/citizensnpcs/api/gui/MenuContext.java
Expand Up @@ -30,6 +30,16 @@ public MenuContext(InventoryMenu menu, InventoryMenuSlot[] slots, Inventory inve
this.data.putAll(data);
}

public void clearSlots() {
for (int i = 0; i < slots.length; i++) {
InventoryMenuSlot slot = slots[i];
if (slot != null) {
slot.clear();
}
slots[i] = null;
}
}

public Map<String, Object> data() {
return data;
}
Expand Down

0 comments on commit bf51c0c

Please sign in to comment.