Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 16 additions & 9 deletions NMS/src/main/templates/AbstractNMSAdapter.java.template
Original file line number Diff line number Diff line change
Expand Up @@ -17,15 +17,12 @@ import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.item.ItemEntity;
import net.minecraft.world.inventory.AnvilMenu;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Items;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.state.BlockState;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.block.BlockFace;
import ${CRAFTBUKKIT_PACKAGE}.CraftWorld;
import ${CRAFTBUKKIT_PACKAGE}.block.data.CraftBlockData;
import ${CRAFTBUKKIT_PACKAGE}.entity.CraftItem;
import ${CRAFTBUKKIT_PACKAGE}.entity.CraftLivingEntity;
import ${CRAFTBUKKIT_PACKAGE}.inventory.CraftInventoryView;
Expand All @@ -43,16 +40,20 @@ import org.bukkit.inventory.RecipeChoice;
import org.bukkit.inventory.ShapedRecipe;
import org.bukkit.inventory.ShapelessRecipe;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.Tag;

import java.util.ArrayList;
import java.util.Collection;
import java.util.EnumMap;
import java.util.List;

public abstract class AbstractNMSAdapter implements NMSAdapter {

private static final ReflectField<ItemStack> ITEM_STACK_HANDLE = new ReflectField<>(
CraftItemStack.class, ItemStack.class, "handle");

private static final EnumMap<Material, DestroySpeedCategory> DESTROY_SPEED_CATEGORIES = new EnumMap<>(Material.class);

@Override
public void loadLegacy() {
// Load legacy by accessing the CraftLegacy class.
Expand Down Expand Up @@ -140,15 +141,21 @@ public abstract class AbstractNMSAdapter implements NMSAdapter {

@Override
public DestroySpeedCategory getDestroySpeedCategory(Material material) {
BlockState blockState = ((CraftBlockData) material.createBlockData()).getState();
return DESTROY_SPEED_CATEGORIES.computeIfAbsent(material, mat -> {
if (Tag.MINEABLE_AXE.isTagged(mat)) {
return DestroySpeedCategory.AXE;
}

if (Items.DIAMOND_AXE.getDestroySpeed(new ItemStack(Items.DIAMOND_AXE), blockState) == 8f)
return DestroySpeedCategory.AXE;
if (Tag.MINEABLE_HOE.isTagged(mat)) {
return DestroySpeedCategory.HOE;
}

if (Items.DIAMOND_SHOVEL.getDestroySpeed(new ItemStack(Items.DIAMOND_SHOVEL), blockState) == 8f)
return DestroySpeedCategory.SHOVEL;
if (Tag.MINEABLE_SHOVEL.isTagged(mat)) {
return DestroySpeedCategory.SHOVEL;
}

return DestroySpeedCategory.PICKAXE;
return DestroySpeedCategory.PICKAXE;
});
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,12 +40,18 @@
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Collection;
import java.util.EnumMap;

public class NMSAdapterImpl implements NMSAdapter {

private static final ReflectField<ItemStack> ITEM_STACK_HANDLE = new ReflectField<>(CraftItemStack.class, ItemStack.class, "handle");

private static final EnumMap<Material, DestroySpeedCategory> DESTROY_SPEED_CATEGORIES = new EnumMap<>(Material.class);

private static final Enchantment GLOW_ENCHANT = initializeGlowEnchantment();
private static final ItemStack DIAMOND_AXE_ITEM_STACK = new ItemStack(Items.DIAMOND_AXE);
private static final ItemStack DIAMOND_HOE_ITEM_STACK = new ItemStack(Items.DIAMOND_HOE);
private static final ItemStack DIAMOND_SHOVEL_ITEM_STACK = new ItemStack(Items.DIAMOND_SHOVEL);

@Override
public ToolItemStack createToolItemStack(org.bukkit.inventory.ItemStack bukkitItem) {
Expand Down Expand Up @@ -123,15 +129,23 @@ public void playPickupAnimation(LivingEntity livingEntity, org.bukkit.entity.Ite

@Override
public DestroySpeedCategory getDestroySpeedCategory(Material material) {
IBlockData blockData = CraftMagicNumbers.getBlock(material).getBlockData();
return DESTROY_SPEED_CATEGORIES.computeIfAbsent(material, mat -> {
IBlockData blockData = CraftMagicNumbers.getBlock(mat).getBlockData();

if (Items.DIAMOND_AXE.getDestroySpeed(new ItemStack(Items.DIAMOND_AXE), blockData) == 8f)
return DestroySpeedCategory.AXE;
if (Items.DIAMOND_AXE.getDestroySpeed(DIAMOND_AXE_ITEM_STACK, blockData) == 8f) {
return DestroySpeedCategory.AXE;
}

if (Items.DIAMOND_SHOVEL.getDestroySpeed(new ItemStack(Items.DIAMOND_SHOVEL), blockData) == 8f)
return DestroySpeedCategory.SHOVEL;
if (Items.DIAMOND_HOE.getDestroySpeed(DIAMOND_HOE_ITEM_STACK, blockData) == 8f) {
return DestroySpeedCategory.HOE;
}

if (Items.DIAMOND_SHOVEL.getDestroySpeed(DIAMOND_SHOVEL_ITEM_STACK, blockData) == 8f) {
return DestroySpeedCategory.SHOVEL;
}

return DestroySpeedCategory.PICKAXE;
return DestroySpeedCategory.PICKAXE;
});
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,13 +47,19 @@
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Collection;
import java.util.EnumMap;
import java.util.List;

public class NMSAdapterImpl implements NMSAdapter {

private static final ReflectField<ItemStack> ITEM_STACK_HANDLE = new ReflectField<>(CraftItemStack.class, ItemStack.class, "handle");

private static final EnumMap<Material, DestroySpeedCategory> DESTROY_SPEED_CATEGORIES = new EnumMap<>(Material.class);

private static final Enchantment GLOW_ENCHANT = initializeGlowEnchantment();
private static final ItemStack DIAMOND_AXE_ITEM_STACK = new ItemStack(Items.DIAMOND_AXE);
private static final ItemStack DIAMOND_HOE_ITEM_STACK = new ItemStack(Items.DIAMOND_HOE);
private static final ItemStack DIAMOND_SHOVEL_ITEM_STACK = new ItemStack(Items.DIAMOND_SHOVEL);

@Override
public ToolItemStack createToolItemStack(org.bukkit.inventory.ItemStack bukkitItem) {
Expand Down Expand Up @@ -131,15 +137,23 @@ public void playPickupAnimation(LivingEntity livingEntity, org.bukkit.entity.Ite

@Override
public DestroySpeedCategory getDestroySpeedCategory(Material material) {
IBlockData blockData = CraftMagicNumbers.getBlock(material).getBlockData();
return DESTROY_SPEED_CATEGORIES.computeIfAbsent(material, mat -> {
IBlockData blockData = CraftMagicNumbers.getBlock(mat).getBlockData();

if (Items.DIAMOND_AXE.getDestroySpeed(new ItemStack(Items.DIAMOND_AXE), blockData) == 8f)
return DestroySpeedCategory.AXE;
if (Items.DIAMOND_AXE.getDestroySpeed(DIAMOND_AXE_ITEM_STACK, blockData) == 8f) {
return DestroySpeedCategory.AXE;
}

if (Items.DIAMOND_SHOVEL.getDestroySpeed(new ItemStack(Items.DIAMOND_SHOVEL), blockData) == 8f)
return DestroySpeedCategory.SHOVEL;
if (Items.DIAMOND_HOE.getDestroySpeed(DIAMOND_HOE_ITEM_STACK, blockData) == 8f) {
return DestroySpeedCategory.HOE;
}

if (Items.DIAMOND_SHOVEL.getDestroySpeed(DIAMOND_SHOVEL_ITEM_STACK, blockData) == 8f) {
return DestroySpeedCategory.SHOVEL;
}

return DestroySpeedCategory.PICKAXE;
return DestroySpeedCategory.PICKAXE;
});
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,13 +35,19 @@
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.EnumMap;
import java.util.List;

public class NMSAdapterImpl implements NMSAdapter {

private static final ReflectField<ItemStack> ITEM_STACK_HANDLE = new ReflectField<>(CraftItemStack.class, ItemStack.class, "handle");

private static final EnumMap<Material, DestroySpeedCategory> DESTROY_SPEED_CATEGORIES = new EnumMap<>(Material.class);

private static final Enchantment GLOW_ENCHANT = initializeGlowEnchantment();
private static final ItemStack DIAMOND_AXE_ITEM_STACK = new ItemStack(Items.DIAMOND_AXE);
private static final ItemStack DIAMOND_HOE_ITEM_STACK = new ItemStack(Items.DIAMOND_HOE);
private static final ItemStack DIAMOND_SPADE_ITEM_STACK = new ItemStack(Items.DIAMOND_SPADE);

@Override
public org.bukkit.inventory.ItemStack getItemInHand(Player player) {
Expand Down Expand Up @@ -118,15 +124,23 @@ public void playPickupAnimation(LivingEntity livingEntity, org.bukkit.entity.Ite

@Override
public DestroySpeedCategory getDestroySpeedCategory(Material material) {
Block block = CraftMagicNumbers.getBlock(material);
return DESTROY_SPEED_CATEGORIES.computeIfAbsent(material, mat -> {
Block block = CraftMagicNumbers.getBlock(mat);

if (Items.DIAMOND_AXE.getDestroySpeed(new ItemStack(Items.DIAMOND_AXE), block) == 8f)
return DestroySpeedCategory.AXE;
if (Items.DIAMOND_AXE.getDestroySpeed(DIAMOND_AXE_ITEM_STACK, block) == 8f) {
return DestroySpeedCategory.AXE;
}

if (Items.DIAMOND_SPADE.getDestroySpeed(new ItemStack(Items.DIAMOND_SPADE), block) == 8f)
return DestroySpeedCategory.SHOVEL;
if (Items.DIAMOND_HOE.getDestroySpeed(DIAMOND_HOE_ITEM_STACK, block) == 8f) {
return DestroySpeedCategory.HOE;
}

if (Items.DIAMOND_SPADE.getDestroySpeed(DIAMOND_SPADE_ITEM_STACK, block) == 8f) {
return DestroySpeedCategory.SHOVEL;
}

return DestroySpeedCategory.PICKAXE;
return DestroySpeedCategory.PICKAXE;
});
}

private static Enchantment initializeGlowEnchantment() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,12 +33,18 @@
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Collection;
import java.util.EnumMap;

public class NMSAdapterImpl implements NMSAdapter {

private static final ReflectField<ItemStack> ITEM_STACK_HANDLE = new ReflectField<>(CraftItemStack.class, ItemStack.class, "handle");

private static final EnumMap<Material, DestroySpeedCategory> DESTROY_SPEED_CATEGORIES = new EnumMap<>(Material.class);

private static final Enchantment GLOW_ENCHANT = initializeGlowEnchantment();
private static final ItemStack DIAMOND_AXE_ITEM_STACK = new ItemStack(Items.DIAMOND_AXE);
private static final ItemStack DIAMOND_HOE_ITEM_STACK = new ItemStack(Items.DIAMOND_HOE);
private static final ItemStack DIAMOND_SHOVEL_ITEM_STACK = new ItemStack(Items.DIAMOND_SHOVEL);

@Override
public ToolItemStack createToolItemStack(org.bukkit.inventory.ItemStack bukkitItem) {
Expand Down Expand Up @@ -106,15 +112,23 @@ public void playPickupAnimation(LivingEntity livingEntity, org.bukkit.entity.Ite

@Override
public DestroySpeedCategory getDestroySpeedCategory(Material material) {
Block block = CraftMagicNumbers.getBlock(material);
return DESTROY_SPEED_CATEGORIES.computeIfAbsent(material, mat -> {
Block block = CraftMagicNumbers.getBlock(mat);

if (Items.DIAMOND_AXE.getDestroySpeed(new ItemStack(Items.DIAMOND_AXE), block) == 8f)
return DestroySpeedCategory.AXE;
if (Items.DIAMOND_AXE.getDestroySpeed(DIAMOND_AXE_ITEM_STACK, block) == 8f) {
return DestroySpeedCategory.AXE;
}

if (Items.DIAMOND_SHOVEL.getDestroySpeed(new ItemStack(Items.DIAMOND_SHOVEL), block) == 8f)
return DestroySpeedCategory.SHOVEL;
if (Items.DIAMOND_HOE.getDestroySpeed(DIAMOND_HOE_ITEM_STACK, block) == 8f) {
return DestroySpeedCategory.HOE;
}

if (Items.DIAMOND_SHOVEL.getDestroySpeed(DIAMOND_SHOVEL_ITEM_STACK, block) == 8f) {
return DestroySpeedCategory.SHOVEL;
}

return DestroySpeedCategory.PICKAXE;
return DestroySpeedCategory.PICKAXE;
});
}

private static Enchantment initializeGlowEnchantment() {
Expand Down
3 changes: 3 additions & 0 deletions src/main/java/com/bgsoftware/wildtools/WildToolsPlugin.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import com.bgsoftware.wildtools.listeners.PlayerListener;
import com.bgsoftware.wildtools.nms.NMSAdapter;
import com.bgsoftware.wildtools.nms.NMSWorld;
import com.bgsoftware.wildtools.utils.items.OmniToolHelper;
import org.bstats.bukkit.Metrics;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.InventoryType;
Expand Down Expand Up @@ -70,6 +71,8 @@ public void onEnable() {

log("******** ENABLE START ********");

OmniToolHelper.init();

try {
Class.forName("org.bukkit.event.inventory.PrepareAnvilEvent");
getServer().getPluginManager().registerEvents(new AnvilListener(this), this);
Expand Down
Loading