commit 44b9f28de04fc37884d3e372bf48941290a4af14 Author: Elias Müller Date: Fri Jan 9 22:14:14 2026 +0100 Initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9e64cea --- /dev/null +++ b/.gitignore @@ -0,0 +1,33 @@ +# Created by https://www.toptal.com/developers/gitignore/api/java +# Edit at https://www.toptal.com/developers/gitignore?templates=java + +### Java ### +# Compiled class file +*.class + +# Log file +*.log + +# BlueJ files +*.ctxt + +# Mobile Tools for Java (J2ME) +.mtj.tmp/ + +# Package Files # +*.jar +*.war +*.nar +*.ear +*.zip +*.tar.gz +*.rar + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* +replay_pid* + +# End of https://www.toptal.com/developers/gitignore/api/java + + +run diff --git a/.gradle/8.8/checksums/checksums.lock b/.gradle/8.8/checksums/checksums.lock new file mode 100644 index 0000000..18f69c8 Binary files /dev/null and b/.gradle/8.8/checksums/checksums.lock differ diff --git a/.gradle/8.8/checksums/md5-checksums.bin b/.gradle/8.8/checksums/md5-checksums.bin new file mode 100644 index 0000000..8c00aed Binary files /dev/null and b/.gradle/8.8/checksums/md5-checksums.bin differ diff --git a/.gradle/8.8/checksums/sha1-checksums.bin b/.gradle/8.8/checksums/sha1-checksums.bin new file mode 100644 index 0000000..1893418 Binary files /dev/null and b/.gradle/8.8/checksums/sha1-checksums.bin differ diff --git a/.gradle/8.8/dependencies-accessors/gc.properties b/.gradle/8.8/dependencies-accessors/gc.properties new file mode 100644 index 0000000..e69de29 diff --git a/.gradle/8.8/executionHistory/executionHistory.bin b/.gradle/8.8/executionHistory/executionHistory.bin new file mode 100644 index 0000000..3eb0b86 Binary files /dev/null and b/.gradle/8.8/executionHistory/executionHistory.bin differ diff --git a/.gradle/8.8/executionHistory/executionHistory.lock b/.gradle/8.8/executionHistory/executionHistory.lock new file mode 100644 index 0000000..0878de0 Binary files /dev/null and b/.gradle/8.8/executionHistory/executionHistory.lock differ diff --git a/.gradle/8.8/fileChanges/last-build.bin b/.gradle/8.8/fileChanges/last-build.bin new file mode 100644 index 0000000..f76dd23 Binary files /dev/null and b/.gradle/8.8/fileChanges/last-build.bin differ diff --git a/.gradle/8.8/fileHashes/fileHashes.bin b/.gradle/8.8/fileHashes/fileHashes.bin new file mode 100644 index 0000000..e28dda0 Binary files /dev/null and b/.gradle/8.8/fileHashes/fileHashes.bin differ diff --git a/.gradle/8.8/fileHashes/fileHashes.lock b/.gradle/8.8/fileHashes/fileHashes.lock new file mode 100644 index 0000000..d79c16b Binary files /dev/null and b/.gradle/8.8/fileHashes/fileHashes.lock differ diff --git a/.gradle/8.8/fileHashes/resourceHashesCache.bin b/.gradle/8.8/fileHashes/resourceHashesCache.bin new file mode 100644 index 0000000..a233c04 Binary files /dev/null and b/.gradle/8.8/fileHashes/resourceHashesCache.bin differ diff --git a/.gradle/8.8/gc.properties b/.gradle/8.8/gc.properties new file mode 100644 index 0000000..e69de29 diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock new file mode 100644 index 0000000..ce04621 Binary files /dev/null and b/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ diff --git a/.gradle/buildOutputCleanup/cache.properties b/.gradle/buildOutputCleanup/cache.properties new file mode 100644 index 0000000..f66ad90 --- /dev/null +++ b/.gradle/buildOutputCleanup/cache.properties @@ -0,0 +1,2 @@ +#Fri Jan 09 21:21:17 CET 2026 +gradle.version=8.8 diff --git a/.gradle/buildOutputCleanup/outputFiles.bin b/.gradle/buildOutputCleanup/outputFiles.bin new file mode 100644 index 0000000..88c854e Binary files /dev/null and b/.gradle/buildOutputCleanup/outputFiles.bin differ diff --git a/.gradle/file-system.probe b/.gradle/file-system.probe new file mode 100644 index 0000000..a1ec032 Binary files /dev/null and b/.gradle/file-system.probe differ diff --git a/.gradle/vcs-1/gc.properties b/.gradle/vcs-1/gc.properties new file mode 100644 index 0000000..e69de29 diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..b86273d --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml new file mode 100644 index 0000000..f9163b4 --- /dev/null +++ b/.idea/gradle.xml @@ -0,0 +1,15 @@ + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..85d2fc0 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..d11317e --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/modules/BabyCreeper.main.iml b/.idea/modules/BabyCreeper.main.iml new file mode 100644 index 0000000..a376b96 --- /dev/null +++ b/.idea/modules/BabyCreeper.main.iml @@ -0,0 +1,13 @@ + + + + + + + ADVENTURE + + 1 + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000..aacd907 --- /dev/null +++ b/build.gradle @@ -0,0 +1,55 @@ +plugins { + id 'java' + id("xyz.jpenilla.run-paper") version "2.3.1" +} + +group = 'eu.mhsl.minecraft.BabyCreeper' +version = '1.0-SNAPSHOT' + +repositories { + mavenCentral() + maven { + name = "papermc-repo" + url = "https://repo.papermc.io/repository/maven-public/" + } +} + +dependencies { + compileOnly("io.papermc.paper:paper-api:1.21.11-R0.1-SNAPSHOT") +} + +tasks { + runServer { + // Configure the Minecraft version for our task. + // This is the only required configuration besides applying the plugin. + // Your plugin's jar (or shadowJar if present) will be used automatically. + minecraftVersion("1.21.10") + } +} + +def targetJavaVersion = 21 +java { + def javaVersion = JavaVersion.toVersion(targetJavaVersion) + sourceCompatibility = javaVersion + targetCompatibility = javaVersion + if (JavaVersion.current() < javaVersion) { + toolchain.languageVersion = JavaLanguageVersion.of(targetJavaVersion) + } +} + +tasks.withType(JavaCompile).configureEach { + options.encoding = 'UTF-8' + + if (targetJavaVersion >= 10 || JavaVersion.current().isJava10Compatible()) { + options.release.set(targetJavaVersion) + } +} + +processResources { + def props = [version: version] + inputs.properties props + filteringCharset 'UTF-8' + filesMatching('plugin.yml') { + expand props + } +} diff --git a/build/resources/main/config.yml b/build/resources/main/config.yml new file mode 100644 index 0000000..b194556 --- /dev/null +++ b/build/resources/main/config.yml @@ -0,0 +1,5 @@ +babyCreepers: + enabled: true + spawnProbability: 0.1 + size: 0.5 + speed: 0.3 \ No newline at end of file diff --git a/build/resources/main/plugin.yml b/build/resources/main/plugin.yml new file mode 100644 index 0000000..98d34b8 --- /dev/null +++ b/build/resources/main/plugin.yml @@ -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 diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/BabyCreeper.class.uniqueId1 b/build/tmp/compileJava/compileTransaction/stash-dir/BabyCreeper.class.uniqueId1 new file mode 100644 index 0000000..4b295d3 Binary files /dev/null and b/build/tmp/compileJava/compileTransaction/stash-dir/BabyCreeper.class.uniqueId1 differ diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/BabyCreeperListener.class.uniqueId0 b/build/tmp/compileJava/compileTransaction/stash-dir/BabyCreeperListener.class.uniqueId0 new file mode 100644 index 0000000..da42e14 Binary files /dev/null and b/build/tmp/compileJava/compileTransaction/stash-dir/BabyCreeperListener.class.uniqueId0 differ diff --git a/build/tmp/compileJava/previous-compilation-data.bin b/build/tmp/compileJava/previous-compilation-data.bin new file mode 100644 index 0000000..3ff80a4 Binary files /dev/null and b/build/tmp/compileJava/previous-compilation-data.bin differ diff --git a/build/tmp/jar/MANIFEST.MF b/build/tmp/jar/MANIFEST.MF new file mode 100644 index 0000000..59499bc --- /dev/null +++ b/build/tmp/jar/MANIFEST.MF @@ -0,0 +1,2 @@ +Manifest-Version: 1.0 + diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 0000000..e69de29 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..0d8ab51 --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1 @@ +distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip diff --git a/settings.gradle b/settings.gradle new file mode 100644 index 0000000..4ec6631 --- /dev/null +++ b/settings.gradle @@ -0,0 +1 @@ +rootProject.name = 'BabyCreeper' diff --git a/src/main/java/eu/mhsl/minecraft/BabyCreeper.java b/src/main/java/eu/mhsl/minecraft/BabyCreeper.java new file mode 100644 index 0000000..9641a60 --- /dev/null +++ b/src/main/java/eu/mhsl/minecraft/BabyCreeper.java @@ -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); + } +} diff --git a/src/main/java/eu/mhsl/minecraft/BabyCreeperListener.java b/src/main/java/eu/mhsl/minecraft/BabyCreeperListener.java new file mode 100644 index 0000000..6de4da9 --- /dev/null +++ b/src/main/java/eu/mhsl/minecraft/BabyCreeperListener.java @@ -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); + } +} diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml new file mode 100644 index 0000000..b194556 --- /dev/null +++ b/src/main/resources/config.yml @@ -0,0 +1,5 @@ +babyCreepers: + enabled: true + spawnProbability: 0.1 + size: 0.5 + speed: 0.3 \ No newline at end of file diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml new file mode 100644 index 0000000..98d34b8 --- /dev/null +++ b/src/main/resources/plugin.yml @@ -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