start of the refactoring
This commit is contained in:
@@ -10,8 +10,11 @@ repositories {
|
||||
name = "papermc"
|
||||
url = uri("https://repo.papermc.io/repository/maven-public/")
|
||||
}
|
||||
mavenCentral()
|
||||
}
|
||||
|
||||
dependencies {
|
||||
compileOnly("io.papermc.paper:paper-api:1.21.4-R0.1-SNAPSHOT")
|
||||
compileOnly("org.projectlombok:lombok:1.18.42")
|
||||
annotationProcessor("org.projectlombok:lombok:1.18.42")
|
||||
}
|
||||
|
||||
@@ -1,28 +1,23 @@
|
||||
package fyi.tiko.battletowers;
|
||||
|
||||
import fyi.tiko.battletowers.boss.TowerBossDeathListener;
|
||||
import fyi.tiko.battletowers.generation.TowerPopulator;
|
||||
import fyi.tiko.battletowers.loot.TowerChestListener;
|
||||
import fyi.tiko.battletowers.loot.TowerLootManager;
|
||||
import lombok.Getter;
|
||||
import lombok.experimental.Accessors;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.NamespacedKey;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
||||
@Getter
|
||||
@Accessors(fluent = true)
|
||||
public final class BattleTowersPlugin extends JavaPlugin {
|
||||
|
||||
@Getter
|
||||
private static BattleTowersPlugin instance;
|
||||
|
||||
public static BattleTowersPlugin instance() {
|
||||
return instance;
|
||||
}
|
||||
|
||||
private TowerLootManager lootManager;
|
||||
private NamespacedKey towerKey;
|
||||
|
||||
public NamespacedKey towerKey() {
|
||||
return towerKey;
|
||||
}
|
||||
|
||||
public TowerLootManager getLootManager() {
|
||||
return lootManager;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onEnable() {
|
||||
instance = this;
|
||||
@@ -32,9 +27,8 @@ public final class BattleTowersPlugin extends JavaPlugin {
|
||||
towerKey = new NamespacedKey(this, "tower_location");
|
||||
lootManager = new TowerLootManager();
|
||||
|
||||
Bukkit.getWorlds().forEach(world -> {
|
||||
world.getPopulators().add(new TowerPopulator());
|
||||
});
|
||||
// todo: entweder als world-populator oder direkt im event maybe?
|
||||
Bukkit.getWorlds().forEach(world -> world.getPopulators().add(new TowerPopulator()));
|
||||
|
||||
getServer().getPluginManager().registerEvents(
|
||||
new TowerChestListener(), this
|
||||
|
||||
@@ -1,24 +0,0 @@
|
||||
package fyi.tiko.battletowers;
|
||||
|
||||
import org.bukkit.Chunk;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.generator.BlockPopulator;
|
||||
|
||||
import java.util.Random;
|
||||
|
||||
public class TowerPopulator extends BlockPopulator {
|
||||
|
||||
private final TowerGenerator generator = new TowerGenerator();
|
||||
|
||||
@Override
|
||||
public void populate(World world, Random random, Chunk chunk) {
|
||||
|
||||
// Chance pro Chunk (erstmal test)
|
||||
if (random.nextInt(250) != 0) return;
|
||||
|
||||
int x = chunk.getX() * 16 + 8;
|
||||
int z = chunk.getZ() * 16 + 8;
|
||||
|
||||
generator.trySpawnTower(world, random, x, z);
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package fyi.tiko.battletowers;
|
||||
package fyi.tiko.battletowers.boss;
|
||||
|
||||
import org.bukkit.entity.IronGolem;
|
||||
import org.bukkit.event.EventHandler;
|
||||
@@ -1,17 +1,17 @@
|
||||
package fyi.tiko.battletowers;
|
||||
package fyi.tiko.battletowers.boss;
|
||||
|
||||
import static fyi.tiko.battletowers.BattleTowersPlugin.instance;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.attribute.Attribute;
|
||||
import org.bukkit.entity.IronGolem;
|
||||
import org.bukkit.persistence.PersistentDataType;
|
||||
|
||||
import static fyi.tiko.battletowers.BattleTowersPlugin.instance;
|
||||
|
||||
public class TowerBossSpawner {
|
||||
|
||||
public static void spawnDormantBoss(org.bukkit.World world,
|
||||
Location loc,
|
||||
int towerX, int towerY, int towerZ) {
|
||||
Location loc,
|
||||
int towerX, int towerY, int towerZ) {
|
||||
|
||||
IronGolem golem = world.spawn(loc, IronGolem.class);
|
||||
|
||||
@@ -30,21 +30,23 @@ public class TowerBossSpawner {
|
||||
|
||||
// Save tower coords inside entity
|
||||
golem.getPersistentDataContainer().set(
|
||||
instance().towerKey(),
|
||||
PersistentDataType.STRING,
|
||||
towerX + ";" + towerY + ";" + towerZ
|
||||
instance().towerKey(),
|
||||
PersistentDataType.STRING,
|
||||
towerX + ";" + towerY + ";" + towerZ
|
||||
);
|
||||
}
|
||||
|
||||
public static void wakeUp(IronGolem golem) {
|
||||
|
||||
if (golem.hasAI()) return;
|
||||
if (golem.hasAI()) {
|
||||
return;
|
||||
}
|
||||
|
||||
golem.setAI(true);
|
||||
golem.getWorld().playSound(
|
||||
golem.getLocation(),
|
||||
"entity.iron_golem.repair",
|
||||
3f, 0.6f
|
||||
golem.getLocation(),
|
||||
"entity.iron_golem.repair",
|
||||
3f, 0.6f
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -1,25 +1,29 @@
|
||||
package fyi.tiko.battletowers;
|
||||
package fyi.tiko.battletowers.boss;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import static fyi.tiko.battletowers.BattleTowersPlugin.instance;
|
||||
|
||||
import fyi.tiko.battletowers.data.Towers;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
|
||||
import static fyi.tiko.battletowers.BattleTowersPlugin.instance;
|
||||
|
||||
public class TowerDestroyer {
|
||||
|
||||
// TODO: die einzelnen floors werden nicht kaputt gemacht, sondern nur ganz oben + nachricht nur an spielern in reichweite von X blöcken...
|
||||
public static void startCollapse(Location center, Player killer) {
|
||||
|
||||
World world = center.getWorld();
|
||||
|
||||
Bukkit.broadcastMessage("§cA Battletower's Guardian has fallen! The Tower will collapse...");
|
||||
world.getNearbyEntities(center, 15, 15, 15).forEach(entity -> {
|
||||
if (!(entity instanceof Player player)) {
|
||||
return;
|
||||
}
|
||||
|
||||
player.sendRichMessage("<red>A Battletower's Guardian has fallen! The tower will collapse...");
|
||||
});
|
||||
|
||||
new BukkitRunnable() {
|
||||
|
||||
int floor = 6;
|
||||
int floor = Towers.FLOOR_AMOUNT_PER_TOWER;
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
@@ -29,9 +33,8 @@ public class TowerDestroyer {
|
||||
return;
|
||||
}
|
||||
|
||||
double y = center.getY() - (floor * 7);
|
||||
|
||||
world.createExplosion(center, 10f);
|
||||
double y = center.getY() - (floor * Towers.FLOOR_HEIGHT);
|
||||
world.createExplosion(center.getX(), y, center.getZ(), 10f);
|
||||
floor--;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
package fyi.tiko.battletowers.data;
|
||||
|
||||
public class TowerRegistry {
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package fyi.tiko.battletowers;
|
||||
package fyi.tiko.battletowers.data;
|
||||
|
||||
import org.bukkit.Material;
|
||||
|
||||
22
src/main/java/fyi/tiko/battletowers/data/Towers.java
Normal file
22
src/main/java/fyi/tiko/battletowers/data/Towers.java
Normal file
@@ -0,0 +1,22 @@
|
||||
package fyi.tiko.battletowers.data;
|
||||
|
||||
/**
|
||||
* Represents constant values that are used across the plugin.
|
||||
*/
|
||||
public final class Towers {
|
||||
private Towers() {
|
||||
|
||||
}
|
||||
/**
|
||||
* The height a floor should receive.
|
||||
*/
|
||||
public static final int FLOOR_HEIGHT = 7;
|
||||
|
||||
/**
|
||||
* The amount of floors a battle tower should have, excluding the boss floor.
|
||||
*/
|
||||
public static final int FLOOR_AMOUNT_PER_TOWER = 6;
|
||||
|
||||
|
||||
|
||||
}
|
||||
@@ -1,5 +1,10 @@
|
||||
package fyi.tiko.battletowers;
|
||||
package fyi.tiko.battletowers.generation;
|
||||
|
||||
import fyi.tiko.battletowers.BattleTowersPlugin;
|
||||
import fyi.tiko.battletowers.data.TowerType;
|
||||
import fyi.tiko.battletowers.boss.TowerBossSpawner;
|
||||
import fyi.tiko.battletowers.loot.TowerLootManager;
|
||||
import fyi.tiko.battletowers.loot.TowerStageItemManager;
|
||||
import java.util.Random;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
@@ -91,9 +96,10 @@ public class TowerGenerator {
|
||||
return y;
|
||||
}
|
||||
|
||||
// ✅ 1:1 Block Placement Core
|
||||
public void generate(World world, int ix, int jy, int kz, TowerType towerChosen, boolean underground) {
|
||||
// todo: alles weg von World#setBlockData() stattdessen: LimitedRegion#setBlockData()
|
||||
|
||||
// 1:1 Block Placement Core
|
||||
public void generate(World world, int ix, int jy, int kz, TowerType towerChosen, boolean underground) {
|
||||
Material towerWallBlock = towerChosen.wall();
|
||||
Material towerLightBlock = towerChosen.light();
|
||||
Material towerFloorBlock = towerChosen.floor();
|
||||
@@ -384,7 +390,7 @@ public class TowerGenerator {
|
||||
boolean underground,
|
||||
boolean topFloor
|
||||
) {
|
||||
TowerLootManager loot = BattleTowersPlugin.instance().getLootManager();
|
||||
TowerLootManager loot = BattleTowersPlugin.instance().lootManager();
|
||||
TowerStageItemManager floorChestManager;
|
||||
|
||||
// 1. Loot-Logik (Original Forge Style)
|
||||
@@ -0,0 +1,53 @@
|
||||
package fyi.tiko.battletowers.generation;
|
||||
|
||||
import java.util.Random;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.generator.BlockPopulator;
|
||||
import org.bukkit.generator.LimitedRegion;
|
||||
import org.bukkit.generator.WorldInfo;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class TowerPopulator extends BlockPopulator {
|
||||
|
||||
private final TowerGenerator generator = new TowerGenerator();
|
||||
|
||||
/*
|
||||
@Override
|
||||
public void populate(@NotNull World world, Random random, @NotNull Chunk chunk) {
|
||||
|
||||
// Chance pro Chunk (erstmal test)
|
||||
if (random.nextInt(250) != 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
int x = chunk.getX() * 16 + 8;
|
||||
int z = chunk.getZ() * 16 + 8;
|
||||
|
||||
generator.trySpawnTower(world, random, x, z);
|
||||
}
|
||||
*/
|
||||
|
||||
@Override
|
||||
public void populate(
|
||||
@NotNull WorldInfo worldInfo,
|
||||
@NotNull Random random,
|
||||
int chunkX,
|
||||
int chunkZ,
|
||||
@NotNull LimitedRegion limitedRegion
|
||||
) {
|
||||
// Chance pro Chunk (1/250)
|
||||
if (random.nextInt(250) != 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Chunk-Koordinaten -> Block-Koordinaten (Chunk-Mitte)
|
||||
int x = chunkX * 16 + 8;
|
||||
int z = chunkZ * 16 + 8;
|
||||
|
||||
// Welt aus Region holen
|
||||
World world = limitedRegion.getWorld();
|
||||
|
||||
// Tower spawnen
|
||||
generator.trySpawnTower(world, random, x, z);
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
package fyi.tiko.battletowers;
|
||||
package fyi.tiko.battletowers.loot;
|
||||
|
||||
import fyi.tiko.battletowers.boss.TowerBossSpawner;
|
||||
import org.bukkit.entity.IronGolem;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
@@ -1,7 +1,6 @@
|
||||
package fyi.tiko.battletowers;
|
||||
package fyi.tiko.battletowers.loot;
|
||||
|
||||
import fyi.tiko.battletowers.BattleTowersPlugin;
|
||||
|
||||
import java.util.Random;
|
||||
|
||||
public class TowerLootManager {
|
||||
@@ -1,4 +1,4 @@
|
||||
package fyi.tiko.battletowers;
|
||||
package fyi.tiko.battletowers.loot;
|
||||
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
Reference in New Issue
Block a user