Initial commit

This commit is contained in:
2026-01-09 22:14:14 +01:00
commit 44b9f28de0
38 changed files with 263 additions and 0 deletions

View File

@@ -0,0 +1,30 @@
package eu.mhsl.minecraft;
import org.bukkit.Bukkit;
import org.bukkit.NamespacedKey;
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");
public 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!");
if(!config.getBoolean("enabled", true)) return;
Bukkit.getPluginManager().registerEvents(new BabyCreeperListener(), this);
}
@Override
public void onDisable() {
Bukkit.getScheduler().cancelTasks(this);
}
}

View File

@@ -0,0 +1,57 @@
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;
import org.bukkit.event.entity.CreatureSpawnEvent;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.EntityExplodeEvent;
import org.bukkit.persistence.PersistentDataType;
import org.bukkit.util.Vector;
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;
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));
}
@EventHandler
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;
event.setCancelled(true);
creeper.getLocation().createExplosion(creeper, 2, false, false);
// // WindCharge windCharge = creeper.getLocation().getWorld().spawn(creeper.getLocation(), WindCharge.class);
// windCharge.setVelocity(new Vector(0, -100, 0));
// windCharge.setInvulnerable(true);
// windCharge.setGravity(false);
// windCharge.setInvisible(true);
// windCharge.setVisibleByDefault(false);
}
@EventHandler
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;
event.setCancelled(true);
}
}

View File

@@ -0,0 +1,5 @@
babyCreepers:
enabled: true
spawnProbability: 0.1
size: 0.5
speed: 0.3

View File

@@ -0,0 +1,7 @@
name: BabyCreeper
version: '1.0-SNAPSHOT'
main: eu.mhsl.minecraft.BabyCreeper
api-version: '1.21'
authors: [ MineTec ]
description: Hides Serverlist-Ping information
website: mhsl.eu