This commit is contained in:
kento2 2026-08-08 03:41:09 +02:00
parent 670eba418c
commit 13ced30434
122 changed files with 223 additions and 12 deletions

0
minigame/BUILD Normal file
View file

22
minigame/crowwars/BUILD Normal file
View file

@ -0,0 +1,22 @@
load("@rules_jvm_external//:defs.bzl", "artifact")
load("@rules_java//java:java_binary.bzl", "java_binary")
java_binary(
name = "_plugin",
srcs = glob(["main/java/**/*.java"]),
create_executable = False,
resources = glob(["main/resources/**"]),
resource_strip_prefix = "minigame/crowwars/main/resources",
deps = [
"//core/bukkit:api",
artifact("io.papermc.paper:paper-api"),
],
)
genrule(
name = "plugin",
srcs = [":_plugin_deploy.jar"],
outs = ["plugin.jar"],
cmd = "cp $< $@",
visibility = ["//visibility:public"],
)

View file

@ -0,0 +1,20 @@
# phases
## Lobby
players can select a kit
## teleport phase
player's are teleported to the arena
wait 3s to not overwhelm players.
## no-pvp
for 10s, pvp is disabled.
players can loot chests etc.
## pvp
players die until only one is left.
the last wins.

View file

@ -0,0 +1,11 @@
package site.lab0x13.scrow.crowwars;
import org.bukkit.plugin.java.JavaPlugin;
public final class CrowWarsPlugin extends JavaPlugin {
@Override
public void onEnable() {
}
}

View file

@ -0,0 +1,10 @@
package site.lab0x13.scrow.crowwars.config;
import org.bukkit.inventory.ItemStack;
import site.lab0x13.scrow.crowwars.loot.Pool;
public record Config(
Pool<ItemStack> rareLootPool,
Pool<ItemStack> commonLootPool
) {
}

View file

@ -0,0 +1,8 @@
package site.lab0x13.scrow.crowwars.jumppad;
import de.kentoj.scrow.bukkit.region.Region;
public record JumpPad(
Region region
) {
}

View file

@ -0,0 +1,12 @@
package site.lab0x13.scrow.crowwars.jumppad;
import com.destroystokyo.paper.event.player.PlayerJumpEvent;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
public class JumpPadListener implements Listener {
@EventHandler(ignoreCancelled = true)
public void onPlayerJump(PlayerJumpEvent event) {
}
}

View file

@ -0,0 +1,12 @@
package site.lab0x13.scrow.crowwars.jumppad;
import java.util.List;
public class JumpPadRegistry {
private final List<JumpPad> jumppads;
public JumpPadRegistry(List<JumpPad> jumppads) {
this.jumppads = jumppads;
}
}

View file

@ -0,0 +1,26 @@
package site.lab0x13.scrow.crowwars.loot;
import org.bukkit.inventory.ItemStack;
import java.util.ArrayList;
import java.util.List;
import java.util.random.RandomGenerator;
public class LootTable {
private final Pool<Pool<ItemStack>> poolPool;
public LootTable(Weighted<Pool<ItemStack>>[] pools) {
this.poolPool = new Pool<>(pools);
}
public List<ItemStack> generate(RandomGenerator random, int size) {
var result = new ArrayList<ItemStack>();
for (int i = 0; i < size; i++) {
var pool = poolPool.pick(random);
var selectedItem = pool.value().pick(random).value();
result.add(selectedItem);
}
return result;
}
}

View file

@ -0,0 +1,32 @@
package site.lab0x13.scrow.crowwars.loot;
import java.util.Arrays;
import java.util.random.RandomGenerator;
public class Pool<T> {
private final Weighted<T>[] entries;
public Pool(Weighted<T>[] entries) {
this.entries = entries;
}
public Weighted<T> pick(RandomGenerator random) {
/*
* weighted random algorithm.
* https://dev.to/jacktt/understanding-the-weighted-random-algorithm-581p
*/
int totalWeight = Arrays.stream(entries)
.mapToInt(Weighted::weight)
.sum();
int cursor = 0;
var rand = random.nextInt(totalWeight);
for (Weighted<T> ent : entries) {
cursor += ent.weight();
if (rand < cursor)
return ent;
}
throw new RuntimeException("this should not be reached");
}
}

View file

@ -0,0 +1,34 @@
package site.lab0x13.scrow.crowwars.loot;
import org.bukkit.inventory.ItemStack;
import java.util.random.RandomGenerator;
import static com.google.common.base.Preconditions.checkArgument;
public final class PoolEntry {
private final ItemStack itemStack;
private final int weight;
private final int minAmount, maxAmount;
public PoolEntry(ItemStack itemStack, int weight, int minAmount, int maxAmount) {
checkArgument(weight > 0, "weight must be > 0");
checkArgument(minAmount <= 0, "minAmount must be > 0");
checkArgument(maxAmount > minAmount, "maxAmount must be >= minAmount");
this.itemStack = itemStack.clone();
this.weight = weight;
this.minAmount = minAmount;
this.maxAmount = maxAmount;
}
public int weight() {
return weight;
}
public ItemStack create(RandomGenerator random) {
var i = itemStack.clone();
i.setAmount(random.nextInt(minAmount, maxAmount + 1));
return i;
}
}

View file

@ -0,0 +1,8 @@
package site.lab0x13.scrow.crowwars.loot;
public interface Weighted<T> {
int weight();
T value();
}

View file

@ -0,0 +1,6 @@
name: "CrowWars"
version: "0"
depend: [ "CoreBukkit" ]
main: "site.lab0x13.scrow.crowwars.CrowWarsPlugin"
api-version: "1.21"
author: "Kento2"