added explosion types
This commit is contained in:
@@ -2,8 +2,8 @@ plugins {
|
||||
id 'java'
|
||||
}
|
||||
|
||||
group = 'me.improper'
|
||||
version = '3.0'
|
||||
group = project.group
|
||||
version = project.mc_version
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
@@ -18,7 +18,7 @@ repositories {
|
||||
}
|
||||
|
||||
dependencies {
|
||||
compileOnly 'org.spigotmc:spigot-api:1.17.1-R0.1-SNAPSHOT'
|
||||
compileOnly "org.spigotmc:spigot-api:${project.mc_version}-R0.1-SNAPSHOT"
|
||||
}
|
||||
|
||||
def targetJavaVersion = 16
|
||||
|
||||
Binary file not shown.
@@ -1,7 +1,7 @@
|
||||
name: ExplosionsControl
|
||||
version: '3.0'
|
||||
version: '1.19.4'
|
||||
main: io.github.itzispyder.explosionscontrol.ExplosionsControl
|
||||
api-version: 1.17
|
||||
api-version: 1.19
|
||||
authors: [ ImproperIssues ]
|
||||
description: Manager server explosions with just a few simple clicks!
|
||||
website: github.com/ItziSpyder
|
||||
|
||||
Binary file not shown.
@@ -0,0 +1,6 @@
|
||||
|
||||
# Plugin
|
||||
group= 'io.github.itzispyder'
|
||||
|
||||
# Minecraft
|
||||
mc_version= 1.19.4
|
||||
@@ -4,6 +4,7 @@ import io.github.itzispyder.explosionscontrol.commands.BukkitCommand;
|
||||
import io.github.itzispyder.explosionscontrol.commands.commands.ConfigWorldCommand;
|
||||
import io.github.itzispyder.explosionscontrol.commands.commands.UpdateWorldsCommand;
|
||||
import io.github.itzispyder.explosionscontrol.data.ExplosionConfig;
|
||||
import io.github.itzispyder.explosionscontrol.events.ExplosionListener;
|
||||
import io.github.itzispyder.explosionscontrol.events.InventoryListener;
|
||||
import io.github.itzispyder.explosionscontrol.utils.Text;
|
||||
import org.bukkit.Bukkit;
|
||||
@@ -34,6 +35,7 @@ public final class ExplosionsControl extends JavaPlugin {
|
||||
public void init() {
|
||||
// listeners
|
||||
pm.registerEvents(new InventoryListener(), this);
|
||||
pm.registerEvents(new ExplosionListener(), this);
|
||||
|
||||
// commands
|
||||
addCommand(new UpdateWorldsCommand());
|
||||
|
||||
@@ -20,6 +20,18 @@ public enum Mode {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public boolean shouldCancel() {
|
||||
return this == NONE || this == DISABLED;
|
||||
}
|
||||
|
||||
public boolean isDynamic() {
|
||||
return this == DYNAMIC;
|
||||
}
|
||||
|
||||
public boolean isNormal() {
|
||||
return this == ENABLED;
|
||||
}
|
||||
|
||||
public Mode next() {
|
||||
int i = id + 1;
|
||||
i = i >= values().length ? 0 : i;
|
||||
|
||||
@@ -0,0 +1,92 @@
|
||||
package io.github.itzispyder.explosionscontrol.events;
|
||||
|
||||
import io.github.itzispyder.explosionscontrol.data.ExplosionConfig;
|
||||
import io.github.itzispyder.explosionscontrol.data.Mode;
|
||||
import io.github.itzispyder.explosionscontrol.utils.SoundPlayer;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Particle;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.FallingBlock;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.block.BlockExplodeEvent;
|
||||
import org.bukkit.event.entity.EntityExplodeEvent;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class ExplosionListener implements Listener {
|
||||
|
||||
@EventHandler
|
||||
private void onExplodeEntity(EntityExplodeEvent e) {
|
||||
try {
|
||||
this.handleEntityExplosion(e);
|
||||
}
|
||||
catch (Exception ignore) {}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
private void onExplodeBlock(BlockExplodeEvent e) {
|
||||
try {
|
||||
this.handleBlockExplosion(e);
|
||||
}
|
||||
catch (Exception ignore) {}
|
||||
}
|
||||
|
||||
private void handleEntityExplosion(EntityExplodeEvent e) {
|
||||
Entity ent = e.getEntity();
|
||||
World world = ent.getWorld();
|
||||
ExplosionConfig config = ExplosionConfig.load(world);
|
||||
|
||||
switch (ent.getType()) {
|
||||
case CREEPER -> determineOutcome(config.getCreeperMode(), e);
|
||||
case MINECART_TNT -> determineOutcome(config.getMinecartMode(), e);
|
||||
case FIREBALL -> determineOutcome(config.getFireballMode(), e);
|
||||
case WITHER_SKULL -> determineOutcome(config.getWitherMode(), e);
|
||||
case PRIMED_TNT -> determineOutcome(config.getTntMode(), e);
|
||||
case ENDER_CRYSTAL -> determineOutcome(config.getCrystalMode(), e);
|
||||
}
|
||||
}
|
||||
|
||||
private void handleBlockExplosion(BlockExplodeEvent e) {
|
||||
Block block = e.getBlock();
|
||||
World world = block.getWorld();
|
||||
ExplosionConfig config = ExplosionConfig.load(world);
|
||||
|
||||
determineOutcome(config.getBlockMode(), e);
|
||||
}
|
||||
|
||||
private void determineOutcome(Mode mode, EntityExplodeEvent e) {
|
||||
e.setCancelled(mode.shouldCancel());
|
||||
switch (mode) {
|
||||
case DYNAMIC -> dynamicExplode(e.getLocation(), e.blockList());
|
||||
case DISABLED -> fakeExplode(e.getLocation());
|
||||
}
|
||||
}
|
||||
|
||||
private void determineOutcome(Mode mode, BlockExplodeEvent e) {
|
||||
e.setCancelled(mode.shouldCancel());
|
||||
switch (mode) {
|
||||
case DYNAMIC -> dynamicExplode(e.getBlock().getLocation(), e.blockList());
|
||||
case DISABLED -> fakeExplode(e.getBlock().getLocation());
|
||||
}
|
||||
}
|
||||
|
||||
private void dynamicExplode(Location center, List<Block> blocks) {
|
||||
for (Block block : blocks) {
|
||||
Location loc = block.getLocation();
|
||||
Vector dir = loc.toVector().subtract(center.toVector()).normalize().multiply(2).add(new Vector(0, 1, 0));
|
||||
FallingBlock fb = loc.getWorld().spawnFallingBlock(loc.add(0.5, 0.5, 0.5), block.getBlockData());
|
||||
fb.setVelocity(dir);
|
||||
}
|
||||
}
|
||||
|
||||
private void fakeExplode(Location center) {
|
||||
SoundPlayer sound = new SoundPlayer(center, Sound.ENTITY_GENERIC_EXPLODE, 10.0F, 0.7F);
|
||||
sound.playWithin(100.0);
|
||||
center.getWorld().spawnParticle(Particle.EXPLOSION_HUGE, center, 1, 0, 0, 0, 0);
|
||||
}
|
||||
}
|
||||
@@ -20,9 +20,7 @@ public class InventoryListener implements Listener {
|
||||
try {
|
||||
this.handleConfigGui(e);
|
||||
}
|
||||
catch (Exception ignore) {
|
||||
ignore.printStackTrace();
|
||||
}
|
||||
catch (Exception ignore) {}
|
||||
}
|
||||
|
||||
private void handleConfigGui(InventoryClickEvent e) {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
name: ExplosionsControl
|
||||
version: '${version}'
|
||||
main: io.github.itzispyder.explosionscontrol.ExplosionsControl
|
||||
api-version: 1.17
|
||||
api-version: 1.19
|
||||
authors: [ ImproperIssues ]
|
||||
description: Manager server explosions with just a few simple clicks!
|
||||
website: github.com/ItziSpyder
|
||||
|
||||
Reference in New Issue
Block a user