Skip to content

Commit b054264

Browse files
committed
Fixes, added opening on inventory open event, added really really really ugly way to be able to put ingredients in any order
1 parent 57b5cfd commit b054264

File tree

5 files changed

+119
-60
lines changed

5 files changed

+119
-60
lines changed

src/main/java/com/artillexstudios/axsmithing/AxSmithingPlugin.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import com.artillexstudios.axsmithing.command.AxSmithingCommand;
44
import com.artillexstudios.axsmithing.command.AxSmithingTabComplete;
5-
import com.artillexstudios.axsmithing.dependency.DependencyManager;
65
import com.artillexstudios.axsmithing.gui.SmithingTable;
76
import com.artillexstudios.axsmithing.gui.impl.SmithingTable_V1_16;
87
import com.artillexstudios.axsmithing.gui.impl.SmithingTable_V1_20;

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

Lines changed: 29 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -165,26 +165,36 @@ private void updateGui(Inventory inv) {
165165
ItemStack finalAddition = addition;
166166
ItemStack finalBase = base;
167167

168-
Iterator<Recipe> recipeIterator = Bukkit.getServer().recipeIterator();
169-
while (recipeIterator.hasNext()) {
170-
inv.setItem(outputSlot, new ItemStack(Material.AIR));
171-
Recipe recipe = recipeIterator.next();
172-
173-
if (recipe instanceof SmithingRecipe smithingRecipe) {
174-
boolean test1 = smithingRecipe.getBase().getItemStack().getType() == finalBase.getType();
175-
ItemMeta baseItemMeta = finalBase.getItemMeta();
176-
boolean test2 = smithingRecipe.getAddition().getItemStack().getType() == finalAddition.getType();
177-
178-
if (test1 && test2) {
179-
ItemStack item = smithingRecipe.getResult();
180-
item.setItemMeta(baseItemMeta);
181-
inv.setItem(outputSlot, item);
182-
break;
183-
} else {
184-
inv.setItem(outputSlot, new ItemStack(Material.AIR));
185-
}
186-
}
168+
boolean successful = checkRecipe(inv, finalBase, finalAddition);
169+
170+
if (!successful) {
171+
checkRecipe(inv, finalAddition, finalBase);
187172
}
188173
}, 0L);
189174
}
175+
176+
private boolean checkRecipe(Inventory inventory, ItemStack finalBase, ItemStack finalAddition) {
177+
Iterator<Recipe> recipeIterator = Bukkit.getServer().recipeIterator();
178+
while (recipeIterator.hasNext()) {
179+
inventory.setItem(outputSlot, new ItemStack(Material.AIR));
180+
Recipe recipe = recipeIterator.next();
181+
182+
if (recipe instanceof SmithingRecipe smithingRecipe) {
183+
boolean test1 = smithingRecipe.getBase().test(finalBase);
184+
ItemMeta baseItemMeta = finalBase.getItemMeta();
185+
boolean test2 = smithingRecipe.getAddition().test(finalAddition);
186+
187+
if (test1 && test2) {
188+
ItemStack item = smithingRecipe.getResult();
189+
item.setItemMeta(baseItemMeta);
190+
inventory.setItem(outputSlot, item);
191+
return true;
192+
} else {
193+
inventory.setItem(outputSlot, new ItemStack(Material.AIR));
194+
}
195+
}
196+
}
197+
198+
return false;
199+
}
190200
}

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

Lines changed: 68 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,8 @@ public void handleClick(InventoryClickEvent event) {
9595
} else {
9696
event.getInventory().getItem(templateSlot).setAmount(amount);
9797
}
98+
99+
((Player) event.getWhoClicked()).updateInventory();
98100
}
99101

100102
if (event.getInventory().getItem(itemSlot) != null) {
@@ -104,6 +106,8 @@ public void handleClick(InventoryClickEvent event) {
104106
} else {
105107
event.getInventory().getItem(itemSlot).setAmount(amount);
106108
}
109+
110+
((Player) event.getWhoClicked()).updateInventory();
107111
}
108112

109113
if (event.getInventory().getItem(upgradeSlot) != null) {
@@ -113,6 +117,8 @@ public void handleClick(InventoryClickEvent event) {
113117
} else {
114118
event.getInventory().getItem(upgradeSlot).setAmount(amount);
115119
}
120+
121+
((Player) event.getWhoClicked()).updateInventory();
116122
}
117123

118124
return;
@@ -198,50 +204,73 @@ private void updateGui(Inventory inv) {
198204
ItemStack finalAddition = addition;
199205
ItemStack finalBase = base;
200206

201-
Iterator<Recipe> recipeIterator = Bukkit.getServer().recipeIterator();
202-
while (recipeIterator.hasNext()) {
203-
inv.setItem(outputSlot, new ItemStack(Material.AIR));
204-
Recipe recipe = recipeIterator.next();
205-
206-
if (recipe instanceof SmithingTrimRecipe trimRecipe) {
207-
boolean test1 = trimRecipe.getTemplate().test(finalTemplate);
208-
boolean test2 = trimRecipe.getBase().test(finalBase);
209-
boolean test3 = trimRecipe.getAddition().test(finalAddition);
210-
211-
if (test1 && test2 && test3) {
212-
ItemStack clone = finalBase.clone();
213-
ItemMeta meta = clone.getItemMeta();
214-
if (meta instanceof ArmorMeta armorMeta) {
215-
ArmorTrim trim = armorTrim(finalAddition, finalTemplate);
216-
217-
armorMeta.setTrim(trim);
218-
clone.setItemMeta(armorMeta);
219-
}
220-
221-
inv.setItem(outputSlot, clone);
222-
break;
223-
} else {
224-
inv.setItem(outputSlot, new ItemStack(Material.AIR));
207+
// Very very very ugly solution, but I guess, it works!
208+
boolean successful = checkRecipe(inv, finalBase, finalAddition, finalTemplate);
209+
if (!successful) {
210+
successful = checkRecipe(inv, finalBase, finalTemplate, finalAddition);
211+
}
212+
if (!successful) {
213+
successful = checkRecipe(inv, finalTemplate, finalBase, finalAddition);
214+
}
215+
if (!successful) {
216+
successful = checkRecipe(inv, finalTemplate, finalAddition, finalBase);
217+
}
218+
if (!successful) {
219+
successful = checkRecipe(inv, finalAddition, finalBase, finalTemplate);
220+
}
221+
if (!successful) {
222+
checkRecipe(inv, finalAddition, finalTemplate, finalBase);
223+
}
224+
225+
}, 0L);
226+
}
227+
228+
private boolean checkRecipe(Inventory inventory, ItemStack finalTemplate, ItemStack finalBase, ItemStack finalAddition) {
229+
Iterator<Recipe> recipeIterator = Bukkit.getServer().recipeIterator();
230+
while (recipeIterator.hasNext()) {
231+
inventory.setItem(outputSlot, new ItemStack(Material.AIR));
232+
Recipe recipe = recipeIterator.next();
233+
234+
if (recipe instanceof SmithingTrimRecipe trimRecipe) {
235+
boolean test1 = trimRecipe.getTemplate().test(finalTemplate);
236+
boolean test2 = trimRecipe.getBase().test(finalBase);
237+
boolean test3 = trimRecipe.getAddition().test(finalAddition);
238+
239+
if (test1 && test2 && test3) {
240+
ItemStack clone = finalBase.clone();
241+
ItemMeta meta = clone.getItemMeta();
242+
if (meta instanceof ArmorMeta armorMeta) {
243+
ArmorTrim trim = armorTrim(finalAddition, finalTemplate);
244+
245+
armorMeta.setTrim(trim);
246+
clone.setItemMeta(armorMeta);
225247
}
248+
249+
inventory.setItem(outputSlot, clone);
250+
return true;
251+
} else {
252+
inventory.setItem(outputSlot, new ItemStack(Material.AIR));
226253
}
254+
}
227255

228-
if (recipe instanceof SmithingTransformRecipe transformRecipe) {
229-
boolean test1 = transformRecipe.getTemplate().getItemStack().getType() == finalTemplate.getType();
230-
boolean test2 = transformRecipe.getBase().getItemStack().getType() == finalBase.getType();
231-
ItemMeta baseItemMeta = finalBase.getItemMeta();
232-
boolean test3 = transformRecipe.getAddition().getItemStack().getType() == finalAddition.getType();
233-
234-
if (test1 && test2 && test3) {
235-
ItemStack item = transformRecipe.getResult();
236-
item.setItemMeta(baseItemMeta);
237-
inv.setItem(outputSlot, item);
238-
break;
239-
} else {
240-
inv.setItem(outputSlot, new ItemStack(Material.AIR));
241-
}
256+
if (recipe instanceof SmithingTransformRecipe transformRecipe) {
257+
boolean test1 = transformRecipe.getTemplate().test(finalTemplate);
258+
boolean test2 = transformRecipe.getBase().test(finalBase);
259+
ItemMeta baseItemMeta = finalBase.getItemMeta();
260+
boolean test3 = transformRecipe.getAddition().test(finalAddition);
261+
262+
if (test1 && test2 && test3) {
263+
ItemStack item = transformRecipe.getResult();
264+
item.setItemMeta(baseItemMeta);
265+
inventory.setItem(outputSlot, item);
266+
return true;
267+
} else {
268+
inventory.setItem(outputSlot, new ItemStack(Material.AIR));
242269
}
243270
}
244-
}, 0L);
271+
}
272+
273+
return false;
245274
}
246275

247276
@Nullable

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

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,13 @@
55
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion;
66
import org.bukkit.Bukkit;
77
import org.bukkit.Material;
8+
import org.bukkit.entity.Player;
89
import org.bukkit.event.Event;
910
import org.bukkit.event.EventHandler;
1011
import org.bukkit.event.Listener;
1112
import org.bukkit.event.block.Action;
13+
import org.bukkit.event.inventory.InventoryOpenEvent;
14+
import org.bukkit.event.inventory.InventoryType;
1215
import org.bukkit.event.player.PlayerInteractEvent;
1316
import org.jetbrains.annotations.NotNull;
1417

@@ -36,4 +39,22 @@ public void onPlayerInteractEvent(@NotNull final PlayerInteractEvent event) {
3639
event.getPlayer().closeInventory();
3740
AxSmithingPlugin.getSmithingTableImpl().open(event.getPlayer());
3841
}
42+
43+
@EventHandler
44+
public void onInventoryOpenEvent(@NotNull final InventoryOpenEvent event) {
45+
if (event.getInventory().getType() != InventoryType.SMITHING) return;
46+
47+
if (AxSmithingPlugin.is1_20()) {
48+
if (Via.getAPI().getPlayerVersion(event.getPlayer()) >= ProtocolVersion.v1_20.getVersion() && !AxSmithingPlugin.getConfiguration().getBoolean("menu.1_20.force-for-1_20-clients")) {
49+
return;
50+
}
51+
} else {
52+
if (Via.getAPI().getPlayerVersion(event.getPlayer()) != ProtocolVersion.v1_20.getVersion()) {
53+
return;
54+
}
55+
}
56+
57+
event.getPlayer().closeInventory();
58+
AxSmithingPlugin.getSmithingTableImpl().open((Player) event.getPlayer());
59+
}
3960
}

src/main/java/com/artillexstudios/axsmithing/utils/ItemBuilder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ private void setName() {
5050
replacements.forEach((key, value) -> message.set(message.get().replace(key, value)));
5151

5252
ItemMeta meta = item.getItemMeta();
53-
meta.setDisplayName(StringUtils.format(String.valueOf(message)));
53+
meta.setDisplayName(StringUtils.format(message.get()));
5454

5555
item.setItemMeta(meta);
5656
}

0 commit comments

Comments
 (0)