Skip to content

Commit a6e26cd

Browse files
committed
v2.1.0.1
1 parent a6ffc11 commit a6e26cd

5 files changed

Lines changed: 128 additions & 17 deletions

File tree

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ dependencies {
5454
}
5555

5656
group = 'me.byteful.plugin'
57-
version = '2.1.0'
57+
version = '2.1.0.1'
5858
description = 'LevelTools'
5959
java.sourceCompatibility = JavaVersion.VERSION_17
6060

src/main/java/me/byteful/plugin/leveltools/LevelToolsPlugin.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,10 @@
77
import me.byteful.plugin.leveltools.api.scheduler.Scheduler;
88
import me.byteful.plugin.leveltools.api.trigger.TriggerRegistry;
99
import me.byteful.plugin.leveltools.config.ConfigManager;
10-
import me.byteful.plugin.leveltools.listeners.AnvilListener;
10+
import me.byteful.plugin.leveltools.listeners.anvil.AnvilListener;
1111
import me.byteful.plugin.leveltools.listeners.BlockPlacementListener;
1212
import me.byteful.plugin.leveltools.listeners.TriggerListener;
13+
import me.byteful.plugin.leveltools.listeners.anvil.LegacyAnvilListener;
1314
import me.byteful.plugin.leveltools.profile.ProfileManager;
1415
import me.byteful.plugin.leveltools.util.LevelToolsUtil;
1516
import me.byteful.plugin.leveltools.util.UpdateChecker;
@@ -165,7 +166,11 @@ private void registerListeners() {
165166
final PluginManager pm = Bukkit.getPluginManager();
166167
pm.registerEvents(new BlockPlacementListener(blockDataManager, scheduler), this);
167168
pm.registerEvents(new TriggerListener(profileManager, triggerRegistry, blockDataManager), this);
168-
pm.registerEvents(new AnvilListener(), this);
169+
if (LevelToolsUtil.MID_VERSION <= 8) {
170+
pm.registerEvents(new LegacyAnvilListener(), this);
171+
} else {
172+
pm.registerEvents(new AnvilListener(), this);
173+
}
169174
}
170175

171176
public void reloadPlugin() {

src/main/java/me/byteful/plugin/leveltools/api/trigger/impl/FarmingTrigger.java

Lines changed: 43 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,35 @@
11
package me.byteful.plugin.leveltools.api.trigger.impl;
22

3+
import com.cryptomorin.xseries.XMaterial;
34
import me.byteful.plugin.leveltools.api.trigger.Trigger;
45
import me.byteful.plugin.leveltools.api.trigger.TriggerContext;
56
import me.byteful.plugin.leveltools.api.trigger.TriggerIds;
67
import me.byteful.plugin.leveltools.profile.trigger.TriggerProfile;
8+
import me.byteful.plugin.leveltools.util.LevelToolsUtil;
9+
import org.bukkit.CropState;
710
import org.bukkit.Material;
11+
import org.bukkit.NetherWartsState;
812
import org.bukkit.block.Block;
913
import org.bukkit.block.data.Ageable;
1014
import org.bukkit.block.data.BlockData;
1115
import org.bukkit.event.block.BlockBreakEvent;
1216
import org.bukkit.event.player.PlayerInteractEvent;
17+
import org.bukkit.material.CocoaPlant;
18+
import org.bukkit.material.Crops;
19+
import org.bukkit.material.MaterialData;
20+
import org.bukkit.material.NetherWarts;
1321
import org.jetbrains.annotations.NotNull;
1422

1523
import java.util.EnumSet;
1624
import java.util.Set;
1725

1826
public final class FarmingTrigger implements Trigger {
19-
private static final Set<Material> TILLABLE_BLOCKS = EnumSet.of(
20-
Material.DIRT,
21-
Material.GRASS_BLOCK,
22-
Material.DIRT_PATH,
23-
Material.COARSE_DIRT,
24-
Material.ROOTED_DIRT
27+
private static final Set<XMaterial> TILLABLE_BLOCKS = EnumSet.of(
28+
XMaterial.DIRT,
29+
XMaterial.GRASS_BLOCK,
30+
XMaterial.DIRT_PATH,
31+
XMaterial.COARSE_DIRT,
32+
XMaterial.ROOTED_DIRT
2533
);
2634

2735
@Override
@@ -41,21 +49,43 @@ public boolean canHandle(@NotNull TriggerContext context) {
4149
Material blockType = block.getType();
4250

4351
if (context.getOriginalEventAs(PlayerInteractEvent.class) != null) {
44-
if (!TILLABLE_BLOCKS.contains(blockType)) {
52+
if (!TILLABLE_BLOCKS.contains(XMaterial.matchXMaterial(blockType))) {
4553
return false;
4654
}
4755
return profile.isSourceAllowed("TILL");
4856
}
4957

5058
if (context.getOriginalEventAs(BlockBreakEvent.class) != null) {
51-
BlockData data = block.getBlockData();
52-
if (data instanceof Ageable) {
53-
Ageable ageable = (Ageable) data;
54-
if (ageable.getAge() < ageable.getMaximumAge()) {
55-
return false;
59+
if (LevelToolsUtil.MID_VERSION <= 12) {
60+
MaterialData data = block.getState().getData();
61+
62+
if (data instanceof Crops) {
63+
Crops crop = (Crops) data;
64+
if (crop.getState() != CropState.RIPE) {
65+
return false;
66+
}
67+
} else if (data instanceof NetherWarts) {
68+
NetherWarts wart = (NetherWarts) data;
69+
if (wart.getState() != NetherWartsState.RIPE) {
70+
return false;
71+
}
72+
} else if (data instanceof CocoaPlant) {
73+
CocoaPlant cocoa = (CocoaPlant) data;
74+
if (cocoa.getSize() != CocoaPlant.CocoaPlantSize.LARGE) {
75+
return false;
76+
}
5677
}
5778
} else {
58-
return false;
79+
BlockData data = block.getBlockData();
80+
81+
if (data instanceof Ageable) {
82+
Ageable ageable = (Ageable) data;
83+
if (ageable.getAge() < ageable.getMaximumAge()) {
84+
return false;
85+
}
86+
} else {
87+
return false;
88+
}
5989
}
6090

6191
return profile.isSourceAllowed(blockType.name());

src/main/java/me/byteful/plugin/leveltools/listeners/AnvilListener.java renamed to src/main/java/me/byteful/plugin/leveltools/listeners/anvil/AnvilListener.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package me.byteful.plugin.leveltools.listeners;
1+
package me.byteful.plugin.leveltools.listeners.anvil;
22

33
import me.byteful.plugin.leveltools.LevelToolsPlugin;
44
import me.byteful.plugin.leveltools.api.AnvilCombineMode;
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
package me.byteful.plugin.leveltools.listeners.anvil;
2+
3+
import me.byteful.plugin.leveltools.LevelToolsPlugin;
4+
import me.byteful.plugin.leveltools.api.AnvilCombineMode;
5+
import me.byteful.plugin.leveltools.api.item.LevelToolsItem;
6+
import me.byteful.plugin.leveltools.model.LevelAndXPModel;
7+
import me.byteful.plugin.leveltools.util.LevelToolsUtil;
8+
import org.bukkit.event.EventHandler;
9+
import org.bukkit.event.EventPriority;
10+
import org.bukkit.event.Listener;
11+
import org.bukkit.event.inventory.InventoryClickEvent;
12+
import org.bukkit.inventory.AnvilInventory;
13+
import org.bukkit.inventory.ItemStack;
14+
15+
public class LegacyAnvilListener implements Listener {
16+
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
17+
public void onAnvilCombine(InventoryClickEvent e) {
18+
if (!(e.getInventory() instanceof AnvilInventory)) return;
19+
20+
final AnvilInventory inv = ((AnvilInventory) e.getInventory());
21+
final ItemStack firstItem = inv.getItem(0);
22+
final ItemStack secondItem = inv.getItem(1);
23+
final ItemStack result = inv.getItem(2);
24+
25+
if (result == null
26+
|| !LevelToolsUtil.isSupportedTool(result.getType())
27+
|| firstItem == null
28+
|| secondItem == null
29+
|| !LevelToolsUtil.isSupportedTool(firstItem.getType())
30+
|| !LevelToolsUtil.isSupportedTool(secondItem.getType())) {
31+
return;
32+
}
33+
34+
final AnvilCombineMode mode = LevelToolsPlugin.getInstance().getAnvilCombineMode();
35+
final LevelAndXPModel first =
36+
LevelAndXPModel.fromItem(LevelToolsUtil.createLevelToolsItem(firstItem));
37+
final LevelAndXPModel second =
38+
LevelAndXPModel.fromItem(LevelToolsUtil.createLevelToolsItem(secondItem));
39+
final LevelAndXPModel finished = mode.getHandler().apply(first, second);
40+
final LevelToolsItem finalItem = LevelToolsUtil.createLevelToolsItem(result);
41+
finalItem.setLevel(finished.getLevel());
42+
finalItem.setXp(finished.getXp());
43+
44+
inv.setItem(2, finalItem.getItemStack());
45+
}
46+
47+
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
48+
public void onAnvilRepair(InventoryClickEvent e) {
49+
if (!(e.getInventory() instanceof AnvilInventory)) return;
50+
51+
final AnvilInventory inv = (AnvilInventory) e.getInventory();
52+
final ItemStack firstItem = inv.getItem(0);
53+
final ItemStack secondItem = inv.getItem(1);
54+
final ItemStack result = inv.getItem(2);
55+
56+
if (result == null
57+
|| !LevelToolsUtil.isSupportedTool(result.getType())
58+
|| firstItem == null
59+
|| secondItem == null
60+
|| !LevelToolsUtil.isSupportedTool(firstItem.getType())) {
61+
return;
62+
}
63+
64+
if (LevelToolsUtil.isSupportedTool(secondItem.getType())) {
65+
return;
66+
}
67+
68+
final LevelToolsItem original = LevelToolsUtil.createLevelToolsItem(firstItem);
69+
final LevelToolsItem finalItem = LevelToolsUtil.createLevelToolsItem(result);
70+
finalItem.setLevel(original.getLevel());
71+
finalItem.setXp(original.getXp());
72+
finalItem.setLastHandledReward(original.getLastHandledReward());
73+
74+
inv.setItem(2, finalItem.getItemStack());
75+
}
76+
}

0 commit comments

Comments
 (0)