extras/src/main/java/pw/kaboom/extras/modules/block/BlockPhysics.java

107 lines
2.8 KiB
Java
Raw Normal View History

2019-07-30 17:14:24 +00:00
package pw.kaboom.extras;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
2019-11-30 23:04:08 +00:00
import org.bukkit.block.BlockState;
2019-11-15 15:30:36 +00:00
import org.bukkit.block.CommandBlock;
2019-07-30 17:14:24 +00:00
2019-09-28 00:29:48 +00:00
import org.bukkit.entity.EntityType;
2019-07-30 17:14:24 +00:00
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
2019-12-03 04:53:37 +00:00
import org.bukkit.event.block.BlockFormEvent;
2019-07-30 17:14:24 +00:00
import org.bukkit.event.block.BlockFromToEvent;
import org.bukkit.event.block.BlockPhysicsEvent;
import org.bukkit.event.block.BlockRedstoneEvent;
2019-09-28 00:29:48 +00:00
import org.bukkit.event.entity.EntityChangeBlockEvent;
2019-07-30 17:14:24 +00:00
2019-12-03 04:53:37 +00:00
import org.bukkit.plugin.java.JavaPlugin;
import com.destroystokyo.paper.event.block.BlockDestroyEvent;
2019-09-28 00:29:48 +00:00
class BlockPhysics implements Listener {
2019-07-30 17:14:24 +00:00
@EventHandler
2019-12-03 04:53:37 +00:00
void onBlockForm(BlockFormEvent event) {
if (event.getBlock().getType() == Material.LAVA ||
event.getBlock().getType() == Material.WATER) {
for (BlockFace face : JavaPlugin.getPlugin(Main.class).faces) {
if (event.getBlock().getRelative(face).getType() != Material.LAVA &&
event.getBlock().getRelative(face).getType() != Material.WATER) {
return;
2019-09-28 00:29:48 +00:00
}
2019-12-03 04:53:37 +00:00
event.setCancelled(true);
2019-09-28 00:29:48 +00:00
}
}
2019-07-30 17:14:24 +00:00
}
@EventHandler
2019-12-03 04:53:37 +00:00
void onBlockFromTo(BlockFromToEvent event) {
if (event.getBlock().getType() == Material.LAVA ||
event.getBlock().getType() == Material.WATER) {
boolean lavaFound = false;
boolean waterFound = false;
for (BlockFace face : JavaPlugin.getPlugin(Main.class).faces) {
if (event.getBlock().getRelative(face).getType() == Material.LAVA) {
lavaFound = true;
} else if (event.getBlock().getRelative(face).getType() == Material.WATER) {
waterFound = true;
}
if (lavaFound && waterFound) {
event.setCancelled(true);
2019-10-03 16:30:18 +00:00
}
}
2019-12-03 04:53:37 +00:00
}
}
@EventHandler
void onBlockDestroy(BlockDestroyEvent event) {
if (!event.getBlock().getType().isSolid()) {
for (BlockFace face : JavaPlugin.getPlugin(Main.class).faces) {
if (event.getBlock().getRelative(face).getType() != event.getBlock().getType()) {
return;
2019-07-30 17:14:24 +00:00
}
2019-12-03 04:53:37 +00:00
event.getBlock().setType(Material.AIR, false);
event.setCancelled(true);
2019-07-30 17:14:24 +00:00
}
}
2019-07-30 17:14:24 +00:00
}
2019-12-15 17:26:25 +00:00
/*@EventHandler
2019-12-03 04:53:37 +00:00
void onBlockPhysics(BlockPhysicsEvent event) {
if (event.getSourceBlock().getState() instanceof CommandBlock) {
event.getSourceBlock().getState().update();
}
2019-12-15 17:26:25 +00:00
}*/
2019-12-03 04:53:37 +00:00
2019-07-30 17:14:24 +00:00
@EventHandler
void onBlockRedstone(BlockRedstoneEvent event) {
final double tps = Bukkit.getServer().getTPS()[0];
if (tps < 10) {
event.setNewCurrent(0);
}
}
2019-09-28 00:29:48 +00:00
2019-12-11 01:36:35 +00:00
int fallingBlockCount;
2019-09-28 00:29:48 +00:00
@EventHandler
void onEntityChangeBlock(EntityChangeBlockEvent event) {
if (event.getEntityType() == EntityType.FALLING_BLOCK &&
event.getTo() == Material.AIR) {
2019-12-11 01:36:35 +00:00
fallingBlockCount++;
2019-09-28 00:29:48 +00:00
2019-12-11 01:36:35 +00:00
if (fallingBlockCount == 10) {
2019-09-28 00:29:48 +00:00
event.setCancelled(true);
2019-12-11 01:36:35 +00:00
fallingBlockCount = 0;
2019-09-28 00:29:48 +00:00
}
}
}
2019-07-30 17:14:24 +00:00
}