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