mirror of
https://github.com/StarWishsama/Slimefun4.git
synced 2024-09-20 11:45:51 +00:00
Some Performance Improvements
This commit is contained in:
parent
804bea553b
commit
ebed466d69
@ -27,6 +27,7 @@ import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
|
||||
import me.mrCookieSlime.CSCoreLibPlugin.general.Particles.FireworkShow;
|
||||
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
|
||||
import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunBlockHandler;
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.HandledBlock;
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason;
|
||||
@ -42,9 +43,9 @@ import me.mrCookieSlime.Slimefun.utils.Utilities;
|
||||
public class ToolListener implements Listener {
|
||||
|
||||
// Materials that require a Block under it, e.g. Pressure Plates
|
||||
private Set<Material> sensitiveMaterials = new HashSet<>();
|
||||
private Random random = new Random();
|
||||
private Utilities utilities;
|
||||
private final Set<Material> sensitiveMaterials = new HashSet<>();
|
||||
private final Random random = new Random();
|
||||
private final Utilities utilities;
|
||||
|
||||
public ToolListener(SlimefunPlugin plugin) {
|
||||
plugin.getServer().getPluginManager().registerEvents(this, plugin);
|
||||
@ -53,8 +54,8 @@ public class ToolListener implements Listener {
|
||||
sensitiveMaterials.add(Material.STONE_PRESSURE_PLATE);
|
||||
sensitiveMaterials.add(Material.LIGHT_WEIGHTED_PRESSURE_PLATE);
|
||||
sensitiveMaterials.add(Material.HEAVY_WEIGHTED_PRESSURE_PLATE);
|
||||
Tag.SAPLINGS.getValues().forEach(mat -> sensitiveMaterials.add(mat));
|
||||
Tag.WOODEN_PRESSURE_PLATES.getValues().forEach(mat -> sensitiveMaterials.add(mat));
|
||||
Tag.SAPLINGS.getValues().forEach(sensitiveMaterials::add);
|
||||
Tag.WOODEN_PRESSURE_PLATES.getValues().forEach(sensitiveMaterials::add);
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
||||
@ -68,14 +69,20 @@ public class ToolListener implements Listener {
|
||||
|
||||
SlimefunItem sfItem = SlimefunItem.getByItem(item);
|
||||
if (sfItem != null && !sfItem.isDisabled() && !(sfItem instanceof NotPlaceable)) {
|
||||
BlockStorage.addBlockInfo(e.getBlock(), "id", sfItem.getID(), true);
|
||||
|
||||
if (utilities.blockHandlers.containsKey(sfItem.getID())) {
|
||||
utilities.blockHandlers.get(sfItem.getID()).onPlace(e.getPlayer(), e.getBlock(), sfItem);
|
||||
if (Slimefun.hasUnlocked(e.getPlayer(), sfItem, true)) {
|
||||
e.setCancelled(true);
|
||||
}
|
||||
else {
|
||||
for (ItemHandler handler : SlimefunItem.getHandlers("BlockPlaceHandler")) {
|
||||
if (((BlockPlaceHandler) handler).onBlockPlace(e, item)) break;
|
||||
BlockStorage.addBlockInfo(e.getBlock(), "id", sfItem.getID(), true);
|
||||
|
||||
SlimefunBlockHandler blockHandler = utilities.blockHandlers.get(sfItem.getID());
|
||||
if (blockHandler != null) {
|
||||
blockHandler.onPlace(e.getPlayer(), e.getBlock(), sfItem);
|
||||
}
|
||||
else {
|
||||
for (ItemHandler handler : SlimefunItem.getHandlers("BlockPlaceHandler")) {
|
||||
if (((BlockPlaceHandler) handler).onBlockPlace(e, item)) break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -128,7 +135,11 @@ public class ToolListener implements Listener {
|
||||
}
|
||||
else if (SlimefunManager.isItemSimiliar(item, SlimefunItems.CHRISTMAS_PRESENT, false)) {
|
||||
e.setCancelled(true);
|
||||
if (e.getPlayer().getGameMode() != GameMode.CREATIVE) ItemUtils.consumeItem(item, false);
|
||||
|
||||
if (e.getPlayer().getGameMode() != GameMode.CREATIVE) {
|
||||
ItemUtils.consumeItem(item, false);
|
||||
}
|
||||
|
||||
FireworkShow.launchRandom(e.getPlayer(), 3);
|
||||
List<ItemStack> gifts = new ArrayList<>();
|
||||
|
||||
@ -184,9 +195,11 @@ public class ToolListener implements Listener {
|
||||
SlimefunItem sfItem = BlockStorage.check(e.getBlock().getRelative(BlockFace.UP));
|
||||
|
||||
if (sfItem != null && !(sfItem instanceof HandledBlock)) {
|
||||
if (utilities.blockHandlers.containsKey(sfItem.getID())) {
|
||||
allow = utilities.blockHandlers.get(sfItem.getID()).onBreak(e.getPlayer(), block2, sfItem, UnregisterReason.PLAYER_BREAK);
|
||||
SlimefunBlockHandler blockHandler = utilities.blockHandlers.get(sfItem.getID());
|
||||
if (blockHandler != null) {
|
||||
allow = blockHandler.onBreak(e.getPlayer(), block2, sfItem, UnregisterReason.PLAYER_BREAK);
|
||||
}
|
||||
|
||||
if (allow) {
|
||||
block2.getWorld().dropItemNaturally(block2.getLocation(), BlockStorage.retrieve(block2));
|
||||
block2.setType(Material.AIR);
|
||||
@ -201,8 +214,9 @@ public class ToolListener implements Listener {
|
||||
SlimefunItem sfItem = BlockStorage.check(e.getBlock());
|
||||
|
||||
if (sfItem != null && !(sfItem instanceof HandledBlock)) {
|
||||
if (utilities.blockHandlers.containsKey(sfItem.getID())) {
|
||||
allow = utilities.blockHandlers.get(sfItem.getID()).onBreak(e.getPlayer(), e.getBlock(), sfItem, UnregisterReason.PLAYER_BREAK);
|
||||
SlimefunBlockHandler blockHandler = utilities.blockHandlers.get(sfItem.getID());
|
||||
if (blockHandler != null) {
|
||||
allow = blockHandler.onBreak(e.getPlayer(), e.getBlock(), sfItem, UnregisterReason.PLAYER_BREAK);
|
||||
}
|
||||
else {
|
||||
// Walk over all registered block break handlers until one says that it'll handle it.
|
||||
@ -254,10 +268,11 @@ public class ToolListener implements Listener {
|
||||
blocks.remove();
|
||||
if (!id.equalsIgnoreCase("HARDENED_GLASS") && !id.equalsIgnoreCase("WITHER_PROOF_OBSIDIAN") && !id.equalsIgnoreCase("WITHER_PROOF_GLASS") && !id.equalsIgnoreCase("FORCEFIELD_PROJECTOR") && !id.equalsIgnoreCase("FORCEFIELD_RELAY")) {
|
||||
boolean success = true;
|
||||
SlimefunItem item = SlimefunItem.getByID(id);
|
||||
SlimefunItem sfItem = SlimefunItem.getByID(id);
|
||||
|
||||
if (utilities.blockHandlers.containsKey(id)) {
|
||||
success = utilities.blockHandlers.get(id).onBreak(null, block, item, UnregisterReason.EXPLODE);
|
||||
SlimefunBlockHandler blockHandler = utilities.blockHandlers.get(sfItem.getID());
|
||||
if (blockHandler != null) {
|
||||
success = blockHandler.onBreak(null, block, sfItem, UnregisterReason.EXPLODE);
|
||||
}
|
||||
if (success) {
|
||||
BlockStorage.clearBlockInfo(block);
|
||||
@ -272,7 +287,7 @@ public class ToolListener implements Listener {
|
||||
@EventHandler
|
||||
public void onLiquidFlow(BlockFromToEvent e) {
|
||||
Block block = e.getToBlock();
|
||||
SlimefunItem item = BlockStorage.check(block);
|
||||
String item = BlockStorage.checkID(block);
|
||||
if (item != null) e.setCancelled(true);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user