Compare commits
4 Commits
2a6baf4ea9
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 383de955c3 | |||
| 3e72e7d152 | |||
| 2005cefc93 | |||
| dae6cb4009 |
Binary file not shown.
@@ -1,47 +1,95 @@
|
||||
package com.thewrightserver.bigbooms;
|
||||
|
||||
import net.kyori.adventure.text.Component;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
import net.kyori.adventure.text.format.NamedTextColor;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Creeper;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.entity.Trident;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.entity.ExplosionPrimeEvent;
|
||||
|
||||
import org.bukkit.event.entity.CreatureSpawnEvent;
|
||||
import org.bukkit.event.entity.ProjectileHitEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.metadata.FixedMetadataValue;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
public final class Bigbooms extends JavaPlugin implements Listener {
|
||||
|
||||
private int creeperCounter = 0;
|
||||
|
||||
@Override
|
||||
public void onEnable() {
|
||||
Bukkit.getPluginManager().registerEvents(this, this);
|
||||
getLogger().info("BigBooms enabled! Creepers now explode 10x bigger.");
|
||||
getLogger().info("BigBooms enabled!");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDisable() {
|
||||
getLogger().info("BigBooms disabled.");
|
||||
getLogger().info("BigBooms disabled!");
|
||||
}
|
||||
|
||||
// Make all creepers red on spawn
|
||||
@EventHandler
|
||||
public void onCreeperPrime(ExplosionPrimeEvent event) {
|
||||
public void onCreeperSpawn(CreatureSpawnEvent event) {
|
||||
if (event.getEntity() instanceof Creeper creeper) {
|
||||
makeRedCreeper(creeper);
|
||||
}
|
||||
}
|
||||
|
||||
creeperCounter++;
|
||||
|
||||
// Every 20th creeper becomes Red
|
||||
if (creeperCounter % 20 == 0) {
|
||||
|
||||
// Set custom name using Adventure Components
|
||||
creeper.customName(Component.text("Red Creeper"));
|
||||
creeper.isCustomNameVisible();
|
||||
|
||||
// Multiply explosion
|
||||
float newRadius = event.getRadius() * 10;
|
||||
event.setRadius(newRadius);
|
||||
|
||||
getLogger().info("Red Creeper exploded with radius " + newRadius);
|
||||
// Make tridents explode
|
||||
@EventHandler
|
||||
public void onTridentHit(ProjectileHitEvent event) {
|
||||
if (event.getEntity() instanceof Trident trident) {
|
||||
if (trident.hasMetadata("RedCreeperTrident")) {
|
||||
trident.getWorld().createExplosion(trident.getLocation(), 5F, false, true);
|
||||
trident.remove();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Helper method to make a creeper red with a trident
|
||||
private void makeRedCreeper(Creeper creeper) {
|
||||
// Metadata so we know it’s a Red Creeper
|
||||
creeper.setMetadata("RedCreeper", new FixedMetadataValue(this, true));
|
||||
|
||||
// Red name
|
||||
creeper.customName(Component.text("Red Creeper").color(NamedTextColor.RED));
|
||||
creeper.setCustomNameVisible(true);
|
||||
|
||||
// Give a trident
|
||||
ItemStack trident = new ItemStack(Material.TRIDENT);
|
||||
creeper.getEquipment().setItemInMainHand(trident);
|
||||
|
||||
// Start trident-throwing task
|
||||
startTridentTask(creeper);
|
||||
}
|
||||
|
||||
// Task to throw tridents at players
|
||||
private void startTridentTask(Creeper creeper) {
|
||||
new BukkitRunnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
if (!creeper.isValid() || creeper.isDead() || !creeper.hasMetadata("RedCreeper")) {
|
||||
cancel();
|
||||
return;
|
||||
}
|
||||
|
||||
Player target = creeper.getWorld().getPlayers().stream().findAny().orElse(null);
|
||||
if (target != null) {
|
||||
Trident tridentProjectile = creeper.getWorld().spawn(
|
||||
creeper.getLocation().add(0, 1, 0),
|
||||
Trident.class
|
||||
);
|
||||
tridentProjectile.setShooter(creeper);
|
||||
tridentProjectile.setVelocity(
|
||||
target.getLocation().toVector()
|
||||
.subtract(creeper.getLocation().toVector())
|
||||
.normalize()
|
||||
.multiply(1.5)
|
||||
);
|
||||
tridentProjectile.setMetadata("RedCreeperTrident", new FixedMetadataValue(Bigbooms.this, true));
|
||||
}
|
||||
}
|
||||
}.runTaskTimer(this, 0L, 40L); // every 2 seconds
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,3 +2,7 @@ name: Bigbooms
|
||||
version: '1.0-SNAPSHOT'
|
||||
main: com.thewrightserver.bigbooms.Bigbooms
|
||||
api-version: '1.21'
|
||||
commands:
|
||||
spawnredcreeper:
|
||||
description: Spawns a Red Creeper at your location
|
||||
usage: /spawnredcreeper
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user