Refactor and optimized BabyCreeper handling
This commit is contained in:
@@ -6,18 +6,18 @@ import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public final class BabyCreeper extends JavaPlugin {
|
||||
@NotNull
|
||||
public static final NamespacedKey babyCreeper = NamespacedKey.fromString("babycreeper");
|
||||
import java.util.Objects;
|
||||
|
||||
public static ConfigurationSection config;
|
||||
public final class BabyCreeper extends JavaPlugin {
|
||||
public static final @NotNull NamespacedKey babyCreeper = Objects.requireNonNull(NamespacedKey.fromString("babycreeper"));
|
||||
private static ConfigurationSection config;
|
||||
|
||||
@Override
|
||||
public void onEnable() {
|
||||
saveResource("config.yml", false);
|
||||
reloadConfig();
|
||||
config = getConfig().getConfigurationSection("babyCreepers");
|
||||
if(config == null) throw new IllegalStateException("Could not load config. Root element 'babyCreepers' is missing!");
|
||||
Objects.requireNonNull(config, "Could not load config. Root element 'babyCreepers' is missing!");
|
||||
|
||||
if(!config.getBoolean("enabled", true)) return;
|
||||
Bukkit.getPluginManager().registerEvents(new BabyCreeperListener(), this);
|
||||
@@ -27,4 +27,8 @@ public final class BabyCreeper extends JavaPlugin {
|
||||
public void onDisable() {
|
||||
Bukkit.getScheduler().cancelTasks(this);
|
||||
}
|
||||
|
||||
public static ConfigurationSection config() {
|
||||
return config;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,9 +1,7 @@
|
||||
package eu.mhsl.minecraft;
|
||||
|
||||
import org.bukkit.attribute.Attribute;
|
||||
import org.bukkit.attribute.AttributeInstance;
|
||||
import org.bukkit.entity.Creeper;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.entity.WindCharge;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
@@ -16,24 +14,38 @@ import java.util.Objects;
|
||||
import java.util.concurrent.ThreadLocalRandom;
|
||||
|
||||
public class BabyCreeperListener implements Listener {
|
||||
@EventHandler
|
||||
public void onCreeperSpawn(CreatureSpawnEvent event) {
|
||||
if(!event.getEntity().getType().equals(EntityType.CREEPER)) return;
|
||||
if(ThreadLocalRandom.current().nextDouble() > BabyCreeper.config.getDouble("spawnProbability", 0.1)) return;
|
||||
private final double spawnProbability;
|
||||
private final double scaleValue;
|
||||
private final double speedValue;
|
||||
|
||||
Creeper creeper = (Creeper) event.getEntity();
|
||||
creeper.getPersistentDataContainer().set(BabyCreeper.babyCreeper, PersistentDataType.BOOLEAN, true);
|
||||
AttributeInstance scaleAttribute = Objects.requireNonNull(creeper.getAttribute(Attribute.SCALE), "Could not find scale attribute for Entity");
|
||||
AttributeInstance speedAttribute = Objects.requireNonNull(creeper.getAttribute(Attribute.MOVEMENT_SPEED), "Could not find speed attribute for Entity");
|
||||
scaleAttribute.setBaseValue(BabyCreeper.config.getDouble("size", 0.5));
|
||||
speedAttribute.setBaseValue(BabyCreeper.config.getDouble("speed", 0.5));
|
||||
public BabyCreeperListener() {
|
||||
this.spawnProbability = BabyCreeper.config().getDouble("spawnProbability", 0.1);
|
||||
this.scaleValue = BabyCreeper.config().getDouble("size", 0.5);
|
||||
this.speedValue = BabyCreeper.config().getDouble("speed", 0.5);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
@EventHandler(ignoreCancelled = true)
|
||||
public void onCreeperSpawn(CreatureSpawnEvent event) {
|
||||
if(!(event.getEntity() instanceof Creeper creeper)) return;
|
||||
if(ThreadLocalRandom.current().nextDouble() > spawnProbability) return;
|
||||
|
||||
creeper.getPersistentDataContainer().set(BabyCreeper.babyCreeper, PersistentDataType.BOOLEAN, true);
|
||||
|
||||
Objects.requireNonNull(
|
||||
creeper.getAttribute(Attribute.SCALE),
|
||||
"Could not find scale attribute for Entity"
|
||||
).setBaseValue(scaleValue);
|
||||
|
||||
Objects.requireNonNull(
|
||||
creeper.getAttribute(Attribute.MOVEMENT_SPEED),
|
||||
"Could not find speed attribute for Entity"
|
||||
).setBaseValue(speedValue);
|
||||
}
|
||||
|
||||
@EventHandler(ignoreCancelled = true)
|
||||
public void onCreeperExplode(EntityExplodeEvent event) {
|
||||
if(!event.getEntity().getType().equals(EntityType.CREEPER)) return;
|
||||
Creeper creeper = (Creeper) event.getEntity();
|
||||
if(!creeper.getPersistentDataContainer().has(BabyCreeper.babyCreeper, PersistentDataType.BOOLEAN)) return;
|
||||
if(!(event.getEntity() instanceof Creeper creeper)) return;
|
||||
if(!isBabyCreeper(creeper)) return;
|
||||
|
||||
event.setCancelled(true);
|
||||
|
||||
@@ -45,11 +57,16 @@ public class BabyCreeperListener implements Listener {
|
||||
windCharge.explode();
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
@EventHandler(ignoreCancelled = true)
|
||||
public void onCreeperDamage(EntityDamageByEntityEvent event) {
|
||||
if(!event.getDamager().getType().equals(EntityType.CREEPER)) return;
|
||||
Creeper creeper = (Creeper) event.getDamager();
|
||||
if(!creeper.getPersistentDataContainer().has(BabyCreeper.babyCreeper, PersistentDataType.BOOLEAN)) return;
|
||||
if(!(event.getDamager() instanceof Creeper creeper)) return;
|
||||
if(!isBabyCreeper(creeper)) return;
|
||||
|
||||
event.setCancelled(true);
|
||||
}
|
||||
|
||||
@SuppressWarnings("BooleanMethodIsAlwaysInverted")
|
||||
private boolean isBabyCreeper(Creeper creeper) {
|
||||
return creeper.getPersistentDataContainer().has(BabyCreeper.babyCreeper, PersistentDataType.BOOLEAN);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user