Skip to content

Commit 2b51eef

Browse files
committed
fix: fix glitch, add config option for listening to interact event
1 parent abd52fb commit 2b51eef

File tree

5 files changed

+51
-9
lines changed

5 files changed

+51
-9
lines changed

build.gradle

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ plugins {
44
}
55

66
group = 'com.artillexstudios.axsmithing'
7-
version = '1.4'
7+
version = '1.5'
88

99
repositories {
1010
mavenCentral()

src/main/java/com/artillexstudios/axsmithing/gui/impl/SmithingTable_V1_16.java

+7-3
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import org.bukkit.Bukkit;
1111
import org.bukkit.Material;
1212
import org.bukkit.entity.Player;
13+
import org.bukkit.event.inventory.InventoryAction;
1314
import org.bukkit.event.inventory.InventoryClickEvent;
1415
import org.bukkit.event.inventory.InventoryCloseEvent;
1516
import org.bukkit.event.inventory.InventoryDragEvent;
@@ -217,9 +218,6 @@ private boolean checkRecipes(Inventory inv, ItemStack finalBase, ItemStack final
217218
}
218219

219220
private boolean checkRecipe(Inventory inventory, ItemStack finalBase, ItemStack finalAddition) {
220-
if (inventory.getItem(outputSlot) != null && !inventory.getItem(outputSlot).getType().isAir()) {
221-
return false;
222-
}
223221
Iterator<Recipe> recipeIterator = Bukkit.getServer().recipeIterator();
224222
while (recipeIterator.hasNext()) {
225223
inventory.setItem(outputSlot, new ItemStack(Material.AIR));
@@ -247,6 +245,12 @@ private boolean checkRecipe(Inventory inventory, ItemStack finalBase, ItemStack
247245
return false;
248246
}
249247

248+
249+
ItemStack it;
250+
if ((it = inventory.getItem(outputSlot)) != null && it.getType() == item.getType()) {
251+
return false;
252+
}
253+
250254
item.setItemMeta(baseItemMeta);
251255
inventory.setItem(outputSlot, item);
252256
return true;

src/main/java/com/artillexstudios/axsmithing/gui/impl/SmithingTable_V1_20.java

+12-4
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,6 @@ public void handleClick(InventoryClickEvent event) {
108108
if (!(event.getInventory().getHolder() instanceof SmithingTable_V1_20)) return;
109109

110110
if ((event.getSlot() == upgradeSlot || event.getSlot() == itemSlot || event.getSlot() == templateSlot) && event.getInventory().getItem(outputSlot) != null) {
111-
event.getInventory().setItem(outputSlot, null);
112111
if (checkRecipes(event.getInventory(), event.getInventory().getItem(templateSlot), event.getInventory().getItem(itemSlot), event.getInventory().getItem(upgradeSlot))) {
113112
event.getInventory().setItem(outputSlot, null);
114113
}
@@ -277,14 +276,12 @@ private boolean checkRecipes(Inventory inv, ItemStack finalTemplate, ItemStack f
277276
}
278277

279278
private boolean checkRecipe(Inventory inventory, ItemStack finalTemplate, ItemStack finalBase, ItemStack finalAddition) {
280-
if (inventory.getItem(outputSlot) != null && !inventory.getItem(outputSlot).getType().isAir()) {
281-
return false;
282-
}
283279
Iterator<Recipe> recipeIterator = Bukkit.getServer().recipeIterator();
284280
while (recipeIterator.hasNext()) {
285281
Recipe recipe = recipeIterator.next();
286282

287283
if (recipe instanceof SmithingTrimRecipe trimRecipe) {
284+
if (finalBase == null || finalAddition == null || finalTemplate == null) return false;
288285
boolean test1 = trimRecipe.getTemplate().test(finalTemplate);
289286
boolean test2 = trimRecipe.getBase().test(finalBase);
290287
boolean test3 = trimRecipe.getAddition().test(finalAddition);
@@ -299,6 +296,11 @@ private boolean checkRecipe(Inventory inventory, ItemStack finalTemplate, ItemSt
299296
clone.setItemMeta(armorMeta);
300297
}
301298

299+
ItemStack it;
300+
if ((it = inventory.getItem(outputSlot)) != null && it.getType() == clone.getType()) {
301+
return false;
302+
}
303+
302304
inventory.setItem(outputSlot, clone);
303305
return true;
304306
} else {
@@ -329,6 +331,12 @@ private boolean checkRecipe(Inventory inventory, ItemStack finalTemplate, ItemSt
329331
if (item == null) {
330332
return false;
331333
}
334+
335+
ItemStack it;
336+
if ((it = inventory.getItem(outputSlot)) != null && it.getType() == item.getType()) {
337+
return false;
338+
}
339+
332340
item.setItemMeta(baseItemMeta);
333341
inventory.setItem(outputSlot, item);
334342
return true;

src/main/java/com/artillexstudios/axsmithing/listener/InteractListener.java

+28
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,43 @@
44
import com.artillexstudios.axapi.utils.Version;
55
import com.artillexstudios.axsmithing.AxSmithingPlugin;
66
import com.viaversion.viaversion.api.Via;
7+
import org.bukkit.Material;
78
import org.bukkit.entity.Player;
9+
import org.bukkit.event.Event;
810
import org.bukkit.event.EventHandler;
911
import org.bukkit.event.Listener;
12+
import org.bukkit.event.block.Action;
1013
import org.bukkit.event.inventory.InventoryOpenEvent;
1114
import org.bukkit.event.inventory.InventoryType;
15+
import org.bukkit.event.player.PlayerInteractEvent;
1216
import org.jetbrains.annotations.NotNull;
1317

1418
public class InteractListener implements Listener {
1519

20+
@EventHandler
21+
public void onPlayerInteractEvent(@NotNull final PlayerInteractEvent event) {
22+
if (event.getClickedBlock() == null) return;
23+
if (event.getClickedBlock().getType() != Material.SMITHING_TABLE) return;
24+
if (event.getAction().equals(Action.LEFT_CLICK_BLOCK)) return;
25+
if (!AxSmithingPlugin.getConfiguration().getBoolean("listen-to-interact-event")) return;
26+
27+
if (AxSmithingPlugin.is1_20()) {
28+
if (Via.getAPI().getPlayerVersion(event.getPlayer()) >= Version.v1_20_1.protocolId && !AxSmithingPlugin.getConfiguration().getBoolean("menu.1_20.force-for-1_20-clients")) {
29+
return;
30+
}
31+
} else {
32+
if (Via.getAPI().getPlayerVersion(event.getPlayer()) != Version.v1_20_1.protocolId && Via.getAPI().getPlayerVersion(event.getPlayer()) != Version.v1_20_2.protocolId) {
33+
return;
34+
}
35+
}
36+
37+
event.setCancelled(true);
38+
event.setUseInteractedBlock(Event.Result.DENY);
39+
event.setUseItemInHand(Event.Result.DENY);
40+
event.getPlayer().closeInventory();
41+
AxSmithingPlugin.getSmithingTableImpl().open(event.getPlayer());
42+
}
43+
1644
@EventHandler
1745
public void onInventoryOpenEvent(@NotNull final InventoryOpenEvent event) {
1846
if (event.getInventory().getType() != InventoryType.SMITHING) return;

src/main/resources/config.yml

+3-1
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,11 @@ menu:
4343
- 14
4444
material: air
4545

46+
listen-to-interact-event: true
47+
4648
messages:
4749
prefix: "&#AA3428&lAxSmithing &7» "
4850
no-permission: "&cYou do not have permission to do this!"
4951
reload: "&aPlugin reloaded in %time%ms!"
5052

51-
config-version: 1
53+
config-version: 2

0 commit comments

Comments
 (0)