added explosion types

This commit is contained in:
ImproperIssues
2023-07-16 23:56:35 -07:00
parent 91c11e7518
commit fa5bd85da8
10 changed files with 119 additions and 9 deletions

View File

@@ -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.

View File

@@ -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

View File

@@ -0,0 +1,6 @@
# Plugin
group= 'io.github.itzispyder'
# Minecraft
mc_version= 1.19.4

View File

@@ -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());

View File

@@ -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;

View File

@@ -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);
}
}

View File

@@ -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) {

View File

@@ -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