mirror of
https://github.com/StarWishsama/Slimefun4.git
synced 2024-09-19 19:25:48 +00:00
[CI skip] More refactoring
This commit is contained in:
parent
b94121e55b
commit
fe6caccee9
@ -37,6 +37,7 @@
|
||||
* Fixed #1355
|
||||
* Fixed Localization mistakes
|
||||
* Fixed #1366
|
||||
* Fixed GitHub cache
|
||||
|
||||
## Release Candidate 4 (06 Jan 2020)
|
||||
https://thebusybiscuit.github.io/builds/TheBusyBiscuit/Slimefun4/stable/#4
|
||||
|
@ -19,13 +19,11 @@ import me.mrCookieSlime.Slimefun.api.Slimefun;
|
||||
|
||||
public abstract class GitHubConnector {
|
||||
|
||||
protected final File file;
|
||||
protected File file;
|
||||
protected final GitHubService github;
|
||||
|
||||
public GitHubConnector(GitHubService github) {
|
||||
this.github = github;
|
||||
|
||||
file = new File("plugins/Slimefun/cache/github/" + this.getFileName() + ".json");
|
||||
}
|
||||
|
||||
public abstract String getFileName();
|
||||
@ -38,6 +36,8 @@ public abstract class GitHubConnector {
|
||||
}
|
||||
|
||||
public void pullFile() {
|
||||
file = new File("plugins/Slimefun/cache/github/" + getFileName() + ".json");
|
||||
|
||||
if (github.isLoggingEnabled()) {
|
||||
Slimefun.getLogger().log(Level.INFO, "Retrieving '" + this.getFileName() + ".json' from GitHub...");
|
||||
}
|
||||
@ -53,7 +53,7 @@ public abstract class GitHubConnector {
|
||||
try (ReadableByteChannel channel = Channels.newChannel(connection.getInputStream())) {
|
||||
try (FileOutputStream stream = new FileOutputStream(file)) {
|
||||
stream.getChannel().transferFrom(channel, 0, Long.MAX_VALUE);
|
||||
this.parseData();
|
||||
parseData();
|
||||
}
|
||||
}
|
||||
} catch (IOException e) {
|
||||
@ -62,24 +62,24 @@ public abstract class GitHubConnector {
|
||||
}
|
||||
|
||||
if (hasData()) {
|
||||
this.parseData();
|
||||
parseData();
|
||||
}
|
||||
else {
|
||||
this.onFailure();
|
||||
onFailure();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public boolean hasData() {
|
||||
return this.getFile().exists();
|
||||
return getFile().exists();
|
||||
}
|
||||
|
||||
public File getFile() {
|
||||
return this.file;
|
||||
return file;
|
||||
}
|
||||
|
||||
public void parseData() {
|
||||
try (BufferedReader reader = new BufferedReader(new FileReader(this.getFile()))) {
|
||||
try (BufferedReader reader = new BufferedReader(new FileReader(getFile()))) {
|
||||
StringBuilder builder = new StringBuilder();
|
||||
|
||||
String line;
|
||||
@ -88,11 +88,11 @@ public abstract class GitHubConnector {
|
||||
}
|
||||
|
||||
JsonElement element = new JsonParser().parse(builder.toString());
|
||||
this.onSuccess(element);
|
||||
onSuccess(element);
|
||||
}
|
||||
catch (IOException x) {
|
||||
Slimefun.getLogger().log(Level.SEVERE, "An Error occured while parsing GitHub-Data for Slimefun " + Slimefun.getVersion(), x);
|
||||
this.onFailure();
|
||||
onFailure();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,63 +1,290 @@
|
||||
package io.github.thebusybiscuit.slimefun4.implementation.listeners;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.Random;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.ThreadLocalRandom;
|
||||
|
||||
import org.bukkit.GameMode;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.Tag;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.entity.FallingBlock;
|
||||
import org.bukkit.block.BlockFace;
|
||||
import org.bukkit.block.BlockState;
|
||||
import org.bukkit.block.TileState;
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.block.BlockFromToEvent;
|
||||
import org.bukkit.event.block.BlockPistonExtendEvent;
|
||||
import org.bukkit.event.block.BlockPistonRetractEvent;
|
||||
import org.bukkit.event.entity.EntityChangeBlockEvent;
|
||||
import org.bukkit.event.block.BlockBreakEvent;
|
||||
import org.bukkit.event.block.BlockPlaceEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import io.github.thebusybiscuit.cscorelib2.inventory.ItemUtils;
|
||||
import io.github.thebusybiscuit.cscorelib2.item.CustomItem;
|
||||
import io.github.thebusybiscuit.slimefun4.utils.FireworkUtils;
|
||||
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;
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.NotPlaceable;
|
||||
import me.mrCookieSlime.Slimefun.Objects.handlers.BlockBreakHandler;
|
||||
import me.mrCookieSlime.Slimefun.Objects.handlers.BlockPlaceHandler;
|
||||
import me.mrCookieSlime.Slimefun.Objects.handlers.ItemHandler;
|
||||
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
|
||||
import me.mrCookieSlime.Slimefun.api.BlockStorage;
|
||||
import me.mrCookieSlime.Slimefun.api.Slimefun;
|
||||
import me.mrCookieSlime.Slimefun.utils.Utilities;
|
||||
|
||||
public class BlockListener implements Listener {
|
||||
|
||||
// Materials that require a Block under it, e.g. Pressure Plates
|
||||
private final Set<Material> sensitiveMaterials = new HashSet<>();
|
||||
private final Utilities utilities;
|
||||
|
||||
public BlockListener(SlimefunPlugin plugin) {
|
||||
plugin.getServer().getPluginManager().registerEvents(this, plugin);
|
||||
utilities = SlimefunPlugin.getUtilities();
|
||||
|
||||
sensitiveMaterials.add(Material.STONE_PRESSURE_PLATE);
|
||||
sensitiveMaterials.add(Material.LIGHT_WEIGHTED_PRESSURE_PLATE);
|
||||
sensitiveMaterials.add(Material.HEAVY_WEIGHTED_PRESSURE_PLATE);
|
||||
sensitiveMaterials.addAll(Tag.SAPLINGS.getValues());
|
||||
sensitiveMaterials.addAll(Tag.WOODEN_PRESSURE_PLATES.getValues());
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onBlockFall(EntityChangeBlockEvent event) {
|
||||
if (event.getEntity() instanceof FallingBlock && BlockStorage.hasBlockInfo(event.getBlock())) {
|
||||
event.setCancelled(true);
|
||||
FallingBlock fb = (FallingBlock) event.getEntity();
|
||||
|
||||
if (fb.getDropItem()) {
|
||||
fb.getWorld().dropItemNaturally(fb.getLocation(), new ItemStack(fb.getBlockData().getMaterial(), 1));
|
||||
}
|
||||
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
||||
public void onBlockRegister(BlockPlaceEvent e) {
|
||||
if (BlockStorage.hasBlockInfo(e.getBlock())) {
|
||||
e.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onPistonExtend(BlockPistonExtendEvent e) {
|
||||
for (Block b : e.getBlocks()) {
|
||||
if (BlockStorage.hasBlockInfo(b) || b.getRelative(e.getDirection()).getType() == Material.AIR && BlockStorage.hasBlockInfo(b.getRelative(e.getDirection()))) {
|
||||
|
||||
ItemStack item = e.getItemInHand();
|
||||
|
||||
SlimefunItem sfItem = SlimefunItem.getByItem(item);
|
||||
if (sfItem != null && !sfItem.isDisabled() && !(sfItem instanceof NotPlaceable)) {
|
||||
if (!Slimefun.hasUnlocked(e.getPlayer(), sfItem, true)) {
|
||||
e.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
else {
|
||||
BlockState state = e.getBlock().getState();
|
||||
boolean supportsPersistentData = state instanceof TileState;
|
||||
|
||||
if (supportsPersistentData) {
|
||||
SlimefunPlugin.getBlockDataService().setBlockData((TileState) state, sfItem.getID());
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
for (ItemHandler handler : SlimefunItem.getHandlers("BlockPlaceHandler")) {
|
||||
if (((BlockPlaceHandler) handler).onBlockPlace(e, item)) break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onPistonRetract(BlockPistonRetractEvent e) {
|
||||
if (e.isSticky()) {
|
||||
for (Block b : e.getBlocks()) {
|
||||
if (BlockStorage.hasBlockInfo(b) || b.getRelative(e.getDirection()).getType() == Material.AIR && BlockStorage.hasBlockInfo(b.getRelative(e.getDirection()))) {
|
||||
public void onBlockPlace(BlockPlaceEvent e) {
|
||||
ItemStack item = e.getItemInHand();
|
||||
|
||||
if (utilities.cancelPlace.remove(e.getPlayer().getUniqueId()))
|
||||
e.setCancelled(true);
|
||||
|
||||
if (SlimefunManager.isItemSimilar(item, SlimefunItems.BASIC_CIRCUIT_BOARD, true)) e.setCancelled(true);
|
||||
else if (SlimefunManager.isItemSimilar(item, SlimefunItems.ADVANCED_CIRCUIT_BOARD, true)) e.setCancelled(true);
|
||||
|
||||
else if (SlimefunManager.isItemSimilar(item, SlimefunItems.PORTABLE_CRAFTER, true)) e.setCancelled(true);
|
||||
else if (SlimefunManager.isItemSimilar(item, SlimefunItems.PORTABLE_DUSTBIN, true)) e.setCancelled(true);
|
||||
|
||||
else if (SlimefunManager.isItemSimilar(item, SlimefunItems.BACKPACK_SMALL, false)) e.setCancelled(true);
|
||||
else if (SlimefunManager.isItemSimilar(item, SlimefunItems.BACKPACK_MEDIUM, false)) e.setCancelled(true);
|
||||
else if (SlimefunManager.isItemSimilar(item, SlimefunItems.BACKPACK_LARGE, false)) e.setCancelled(true);
|
||||
else if (SlimefunManager.isItemSimilar(item, SlimefunItems.WOVEN_BACKPACK, false)) e.setCancelled(true);
|
||||
else if (SlimefunManager.isItemSimilar(item, SlimefunItems.GILDED_BACKPACK, false)) e.setCancelled(true);
|
||||
else if (SlimefunManager.isItemSimilar(item, SlimefunItems.RADIANT_BACKPACK, false)) e.setCancelled(true);
|
||||
else if (SlimefunManager.isItemSimilar(item, SlimefunItems.BOUND_BACKPACK, false)) e.setCancelled(true);
|
||||
else if (SlimefunManager.isItemSimilar(item, SlimefunItems.COOLER, false)) e.setCancelled(true);
|
||||
else if (SlimefunManager.isItemSimilar(item, SlimefunItems.ENDER_BACKPACK, false)) e.setCancelled(true);
|
||||
|
||||
else if (SlimefunManager.isItemSimilar(item, SlimefunItems.CARBON, false)) e.setCancelled(true);
|
||||
else if (SlimefunManager.isItemSimilar(item, SlimefunItems.COMPRESSED_CARBON, false)) e.setCancelled(true);
|
||||
else if (SlimefunManager.isItemSimilar(item, SlimefunItems.CARBON_CHUNK, false)) e.setCancelled(true);
|
||||
|
||||
else if (SlimefunManager.isItemSimilar(item, SlimefunItems.ANDROID_MEMORY_CORE, false)) e.setCancelled(true);
|
||||
else if (SlimefunManager.isItemSimilar(item, SlimefunItems.LAVA_CRYSTAL, false)) e.setCancelled(true);
|
||||
|
||||
else if (SlimefunManager.isItemSimilar(item, SlimefunItems.TINY_URANIUM, false)) e.setCancelled(true);
|
||||
else if (SlimefunManager.isItemSimilar(item, SlimefunItems.SMALL_URANIUM, false)) e.setCancelled(true);
|
||||
|
||||
else if (SlimefunManager.isItemSimilar(item, SlimefunItems.BROKEN_SPAWNER, false)) e.setCancelled(true);
|
||||
else if (SlimefunManager.isItemSimilar(item, SlimefunItems.GPS_MARKER_TOOL, true)) {
|
||||
e.setCancelled(true);
|
||||
Slimefun.getGPSNetwork().addWaypoint(e.getPlayer(), e.getBlock().getLocation());
|
||||
}
|
||||
else if (SlimefunManager.isItemSimilar(item, SlimefunItems.CHRISTMAS_PRESENT, false)) {
|
||||
e.setCancelled(true);
|
||||
|
||||
if (e.getPlayer().getGameMode() != GameMode.CREATIVE) {
|
||||
ItemUtils.consumeItem(item, false);
|
||||
}
|
||||
|
||||
FireworkUtils.launchRandom(e.getPlayer(), 3);
|
||||
List<ItemStack> gifts = new ArrayList<>();
|
||||
|
||||
gifts.add(new CustomItem(SlimefunItems.CHRISTMAS_HOT_CHOCOLATE, 1));
|
||||
gifts.add(new CustomItem(SlimefunItems.CHRISTMAS_CHOCOLATE_APPLE, 4));
|
||||
gifts.add(new CustomItem(SlimefunItems.CHRISTMAS_CARAMEL_APPLE, 4));
|
||||
gifts.add(new CustomItem(SlimefunItems.CHRISTMAS_CAKE, 4));
|
||||
gifts.add(new CustomItem(SlimefunItems.CHRISTMAS_COOKIE, 8));
|
||||
gifts.add(new CustomItem(SlimefunItems.CHRISTMAS_PRESENT, 1));
|
||||
gifts.add(new CustomItem(SlimefunItems.CHRISTMAS_EGG_NOG, 1));
|
||||
gifts.add(new CustomItem(SlimefunItems.CHRISTMAS_MILK, 1));
|
||||
gifts.add(new CustomItem(SlimefunItems.CHRISTMAS_APPLE_CIDER, 1));
|
||||
gifts.add(new CustomItem(SlimefunItems.CHRISTMAS_FRUIT_CAKE, 4));
|
||||
gifts.add(new CustomItem(SlimefunItems.CHRISTMAS_APPLE_PIE, 4));
|
||||
gifts.add(new ItemStack(Material.EMERALD));
|
||||
|
||||
e.getBlockPlaced().getWorld().dropItemNaturally(e.getBlockPlaced().getLocation(), gifts.get(ThreadLocalRandom.current().nextInt(gifts.size())));
|
||||
}
|
||||
else if (SlimefunManager.isItemSimilar(item, SlimefunItems.CARGO_INPUT, false)) {
|
||||
if (e.getBlock().getY() != e.getBlockAgainst().getY()) {
|
||||
SlimefunPlugin.getLocal().sendMessage(e.getPlayer(), "machines.CARGO_NODES.must-be-placed", true);
|
||||
e.setCancelled(true);
|
||||
}
|
||||
}
|
||||
else if (SlimefunManager.isItemSimilar(item, SlimefunItems.CARGO_OUTPUT, false)) {
|
||||
if (e.getBlock().getY() != e.getBlockAgainst().getY()) {
|
||||
SlimefunPlugin.getLocal().sendMessage(e.getPlayer(), "machines.CARGO_NODES.must-be-placed", true);
|
||||
e.setCancelled(true);
|
||||
}
|
||||
}
|
||||
else if (SlimefunManager.isItemSimilar(item, SlimefunItems.CARGO_OUTPUT_ADVANCED, false)) {
|
||||
if (e.getBlock().getY() != e.getBlockAgainst().getY()) {
|
||||
SlimefunPlugin.getLocal().sendMessage(e.getPlayer(), "machines.CARGO_NODES.must-be-placed", true);
|
||||
e.setCancelled(true);
|
||||
}
|
||||
}
|
||||
else if (SlimefunManager.isItemSimilar(item, SlimefunItems.CT_IMPORT_BUS, false) && e.getBlock().getY() != e.getBlockAgainst().getY()) {
|
||||
SlimefunPlugin.getLocal().sendMessage(e.getPlayer(), "machines.CARGO_NODES.must-be-placed", true);
|
||||
e.setCancelled(true);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
||||
public void onBlockBreak(BlockBreakEvent e) {
|
||||
boolean allow = true;
|
||||
List<ItemStack> drops = new ArrayList<>();
|
||||
ItemStack item = e.getPlayer().getInventory().getItemInMainHand();
|
||||
int fortune = 1;
|
||||
|
||||
Block block2 = e.getBlock().getRelative(BlockFace.UP);
|
||||
if (sensitiveMaterials.contains(block2.getType())) {
|
||||
SlimefunItem sfItem = BlockStorage.check(e.getBlock().getRelative(BlockFace.UP));
|
||||
|
||||
if (sfItem == null) {
|
||||
BlockState state = block2.getState();
|
||||
if (state instanceof TileState) {
|
||||
Optional<String> blockData = SlimefunPlugin.getBlockDataService().getBlockData((TileState) state);
|
||||
|
||||
if (blockData.isPresent()) {
|
||||
sfItem = SlimefunItem.getByID(blockData.get());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (sfItem != null && !(sfItem instanceof HandledBlock)) {
|
||||
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);
|
||||
}
|
||||
else {
|
||||
e.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onLiquidFlow(BlockFromToEvent e) {
|
||||
Block block = e.getToBlock();
|
||||
String item = BlockStorage.checkID(block);
|
||||
if (item != null) e.setCancelled(true);
|
||||
|
||||
SlimefunItem sfItem = BlockStorage.check(e.getBlock());
|
||||
|
||||
if (sfItem == null) {
|
||||
BlockState state = e.getBlock().getState();
|
||||
|
||||
if (state instanceof TileState) {
|
||||
Optional<String> blockData = SlimefunPlugin.getBlockDataService().getBlockData((TileState) state);
|
||||
|
||||
if (blockData.isPresent()) {
|
||||
sfItem = SlimefunItem.getByID(blockData.get());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (sfItem != null && !(sfItem instanceof HandledBlock)) {
|
||||
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.
|
||||
for (ItemHandler handler : SlimefunItem.getHandlers("BlockBreakHandler")) {
|
||||
if (((BlockBreakHandler) handler).onBlockBreak(e, item, fortune, drops)) break;
|
||||
}
|
||||
}
|
||||
if (allow) {
|
||||
drops.addAll(sfItem.getDrops());
|
||||
BlockStorage.clearBlockInfo(e.getBlock());
|
||||
}
|
||||
else {
|
||||
e.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
}
|
||||
else if (item != null) {
|
||||
if (item.getEnchantments().containsKey(Enchantment.LOOT_BONUS_BLOCKS) && !item.getEnchantments().containsKey(Enchantment.SILK_TOUCH)) {
|
||||
Random random = ThreadLocalRandom.current();
|
||||
|
||||
fortune = random.nextInt(item.getEnchantmentLevel(Enchantment.LOOT_BONUS_BLOCKS) + 2) - 1;
|
||||
if (fortune <= 0) fortune = 1;
|
||||
fortune = (e.getBlock().getType() == Material.LAPIS_ORE ? 4 + random.nextInt(5) : 1) * (fortune + 1);
|
||||
}
|
||||
|
||||
for (ItemHandler handler : SlimefunItem.getHandlers("BlockBreakHandler")) {
|
||||
if (((BlockBreakHandler) handler).onBlockBreak(e, item, fortune, drops)) break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!drops.isEmpty()) {
|
||||
e.getBlock().setType(Material.AIR);
|
||||
|
||||
if (e.isDropItems()) {
|
||||
for (ItemStack drop : drops) {
|
||||
if (drop != null) {
|
||||
e.getBlock().getWorld().dropItemNaturally(e.getBlock().getLocation(), drop);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,93 @@
|
||||
package io.github.thebusybiscuit.slimefun4.implementation.listeners;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.entity.FallingBlock;
|
||||
import org.bukkit.entity.Wither;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.block.BlockFromToEvent;
|
||||
import org.bukkit.event.block.BlockPistonExtendEvent;
|
||||
import org.bukkit.event.block.BlockPistonRetractEvent;
|
||||
import org.bukkit.event.entity.EntityChangeBlockEvent;
|
||||
import org.bukkit.event.player.PlayerBucketEmptyEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
|
||||
import me.mrCookieSlime.Slimefun.api.BlockStorage;
|
||||
|
||||
public class BlockPhysicsListener implements Listener {
|
||||
|
||||
public BlockPhysicsListener(SlimefunPlugin plugin) {
|
||||
plugin.getServer().getPluginManager().registerEvents(this, plugin);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onBlockFall(EntityChangeBlockEvent e) {
|
||||
if (e.getEntity() instanceof FallingBlock) {
|
||||
if (SlimefunPlugin.getUtilities().blocks.contains(e.getEntity().getUniqueId())) {
|
||||
e.setCancelled(true);
|
||||
e.getEntity().remove();
|
||||
}
|
||||
else if (BlockStorage.hasBlockInfo(e.getBlock())) {
|
||||
e.setCancelled(true);
|
||||
FallingBlock fb = (FallingBlock) e.getEntity();
|
||||
|
||||
if (fb.getDropItem()) {
|
||||
fb.getWorld().dropItemNaturally(fb.getLocation(), new ItemStack(fb.getBlockData().getMaterial(), 1));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onPistonExtend(BlockPistonExtendEvent e) {
|
||||
for (Block b : e.getBlocks()) {
|
||||
if (BlockStorage.hasBlockInfo(b) || b.getRelative(e.getDirection()).getType() == Material.AIR && BlockStorage.hasBlockInfo(b.getRelative(e.getDirection()))) {
|
||||
e.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onPistonRetract(BlockPistonRetractEvent e) {
|
||||
if (e.isSticky()) {
|
||||
for (Block b : e.getBlocks()) {
|
||||
if (BlockStorage.hasBlockInfo(b) || b.getRelative(e.getDirection()).getType() == Material.AIR && BlockStorage.hasBlockInfo(b.getRelative(e.getDirection()))) {
|
||||
e.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onLiquidFlow(BlockFromToEvent e) {
|
||||
Block block = e.getToBlock();
|
||||
String item = BlockStorage.checkID(block);
|
||||
if (item != null) e.setCancelled(true);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onBucketUse(PlayerBucketEmptyEvent e) {
|
||||
// Fix for placing water on player heads
|
||||
Location l = e.getBlockClicked().getRelative(e.getBlockFace()).getLocation();
|
||||
if (BlockStorage.hasBlockInfo(l)) {
|
||||
e.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.LOWEST)
|
||||
public void onWitherDestroy(EntityChangeBlockEvent e) {
|
||||
if (e.getEntity() instanceof Wither) {
|
||||
String id = BlockStorage.checkID(e.getBlock());
|
||||
|
||||
if (id != null && id.startsWith("WITHER_PROOF_")) {
|
||||
e.setCancelled(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,26 @@
|
||||
package io.github.thebusybiscuit.slimefun4.implementation.listeners;
|
||||
|
||||
import org.bukkit.block.Hopper;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.inventory.InventoryMoveItemEvent;
|
||||
import org.bukkit.inventory.InventoryHolder;
|
||||
|
||||
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
|
||||
import me.mrCookieSlime.Slimefun.api.BlockStorage;
|
||||
|
||||
public class IgnitionChamberListener implements Listener {
|
||||
|
||||
public IgnitionChamberListener(SlimefunPlugin plugin) {
|
||||
plugin.getServer().getPluginManager().registerEvents(this, plugin);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onIgnitionChamberItemMove(InventoryMoveItemEvent e) {
|
||||
InventoryHolder holder = e.getInitiator().getHolder();
|
||||
|
||||
if (holder instanceof Hopper && BlockStorage.check(((Hopper) holder).getBlock(), "IGNITION_CHAMBER")) {
|
||||
e.setCancelled(true);
|
||||
}
|
||||
}
|
||||
}
|
@ -1,37 +1,22 @@
|
||||
package me.mrCookieSlime.Slimefun.listeners;
|
||||
package io.github.thebusybiscuit.slimefun4.implementation.listeners;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.block.BrewingStand;
|
||||
import org.bukkit.block.Hopper;
|
||||
import org.bukkit.entity.FallingBlock;
|
||||
import org.bukkit.entity.IronGolem;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.entity.Wither;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.block.Action;
|
||||
import org.bukkit.event.entity.EntityChangeBlockEvent;
|
||||
import org.bukkit.event.inventory.CraftItemEvent;
|
||||
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||
import org.bukkit.event.inventory.InventoryMoveItemEvent;
|
||||
import org.bukkit.event.inventory.InventoryType;
|
||||
import org.bukkit.event.inventory.PrepareItemCraftEvent;
|
||||
import org.bukkit.event.player.PlayerBucketEmptyEvent;
|
||||
import org.bukkit.event.player.PlayerDropItemEvent;
|
||||
import org.bukkit.event.player.PlayerInteractEntityEvent;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
import org.bukkit.event.player.PlayerItemConsumeEvent;
|
||||
import org.bukkit.inventory.BrewerInventory;
|
||||
import org.bukkit.inventory.EquipmentSlot;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.inventory.InventoryHolder;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.PlayerInventory;
|
||||
import org.bukkit.inventory.meta.PotionMeta;
|
||||
@ -40,7 +25,6 @@ import org.bukkit.potion.PotionEffectType;
|
||||
|
||||
import io.github.thebusybiscuit.slimefun4.core.guide.GuideSettings;
|
||||
import io.github.thebusybiscuit.slimefun4.core.guide.SlimefunGuideLayout;
|
||||
import io.github.thebusybiscuit.slimefun4.implementation.listeners.BackpackListener;
|
||||
import me.mrCookieSlime.CSCoreLibPlugin.events.ItemUseEvent;
|
||||
import me.mrCookieSlime.Slimefun.SlimefunGuide;
|
||||
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
|
||||
@ -62,47 +46,15 @@ import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset;
|
||||
import me.mrCookieSlime.Slimefun.api.inventory.UniversalBlockMenu;
|
||||
import me.mrCookieSlime.Slimefun.utils.Utilities;
|
||||
|
||||
public class ItemListener implements Listener {
|
||||
public class SlimefunItemListener implements Listener {
|
||||
|
||||
private final Utilities utilities;
|
||||
|
||||
public ItemListener(SlimefunPlugin plugin) {
|
||||
public SlimefunItemListener(SlimefunPlugin plugin) {
|
||||
plugin.getServer().getPluginManager().registerEvents(this, plugin);
|
||||
utilities = SlimefunPlugin.getUtilities();
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onIgnitionChamberItemMove(InventoryMoveItemEvent e) {
|
||||
InventoryHolder holder = e.getInitiator().getHolder();
|
||||
|
||||
if (holder instanceof Hopper && BlockStorage.check(((Hopper) holder).getBlock(), "IGNITION_CHAMBER")) {
|
||||
e.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onGrindstone(InventoryClickEvent e) {
|
||||
if (e.getRawSlot() == 2 && e.getWhoClicked() instanceof Player && e.getInventory().getType() == InventoryType.GRINDSTONE) {
|
||||
ItemStack slot0 = e.getInventory().getContents()[0];
|
||||
ItemStack slot1 = e.getInventory().getContents()[1];
|
||||
if (SlimefunItem.getByItem(slot0) != null && !SlimefunItem.isDisabled(slot0))
|
||||
e.setCancelled(true);
|
||||
else if (SlimefunItem.getByItem(slot1) != null && !SlimefunItem.isDisabled(slot1))
|
||||
e.setCancelled(true);
|
||||
|
||||
|
||||
if (SlimefunManager.isItemSimilar(slot0, SlimefunGuide.getItem(SlimefunGuideLayout.BOOK), true))
|
||||
e.setCancelled(true);
|
||||
else if (SlimefunManager.isItemSimilar(slot0, SlimefunGuide.getItem(SlimefunGuideLayout.CHEST), true))
|
||||
e.setCancelled(true);
|
||||
|
||||
if (SlimefunManager.isItemSimilar(slot1, SlimefunGuide.getItem(SlimefunGuideLayout.BOOK), true))
|
||||
e.setCancelled(true);
|
||||
else if (SlimefunManager.isItemSimilar(slot1, SlimefunGuide.getItem(SlimefunGuideLayout.CHEST), true))
|
||||
e.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Handles Left click use and checks for disabled items.
|
||||
*/
|
||||
@ -118,15 +70,6 @@ public class ItemListener implements Listener {
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onBucketUse(PlayerBucketEmptyEvent e) {
|
||||
// Fix for placing water on player heads
|
||||
Location l = e.getBlockClicked().getRelative(e.getBlockFace()).getLocation();
|
||||
if (BlockStorage.hasBlockInfo(l)) {
|
||||
e.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.NORMAL)
|
||||
public void onRightClick(ItemUseEvent e) {
|
||||
if (e.getParentEvent() != null && e.getParentEvent().getHand() != EquipmentSlot.HAND) {
|
||||
@ -304,48 +247,6 @@ public class ItemListener implements Listener {
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onCraft(CraftItemEvent e) {
|
||||
for (ItemStack item : e.getInventory().getContents()) {
|
||||
SlimefunItem sfItem = SlimefunItem.getByItem(item);
|
||||
|
||||
if (sfItem != null && !sfItem.isUseableInWorkbench()) {
|
||||
e.setCancelled(true);
|
||||
SlimefunPlugin.getLocal().sendMessage((Player) e.getWhoClicked(), "workbench.not-enhanced", true);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onPrepareCraft(PrepareItemCraftEvent e) {
|
||||
for (ItemStack item : e.getInventory().getContents()) {
|
||||
SlimefunItem sfItem = SlimefunItem.getByItem(item);
|
||||
|
||||
if (sfItem != null && !sfItem.isUseableInWorkbench()) {
|
||||
e.getInventory().setResult(null);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.LOWEST)
|
||||
public void onEntityChangeBlock(EntityChangeBlockEvent e) {
|
||||
if (e.getEntity() instanceof FallingBlock) {
|
||||
if (utilities.blocks.contains(e.getEntity().getUniqueId())) {
|
||||
e.setCancelled(true);
|
||||
e.getEntity().remove();
|
||||
}
|
||||
}
|
||||
else if (e.getEntity() instanceof Wither) {
|
||||
String id = BlockStorage.checkID(e.getBlock());
|
||||
|
||||
if (id != null && id.startsWith("WITHER_PROOF_")) {
|
||||
e.setCancelled(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onIronGolemHeal(PlayerInteractEntityEvent e) {
|
||||
if (e.getRightClicked() instanceof IronGolem) {
|
||||
@ -375,38 +276,6 @@ public class ItemListener implements Listener {
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onAnvil(InventoryClickEvent e) {
|
||||
if (e.getRawSlot() == 2 && e.getWhoClicked() instanceof Player && e.getInventory().getType() == InventoryType.ANVIL) {
|
||||
ItemStack slot0 = e.getInventory().getContents()[0];
|
||||
ItemStack slot1 = e.getInventory().getContents()[1];
|
||||
|
||||
if (SlimefunManager.isItemSimilar(slot0, SlimefunItems.ELYTRA, true)) return;
|
||||
|
||||
if (SlimefunItem.getByItem(slot0) != null && !SlimefunItem.isDisabled(slot0) ||
|
||||
SlimefunItem.getByItem(slot1) != null && !SlimefunItem.isDisabled(slot1) ||
|
||||
|
||||
SlimefunManager.isItemSimilar(slot0, SlimefunGuide.getItem(SlimefunGuideLayout.BOOK), true) ||
|
||||
SlimefunManager.isItemSimilar(slot0, SlimefunGuide.getItem(SlimefunGuideLayout.CHEST), true)||
|
||||
|
||||
SlimefunManager.isItemSimilar(slot1, SlimefunGuide.getItem(SlimefunGuideLayout.BOOK), true) ||
|
||||
SlimefunManager.isItemSimilar(slot1, SlimefunGuide.getItem(SlimefunGuideLayout.CHEST), true)) {
|
||||
|
||||
e.setCancelled(true);
|
||||
SlimefunPlugin.getLocal().sendMessage((Player) e.getWhoClicked(), "anvil.not-working", true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(ignoreCancelled = true)
|
||||
public void onPreBrew(InventoryClickEvent e) {
|
||||
Inventory inventory = e.getInventory();
|
||||
|
||||
if (inventory instanceof BrewerInventory && inventory.getHolder() instanceof BrewingStand && e.getRawSlot() < inventory.getSize()) {
|
||||
e.setCancelled(SlimefunItem.getByItem(e.getCursor()) != null);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onItemDrop(PlayerDropItemEvent e) {
|
||||
for (ItemHandler handler : SlimefunItem.getHandlers("ItemDropHandler")) {
|
@ -0,0 +1,107 @@
|
||||
package io.github.thebusybiscuit.slimefun4.implementation.listeners;
|
||||
|
||||
import org.bukkit.block.BrewingStand;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.inventory.CraftItemEvent;
|
||||
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||
import org.bukkit.event.inventory.InventoryType;
|
||||
import org.bukkit.event.inventory.PrepareItemCraftEvent;
|
||||
import org.bukkit.inventory.BrewerInventory;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import io.github.thebusybiscuit.slimefun4.core.guide.SlimefunGuideLayout;
|
||||
import me.mrCookieSlime.Slimefun.SlimefunGuide;
|
||||
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
|
||||
import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
|
||||
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
|
||||
|
||||
public class VanillaMachinesListener implements Listener {
|
||||
|
||||
public VanillaMachinesListener(SlimefunPlugin plugin) {
|
||||
plugin.getServer().getPluginManager().registerEvents(this, plugin);
|
||||
}
|
||||
|
||||
@EventHandler(ignoreCancelled = true)
|
||||
public void onGrindstone(InventoryClickEvent e) {
|
||||
if (e.getRawSlot() == 2 && e.getWhoClicked() instanceof Player && e.getInventory().getType() == InventoryType.GRINDSTONE) {
|
||||
ItemStack item1 = e.getInventory().getContents()[0];
|
||||
ItemStack item2 = e.getInventory().getContents()[1];
|
||||
|
||||
if (checkForUnallowedItems(item1, item2)) {
|
||||
e.setCancelled(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onCraft(CraftItemEvent e) {
|
||||
for (ItemStack item : e.getInventory().getContents()) {
|
||||
SlimefunItem sfItem = SlimefunItem.getByItem(item);
|
||||
|
||||
if (sfItem != null && !sfItem.isUseableInWorkbench()) {
|
||||
e.setCancelled(true);
|
||||
SlimefunPlugin.getLocal().sendMessage((Player) e.getWhoClicked(), "workbench.not-enhanced", true);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onPrepareCraft(PrepareItemCraftEvent e) {
|
||||
for (ItemStack item : e.getInventory().getContents()) {
|
||||
SlimefunItem sfItem = SlimefunItem.getByItem(item);
|
||||
|
||||
if (sfItem != null && !sfItem.isUseableInWorkbench()) {
|
||||
e.getInventory().setResult(null);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onAnvil(InventoryClickEvent e) {
|
||||
if (e.getRawSlot() == 2 && e.getWhoClicked() instanceof Player && e.getInventory().getType() == InventoryType.ANVIL) {
|
||||
ItemStack item1 = e.getInventory().getContents()[0];
|
||||
ItemStack item2 = e.getInventory().getContents()[1];
|
||||
|
||||
if (!SlimefunManager.isItemSimilar(item1, SlimefunItems.ELYTRA, true) && checkForUnallowedItems(item1, item2)) {
|
||||
e.setCancelled(true);
|
||||
SlimefunPlugin.getLocal().sendMessage((Player) e.getWhoClicked(), "anvil.not-working", true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(ignoreCancelled = true)
|
||||
public void onPreBrew(InventoryClickEvent e) {
|
||||
Inventory inventory = e.getInventory();
|
||||
|
||||
if (inventory instanceof BrewerInventory && inventory.getHolder() instanceof BrewingStand && e.getRawSlot() < inventory.getSize()) {
|
||||
e.setCancelled(SlimefunItem.getByItem(e.getCursor()) != null);
|
||||
}
|
||||
}
|
||||
|
||||
private boolean checkForUnallowedItems(ItemStack item1, ItemStack item2) {
|
||||
if (SlimefunManager.isItemSimilar(item1, SlimefunGuide.getItem(SlimefunGuideLayout.BOOK), true))
|
||||
return true;
|
||||
else if (SlimefunManager.isItemSimilar(item1, SlimefunGuide.getItem(SlimefunGuideLayout.CHEST), true))
|
||||
return true;
|
||||
else if (SlimefunManager.isItemSimilar(item2, SlimefunGuide.getItem(SlimefunGuideLayout.BOOK), true))
|
||||
return true;
|
||||
else if (SlimefunManager.isItemSimilar(item2, SlimefunGuide.getItem(SlimefunGuideLayout.CHEST), true))
|
||||
return true;
|
||||
else {
|
||||
SlimefunItem sfItem1 = SlimefunItem.getByItem(item1);
|
||||
SlimefunItem sfItem2 = SlimefunItem.getByItem(item2);
|
||||
|
||||
if ((sfItem1 != null && !sfItem1.isDisabled()) || (sfItem2 != null && !sfItem2.isDisabled())) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
@ -32,6 +32,7 @@ import io.github.thebusybiscuit.slimefun4.implementation.listeners.AndroidKillin
|
||||
import io.github.thebusybiscuit.slimefun4.implementation.listeners.AutonomousToolsListener;
|
||||
import io.github.thebusybiscuit.slimefun4.implementation.listeners.BackpackListener;
|
||||
import io.github.thebusybiscuit.slimefun4.implementation.listeners.BlockListener;
|
||||
import io.github.thebusybiscuit.slimefun4.implementation.listeners.BlockPhysicsListener;
|
||||
import io.github.thebusybiscuit.slimefun4.implementation.listeners.CoolerListener;
|
||||
import io.github.thebusybiscuit.slimefun4.implementation.listeners.DamageListener;
|
||||
import io.github.thebusybiscuit.slimefun4.implementation.listeners.DeathpointListener;
|
||||
@ -40,6 +41,8 @@ import io.github.thebusybiscuit.slimefun4.implementation.listeners.EnhancedFurna
|
||||
import io.github.thebusybiscuit.slimefun4.implementation.listeners.ExplosionsListener;
|
||||
import io.github.thebusybiscuit.slimefun4.implementation.listeners.GearListener;
|
||||
import io.github.thebusybiscuit.slimefun4.implementation.listeners.GrapplingHookListener;
|
||||
import io.github.thebusybiscuit.slimefun4.implementation.listeners.IgnitionChamberListener;
|
||||
import io.github.thebusybiscuit.slimefun4.implementation.listeners.SlimefunItemListener;
|
||||
import io.github.thebusybiscuit.slimefun4.implementation.listeners.ItemPickupListener;
|
||||
import io.github.thebusybiscuit.slimefun4.implementation.listeners.MultiBlockListener;
|
||||
import io.github.thebusybiscuit.slimefun4.implementation.listeners.NetworkListener;
|
||||
@ -50,6 +53,7 @@ import io.github.thebusybiscuit.slimefun4.implementation.listeners.SlimefunGuide
|
||||
import io.github.thebusybiscuit.slimefun4.implementation.listeners.SoulboundListener;
|
||||
import io.github.thebusybiscuit.slimefun4.implementation.listeners.TalismanListener;
|
||||
import io.github.thebusybiscuit.slimefun4.implementation.listeners.TeleporterListener;
|
||||
import io.github.thebusybiscuit.slimefun4.implementation.listeners.VanillaMachinesListener;
|
||||
import io.github.thebusybiscuit.slimefun4.implementation.listeners.WorldListener;
|
||||
import me.mrCookieSlime.CSCoreLibPlugin.CSCoreLib;
|
||||
import me.mrCookieSlime.Slimefun.GEO.OreGenSystem;
|
||||
@ -71,8 +75,6 @@ import me.mrCookieSlime.Slimefun.api.Slimefun;
|
||||
import me.mrCookieSlime.Slimefun.api.SlimefunBackup;
|
||||
import me.mrCookieSlime.Slimefun.api.TickerTask;
|
||||
import me.mrCookieSlime.Slimefun.api.inventory.UniversalBlockMenu;
|
||||
import me.mrCookieSlime.Slimefun.listeners.ItemListener;
|
||||
import me.mrCookieSlime.Slimefun.listeners.ToolListener;
|
||||
import me.mrCookieSlime.Slimefun.utils.ConfigCache;
|
||||
import me.mrCookieSlime.Slimefun.utils.Utilities;
|
||||
|
||||
@ -213,14 +215,14 @@ public final class SlimefunPlugin extends JavaPlugin {
|
||||
|
||||
// All Slimefun Listeners
|
||||
new SlimefunBootsListener(this);
|
||||
new ItemListener(this);
|
||||
new BlockListener(this);
|
||||
new SlimefunItemListener(this);
|
||||
new BlockPhysicsListener(this);
|
||||
new MultiBlockListener(this);
|
||||
new GearListener(this);
|
||||
new AutonomousToolsListener(this);
|
||||
new DamageListener(this);
|
||||
new SlimefunBowListener(this);
|
||||
new ToolListener(this);
|
||||
new BlockListener(this);
|
||||
new EnhancedFurnaceListener(this);
|
||||
new TeleporterListener(this);
|
||||
new AndroidKillingListener(this);
|
||||
@ -229,6 +231,7 @@ public final class SlimefunPlugin extends JavaPlugin {
|
||||
new DeathpointListener(this);
|
||||
new ExplosionsListener(this);
|
||||
new DebugFishListener(this);
|
||||
new VanillaMachinesListener(this);
|
||||
|
||||
// Toggleable Listeners for performance
|
||||
if (config.getBoolean("items.talismans")) new TalismanListener(this);
|
||||
@ -257,6 +260,7 @@ public final class SlimefunPlugin extends JavaPlugin {
|
||||
|
||||
if (SlimefunItem.getByID("ANCIENT_ALTAR") != null) new AncientAltarListener(this);
|
||||
if (SlimefunItem.getByID("GRAPPLING_HOOK") != null) new GrapplingHookListener(this);
|
||||
if (SlimefunItem.getByID("IGNITION_CHAMBER") != null) new IgnitionChamberListener(this);
|
||||
}, 0);
|
||||
|
||||
SlimefunCommand command = new SlimefunCommand(this);
|
||||
|
@ -1,290 +0,0 @@
|
||||
package me.mrCookieSlime.Slimefun.listeners;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.Random;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.ThreadLocalRandom;
|
||||
|
||||
import org.bukkit.GameMode;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.Tag;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.block.BlockFace;
|
||||
import org.bukkit.block.BlockState;
|
||||
import org.bukkit.block.TileState;
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.block.BlockBreakEvent;
|
||||
import org.bukkit.event.block.BlockPlaceEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import io.github.thebusybiscuit.cscorelib2.inventory.ItemUtils;
|
||||
import io.github.thebusybiscuit.cscorelib2.item.CustomItem;
|
||||
import io.github.thebusybiscuit.slimefun4.utils.FireworkUtils;
|
||||
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;
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.NotPlaceable;
|
||||
import me.mrCookieSlime.Slimefun.Objects.handlers.BlockBreakHandler;
|
||||
import me.mrCookieSlime.Slimefun.Objects.handlers.BlockPlaceHandler;
|
||||
import me.mrCookieSlime.Slimefun.Objects.handlers.ItemHandler;
|
||||
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
|
||||
import me.mrCookieSlime.Slimefun.api.BlockStorage;
|
||||
import me.mrCookieSlime.Slimefun.api.Slimefun;
|
||||
import me.mrCookieSlime.Slimefun.utils.Utilities;
|
||||
|
||||
public class ToolListener implements Listener {
|
||||
|
||||
// Materials that require a Block under it, e.g. Pressure Plates
|
||||
private final Set<Material> sensitiveMaterials = new HashSet<>();
|
||||
private final Utilities utilities;
|
||||
|
||||
public ToolListener(SlimefunPlugin plugin) {
|
||||
plugin.getServer().getPluginManager().registerEvents(this, plugin);
|
||||
utilities = SlimefunPlugin.getUtilities();
|
||||
|
||||
sensitiveMaterials.add(Material.STONE_PRESSURE_PLATE);
|
||||
sensitiveMaterials.add(Material.LIGHT_WEIGHTED_PRESSURE_PLATE);
|
||||
sensitiveMaterials.add(Material.HEAVY_WEIGHTED_PRESSURE_PLATE);
|
||||
sensitiveMaterials.addAll(Tag.SAPLINGS.getValues());
|
||||
sensitiveMaterials.addAll(Tag.WOODEN_PRESSURE_PLATES.getValues());
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
||||
public void onBlockRegister(BlockPlaceEvent e) {
|
||||
if (BlockStorage.hasBlockInfo(e.getBlock())) {
|
||||
e.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
|
||||
ItemStack item = e.getItemInHand();
|
||||
|
||||
SlimefunItem sfItem = SlimefunItem.getByItem(item);
|
||||
if (sfItem != null && !sfItem.isDisabled() && !(sfItem instanceof NotPlaceable)) {
|
||||
if (!Slimefun.hasUnlocked(e.getPlayer(), sfItem, true)) {
|
||||
e.setCancelled(true);
|
||||
}
|
||||
else {
|
||||
BlockState state = e.getBlock().getState();
|
||||
boolean supportsPersistentData = state instanceof TileState;
|
||||
|
||||
if (supportsPersistentData) {
|
||||
SlimefunPlugin.getBlockDataService().setBlockData((TileState) state, sfItem.getID());
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
for (ItemHandler handler : SlimefunItem.getHandlers("BlockPlaceHandler")) {
|
||||
if (((BlockPlaceHandler) handler).onBlockPlace(e, item)) break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onBlockPlace(BlockPlaceEvent e) {
|
||||
ItemStack item = e.getItemInHand();
|
||||
|
||||
if (utilities.cancelPlace.remove(e.getPlayer().getUniqueId()))
|
||||
e.setCancelled(true);
|
||||
|
||||
if (SlimefunManager.isItemSimilar(item, SlimefunItems.BASIC_CIRCUIT_BOARD, true)) e.setCancelled(true);
|
||||
else if (SlimefunManager.isItemSimilar(item, SlimefunItems.ADVANCED_CIRCUIT_BOARD, true)) e.setCancelled(true);
|
||||
|
||||
else if (SlimefunManager.isItemSimilar(item, SlimefunItems.PORTABLE_CRAFTER, true)) e.setCancelled(true);
|
||||
else if (SlimefunManager.isItemSimilar(item, SlimefunItems.PORTABLE_DUSTBIN, true)) e.setCancelled(true);
|
||||
|
||||
else if (SlimefunManager.isItemSimilar(item, SlimefunItems.BACKPACK_SMALL, false)) e.setCancelled(true);
|
||||
else if (SlimefunManager.isItemSimilar(item, SlimefunItems.BACKPACK_MEDIUM, false)) e.setCancelled(true);
|
||||
else if (SlimefunManager.isItemSimilar(item, SlimefunItems.BACKPACK_LARGE, false)) e.setCancelled(true);
|
||||
else if (SlimefunManager.isItemSimilar(item, SlimefunItems.WOVEN_BACKPACK, false)) e.setCancelled(true);
|
||||
else if (SlimefunManager.isItemSimilar(item, SlimefunItems.GILDED_BACKPACK, false)) e.setCancelled(true);
|
||||
else if (SlimefunManager.isItemSimilar(item, SlimefunItems.RADIANT_BACKPACK, false)) e.setCancelled(true);
|
||||
else if (SlimefunManager.isItemSimilar(item, SlimefunItems.BOUND_BACKPACK, false)) e.setCancelled(true);
|
||||
else if (SlimefunManager.isItemSimilar(item, SlimefunItems.COOLER, false)) e.setCancelled(true);
|
||||
else if (SlimefunManager.isItemSimilar(item, SlimefunItems.ENDER_BACKPACK, false)) e.setCancelled(true);
|
||||
|
||||
else if (SlimefunManager.isItemSimilar(item, SlimefunItems.CARBON, false)) e.setCancelled(true);
|
||||
else if (SlimefunManager.isItemSimilar(item, SlimefunItems.COMPRESSED_CARBON, false)) e.setCancelled(true);
|
||||
else if (SlimefunManager.isItemSimilar(item, SlimefunItems.CARBON_CHUNK, false)) e.setCancelled(true);
|
||||
|
||||
else if (SlimefunManager.isItemSimilar(item, SlimefunItems.ANDROID_MEMORY_CORE, false)) e.setCancelled(true);
|
||||
else if (SlimefunManager.isItemSimilar(item, SlimefunItems.LAVA_CRYSTAL, false)) e.setCancelled(true);
|
||||
|
||||
else if (SlimefunManager.isItemSimilar(item, SlimefunItems.TINY_URANIUM, false)) e.setCancelled(true);
|
||||
else if (SlimefunManager.isItemSimilar(item, SlimefunItems.SMALL_URANIUM, false)) e.setCancelled(true);
|
||||
|
||||
else if (SlimefunManager.isItemSimilar(item, SlimefunItems.BROKEN_SPAWNER, false)) e.setCancelled(true);
|
||||
else if (SlimefunManager.isItemSimilar(item, SlimefunItems.GPS_MARKER_TOOL, true)) {
|
||||
e.setCancelled(true);
|
||||
Slimefun.getGPSNetwork().addWaypoint(e.getPlayer(), e.getBlock().getLocation());
|
||||
}
|
||||
else if (SlimefunManager.isItemSimilar(item, SlimefunItems.CHRISTMAS_PRESENT, false)) {
|
||||
e.setCancelled(true);
|
||||
|
||||
if (e.getPlayer().getGameMode() != GameMode.CREATIVE) {
|
||||
ItemUtils.consumeItem(item, false);
|
||||
}
|
||||
|
||||
FireworkUtils.launchRandom(e.getPlayer(), 3);
|
||||
List<ItemStack> gifts = new ArrayList<>();
|
||||
|
||||
gifts.add(new CustomItem(SlimefunItems.CHRISTMAS_HOT_CHOCOLATE, 1));
|
||||
gifts.add(new CustomItem(SlimefunItems.CHRISTMAS_CHOCOLATE_APPLE, 4));
|
||||
gifts.add(new CustomItem(SlimefunItems.CHRISTMAS_CARAMEL_APPLE, 4));
|
||||
gifts.add(new CustomItem(SlimefunItems.CHRISTMAS_CAKE, 4));
|
||||
gifts.add(new CustomItem(SlimefunItems.CHRISTMAS_COOKIE, 8));
|
||||
gifts.add(new CustomItem(SlimefunItems.CHRISTMAS_PRESENT, 1));
|
||||
gifts.add(new CustomItem(SlimefunItems.CHRISTMAS_EGG_NOG, 1));
|
||||
gifts.add(new CustomItem(SlimefunItems.CHRISTMAS_MILK, 1));
|
||||
gifts.add(new CustomItem(SlimefunItems.CHRISTMAS_APPLE_CIDER, 1));
|
||||
gifts.add(new CustomItem(SlimefunItems.CHRISTMAS_FRUIT_CAKE, 4));
|
||||
gifts.add(new CustomItem(SlimefunItems.CHRISTMAS_APPLE_PIE, 4));
|
||||
gifts.add(new ItemStack(Material.EMERALD));
|
||||
|
||||
e.getBlockPlaced().getWorld().dropItemNaturally(e.getBlockPlaced().getLocation(), gifts.get(ThreadLocalRandom.current().nextInt(gifts.size())));
|
||||
}
|
||||
else if (SlimefunManager.isItemSimilar(item, SlimefunItems.CARGO_INPUT, false)) {
|
||||
if (e.getBlock().getY() != e.getBlockAgainst().getY()) {
|
||||
SlimefunPlugin.getLocal().sendMessage(e.getPlayer(), "machines.CARGO_NODES.must-be-placed", true);
|
||||
e.setCancelled(true);
|
||||
}
|
||||
}
|
||||
else if (SlimefunManager.isItemSimilar(item, SlimefunItems.CARGO_OUTPUT, false)) {
|
||||
if (e.getBlock().getY() != e.getBlockAgainst().getY()) {
|
||||
SlimefunPlugin.getLocal().sendMessage(e.getPlayer(), "machines.CARGO_NODES.must-be-placed", true);
|
||||
e.setCancelled(true);
|
||||
}
|
||||
}
|
||||
else if (SlimefunManager.isItemSimilar(item, SlimefunItems.CARGO_OUTPUT_ADVANCED, false)) {
|
||||
if (e.getBlock().getY() != e.getBlockAgainst().getY()) {
|
||||
SlimefunPlugin.getLocal().sendMessage(e.getPlayer(), "machines.CARGO_NODES.must-be-placed", true);
|
||||
e.setCancelled(true);
|
||||
}
|
||||
}
|
||||
else if (SlimefunManager.isItemSimilar(item, SlimefunItems.CT_IMPORT_BUS, false) && e.getBlock().getY() != e.getBlockAgainst().getY()) {
|
||||
SlimefunPlugin.getLocal().sendMessage(e.getPlayer(), "machines.CARGO_NODES.must-be-placed", true);
|
||||
e.setCancelled(true);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
||||
public void onBlockBreak(BlockBreakEvent e) {
|
||||
boolean allow = true;
|
||||
List<ItemStack> drops = new ArrayList<>();
|
||||
ItemStack item = e.getPlayer().getInventory().getItemInMainHand();
|
||||
int fortune = 1;
|
||||
|
||||
Block block2 = e.getBlock().getRelative(BlockFace.UP);
|
||||
if (sensitiveMaterials.contains(block2.getType())) {
|
||||
SlimefunItem sfItem = BlockStorage.check(e.getBlock().getRelative(BlockFace.UP));
|
||||
|
||||
if (sfItem == null) {
|
||||
BlockState state = block2.getState();
|
||||
if (state instanceof TileState) {
|
||||
Optional<String> blockData = SlimefunPlugin.getBlockDataService().getBlockData((TileState) state);
|
||||
|
||||
if (blockData.isPresent()) {
|
||||
sfItem = SlimefunItem.getByID(blockData.get());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (sfItem != null && !(sfItem instanceof HandledBlock)) {
|
||||
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);
|
||||
}
|
||||
else {
|
||||
e.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
SlimefunItem sfItem = BlockStorage.check(e.getBlock());
|
||||
|
||||
if (sfItem == null) {
|
||||
BlockState state = e.getBlock().getState();
|
||||
|
||||
if (state instanceof TileState) {
|
||||
Optional<String> blockData = SlimefunPlugin.getBlockDataService().getBlockData((TileState) state);
|
||||
|
||||
if (blockData.isPresent()) {
|
||||
sfItem = SlimefunItem.getByID(blockData.get());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (sfItem != null && !(sfItem instanceof HandledBlock)) {
|
||||
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.
|
||||
for (ItemHandler handler : SlimefunItem.getHandlers("BlockBreakHandler")) {
|
||||
if (((BlockBreakHandler) handler).onBlockBreak(e, item, fortune, drops)) break;
|
||||
}
|
||||
}
|
||||
if (allow) {
|
||||
drops.addAll(sfItem.getDrops());
|
||||
BlockStorage.clearBlockInfo(e.getBlock());
|
||||
}
|
||||
else {
|
||||
e.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
}
|
||||
else if (item != null) {
|
||||
if (item.getEnchantments().containsKey(Enchantment.LOOT_BONUS_BLOCKS) && !item.getEnchantments().containsKey(Enchantment.SILK_TOUCH)) {
|
||||
Random random = ThreadLocalRandom.current();
|
||||
|
||||
fortune = random.nextInt(item.getEnchantmentLevel(Enchantment.LOOT_BONUS_BLOCKS) + 2) - 1;
|
||||
if (fortune <= 0) fortune = 1;
|
||||
fortune = (e.getBlock().getType() == Material.LAPIS_ORE ? 4 + random.nextInt(5) : 1) * (fortune + 1);
|
||||
}
|
||||
|
||||
for (ItemHandler handler : SlimefunItem.getHandlers("BlockBreakHandler")) {
|
||||
if (((BlockBreakHandler) handler).onBlockBreak(e, item, fortune, drops)) break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!drops.isEmpty()) {
|
||||
e.getBlock().setType(Material.AIR);
|
||||
|
||||
if (e.isDropItems()) {
|
||||
for (ItemStack drop : drops) {
|
||||
if (drop != null) {
|
||||
e.getBlock().getWorld().dropItemNaturally(e.getBlock().getLocation(), drop);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user