summaryrefslogtreecommitdiff
path: root/src/main/java/luckyblock/action
diff options
context:
space:
mode:
authorketsuban_152 <webmaster@dangofacotry.net>2026-07-04 21:59:07 +0900
committerketsuban_152 <webmaster@dangofacotry.net>2026-07-04 21:59:07 +0900
commit8354ed6c09e960d2f48d7bc40b7c7978947524eb (patch)
treeeba1dfff5d762cb6c991e93f27c8d2cae5e6a57f /src/main/java/luckyblock/action
downloadLuckyBlock-8354ed6c09e960d2f48d7bc40b7c7978947524eb.tar.gz
LuckyBlock-8354ed6c09e960d2f48d7bc40b7c7978947524eb.tar.bz2
LuckyBlock-8354ed6c09e960d2f48d7bc40b7c7978947524eb.zip
Initial commitHEADmaster
Diffstat (limited to 'src/main/java/luckyblock/action')
-rw-r--r--src/main/java/luckyblock/action/LuckyActionHolder.java62
-rw-r--r--src/main/java/luckyblock/action/LuckyActionManager.java67
-rw-r--r--src/main/java/luckyblock/action/triggers/BroadcastTrigger.java33
-rw-r--r--src/main/java/luckyblock/action/triggers/ILuckyTrigger.java12
-rw-r--r--src/main/java/luckyblock/action/triggers/SummonItemTrigger.java34
-rw-r--r--src/main/java/luckyblock/action/triggers/SummonTrigger.java72
-rw-r--r--src/main/java/luckyblock/action/triggers/TrappedRoomTrigger.java38
7 files changed, 318 insertions, 0 deletions
diff --git a/src/main/java/luckyblock/action/LuckyActionHolder.java b/src/main/java/luckyblock/action/LuckyActionHolder.java
new file mode 100644
index 0000000..b18ad67
--- /dev/null
+++ b/src/main/java/luckyblock/action/LuckyActionHolder.java
@@ -0,0 +1,62 @@
+package luckyblock.action;
+
+import com.google.gson.JsonElement;
+import com.google.gson.annotations.SerializedName;
+import luckyblock.action.triggers.*;
+import net.minecraft.core.BlockPos;
+import net.minecraft.server.level.ServerLevel;
+import net.minecraft.world.level.Level;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class LuckyActionHolder {
+ private static final List<ILuckyTrigger> cmdList = new ArrayList<>();
+
+ static {
+ cmdList.add(new BroadcastTrigger());
+ cmdList.add(new SummonItemTrigger());
+ cmdList.add(new SummonTrigger());
+ cmdList.add(new TrappedRoomTrigger());
+ }
+
+ public String type = "";
+ public int weight = -1;
+ public List<String> queue;
+
+ @SerializedName("delay-queue")
+ public List<Integer> delay_queue;
+ public JsonElement json;
+ public List<String> items;
+ public List<String> mobs;
+ public int count = 1;
+ public int height = 0;
+ @SerializedName("is-powered")
+ public boolean is_powered = false;
+ @SerializedName("wall-block")
+ public String wall_block = "minecraft:stone_bricks";
+ public int radius = 3;
+
+ public void execute(Level level, BlockPos pos) {
+ if (!(level instanceof ServerLevel serverLevel)) { return; }
+
+ for (ILuckyTrigger c : cmdList) {
+ if (this.type != null && this.type.equals(c.getName())) {
+ c.execute(serverLevel, pos, this, level.getRandom());
+ break;
+ }
+ }
+
+ if (this.queue != null && !this.queue.isEmpty()) {
+ for (int i=0;i<this.queue.size();i++) {
+ String next = this.queue.get(i);
+ int delayTicks = 0;
+ if (this.delay_queue != null && i<this.delay_queue.size()) {
+ delayTicks = this.delay_queue.get(i) * 20;
+ }
+ LuckyActionManager.enqueue(next, pos, serverLevel, delayTicks);
+ }
+ }
+ }
+
+}
diff --git a/src/main/java/luckyblock/action/LuckyActionManager.java b/src/main/java/luckyblock/action/LuckyActionManager.java
new file mode 100644
index 0000000..4acc2eb
--- /dev/null
+++ b/src/main/java/luckyblock/action/LuckyActionManager.java
@@ -0,0 +1,67 @@
+package luckyblock.action;
+
+import luckyblock.Main;
+import net.minecraft.core.BlockPos;
+import net.minecraft.server.level.ServerLevel;
+import net.minecraftforge.event.TickEvent;
+import net.minecraftforge.eventbus.api.SubscribeEvent;
+
+import java.util.LinkedList;
+import java.util.Queue;
+
+public class LuckyActionManager {
+ private static class Task {
+ String fieldName;
+ BlockPos pos;
+ ServerLevel level;
+ int remainingTicks;
+
+ Task(String fieldName, BlockPos pos, ServerLevel level, int remainingTicks) {
+ this.fieldName = fieldName.replace("-", "_");
+ this.pos = pos;
+ this.level = level;
+ this.remainingTicks = remainingTicks;
+ }
+ }
+
+ private static final Queue<Task> actions = new LinkedList<>();
+
+ public static void enqueue(String actionField, BlockPos pos, ServerLevel level, int delayTicks) {
+ actions.offer(new Task(actionField, pos, level, delayTicks));
+ }
+
+ public static void enqueue(String actionField, BlockPos pos, int delayTicks) {
+ if (net.minecraftforge.server.ServerLifecycleHooks.getCurrentServer() != null) {
+ enqueue(actionField, pos, net.minecraftforge.server.ServerLifecycleHooks.getCurrentServer().overworld(), delayTicks);
+ }
+ }
+
+ @SubscribeEvent
+ public static void onServerTick(TickEvent.ServerTickEvent event) {
+ if (event.phase != TickEvent.Phase.END
+ || actions.isEmpty()
+ || Main.settings == null) {
+ return;
+ }
+
+ int size = actions.size();
+ for (int i=0;i<size;i++) {
+ Task task = actions.poll();
+ if (task == null) continue;
+
+ task.remainingTicks--;
+ if (task.remainingTicks <= 0) {
+ ServerLevel level = task.level;
+ if (level == null) {
+ level = event.getServer().overworld();
+ }
+ LuckyActionHolder action = Main.settings.events.get(task.fieldName);
+ if (action != null) {
+ action.execute(level, task.pos);
+ }
+ }else {
+ actions.offer(task);
+ }
+ }
+ }
+}
diff --git a/src/main/java/luckyblock/action/triggers/BroadcastTrigger.java b/src/main/java/luckyblock/action/triggers/BroadcastTrigger.java
new file mode 100644
index 0000000..fae58f0
--- /dev/null
+++ b/src/main/java/luckyblock/action/triggers/BroadcastTrigger.java
@@ -0,0 +1,33 @@
+package luckyblock.action.triggers;
+
+
+import luckyblock.action.LuckyActionHolder;
+import net.minecraft.core.BlockPos;
+import net.minecraft.network.chat.Component;
+import net.minecraft.server.level.ServerLevel;
+import net.minecraft.util.RandomSource;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class BroadcastTrigger implements ILuckyTrigger {
+ @Override
+ public String getName() {
+ return "broadcast";
+ }
+
+ @Override
+ public void execute(ServerLevel level, BlockPos pos, LuckyActionHolder holder, RandomSource random) {
+ if (holder.json != null) {
+ List<String> messages = new ArrayList<>();
+ if (holder.json.isJsonArray()) {
+ holder.json.getAsJsonArray().forEach(e -> messages.add(e.getAsString()));
+ } else if (holder.json.isJsonPrimitive()) {
+ messages.add(holder.json.getAsString());
+ }
+ for (String msg : messages) {
+ level.getServer().getPlayerList().broadcastSystemMessage(Component.literal(msg), false);
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/src/main/java/luckyblock/action/triggers/ILuckyTrigger.java b/src/main/java/luckyblock/action/triggers/ILuckyTrigger.java
new file mode 100644
index 0000000..6e42d01
--- /dev/null
+++ b/src/main/java/luckyblock/action/triggers/ILuckyTrigger.java
@@ -0,0 +1,12 @@
+package luckyblock.action.triggers;
+
+import luckyblock.action.LuckyActionHolder;
+import net.minecraft.core.BlockPos;
+import net.minecraft.server.level.ServerLevel;
+import net.minecraft.util.RandomSource;
+
+public interface ILuckyTrigger {
+ String getName();
+
+ void execute(ServerLevel level, BlockPos pos, LuckyActionHolder holder, RandomSource random);
+}
diff --git a/src/main/java/luckyblock/action/triggers/SummonItemTrigger.java b/src/main/java/luckyblock/action/triggers/SummonItemTrigger.java
new file mode 100644
index 0000000..fbf44ff
--- /dev/null
+++ b/src/main/java/luckyblock/action/triggers/SummonItemTrigger.java
@@ -0,0 +1,34 @@
+package luckyblock.action.triggers;
+
+
+import luckyblock.action.LuckyActionHolder;
+import net.minecraft.core.BlockPos;
+import net.minecraft.core.registries.BuiltInRegistries;
+import net.minecraft.resources.ResourceLocation;
+import net.minecraft.server.level.ServerLevel;
+import net.minecraft.util.RandomSource;
+import net.minecraft.world.entity.item.ItemEntity;
+import net.minecraft.world.item.ItemStack;
+import net.minecraft.world.level.block.Blocks;
+
+public class SummonItemTrigger implements ILuckyTrigger {
+ @Override
+ public String getName() {
+ return "summon_item";
+ }
+
+ @Override
+ public void execute(ServerLevel level, BlockPos pos, LuckyActionHolder holder, RandomSource random) {
+ if (holder.items != null) {
+ for (String itemId : holder.items) {
+ var item = BuiltInRegistries.ITEM.get(new ResourceLocation(itemId));
+ if (item != Blocks.AIR.asItem()) {
+ for (int i = 0; i < holder.count; i++) {
+ ItemEntity entity = new ItemEntity(level, pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5, new ItemStack(item));
+ level.addFreshEntity(entity);
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/src/main/java/luckyblock/action/triggers/SummonTrigger.java b/src/main/java/luckyblock/action/triggers/SummonTrigger.java
new file mode 100644
index 0000000..54103f5
--- /dev/null
+++ b/src/main/java/luckyblock/action/triggers/SummonTrigger.java
@@ -0,0 +1,72 @@
+package luckyblock.action.triggers;
+
+
+import luckyblock.action.LuckyActionHolder;
+import net.minecraft.core.BlockPos;
+import net.minecraft.core.registries.BuiltInRegistries;
+import net.minecraft.nbt.CompoundTag;
+import net.minecraft.resources.ResourceLocation;
+import net.minecraft.server.level.ServerLevel;
+import net.minecraft.util.RandomSource;
+import net.minecraft.world.entity.EntityType;
+import net.minecraft.world.entity.MobSpawnType;
+import net.minecraft.world.entity.item.FallingBlockEntity;
+import net.minecraft.world.entity.item.PrimedTnt;
+import net.minecraft.world.entity.monster.Creeper;
+import net.minecraft.world.level.block.Block;
+import net.minecraft.world.level.block.Blocks;
+import net.minecraft.world.level.block.state.BlockState;
+
+public class SummonTrigger implements ILuckyTrigger {
+ @Override
+ public String getName() {
+ return "summon";
+ }
+
+ @Override
+ public void execute(ServerLevel level, BlockPos pos, LuckyActionHolder holder, RandomSource random) {
+ if (holder.items != null) {
+ for (String itemId : holder.items) {
+ if (itemId.equals("minecraft:tnt")) {
+ for (int i = 0; i < holder.count; i++) {
+ PrimedTnt tnt = new PrimedTnt(EntityType.TNT, level);
+ double rx = pos.getX() + 0.5 + (random.nextDouble() - 0.5) * 4;
+ double rz = pos.getZ() + 0.5 + (random.nextDouble() - 0.5) * 4;
+ double ry = pos.getY() + holder.height;
+ tnt.moveTo(rx, ry, rz, 0.0F, 0.0F);
+ tnt.setFuse(holder.height > 0 ? 40 + random.nextInt(20) : 60 + random.nextInt(20));
+ level.addFreshEntity(tnt);
+ }
+ } else {
+ Block block = BuiltInRegistries.BLOCK.get(new ResourceLocation(itemId));
+ if (block != Blocks.AIR) {
+ BlockState blockState = block.defaultBlockState();
+ for (int i = 0; i < holder.count; i++) {
+ BlockPos spawnPos = pos.above(holder.height + i);
+ FallingBlockEntity falling = FallingBlockEntity.fall(level, spawnPos, blockState);
+ level.addFreshEntity(falling);
+ }
+ }
+ }
+ }
+ }
+ if (holder.mobs != null) {
+ for (String mobId : holder.mobs) {
+ EntityType<?> entityType = BuiltInRegistries.ENTITY_TYPE.get(new ResourceLocation(mobId));
+ if (entityType != null) {
+ for (int i = 0; i < holder.count; i++) {
+ BlockPos spawnPos = pos.above(holder.height > 0 ? holder.height : 1);
+ var entity = entityType.spawn(level, spawnPos, MobSpawnType.COMMAND);
+ if (entity instanceof Creeper creeper && holder.is_powered) {
+ CompoundTag nbt = new CompoundTag();
+ creeper.saveWithoutId(nbt);
+ nbt.putBoolean("powered", true);
+ creeper.load(nbt);
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
diff --git a/src/main/java/luckyblock/action/triggers/TrappedRoomTrigger.java b/src/main/java/luckyblock/action/triggers/TrappedRoomTrigger.java
new file mode 100644
index 0000000..818fb07
--- /dev/null
+++ b/src/main/java/luckyblock/action/triggers/TrappedRoomTrigger.java
@@ -0,0 +1,38 @@
+package luckyblock.action.triggers;
+
+
+import luckyblock.action.LuckyActionHolder;
+import net.minecraft.core.BlockPos;
+import net.minecraft.core.registries.BuiltInRegistries;
+import net.minecraft.resources.ResourceLocation;
+import net.minecraft.server.level.ServerLevel;
+import net.minecraft.util.RandomSource;
+import net.minecraft.world.level.block.Block;
+import net.minecraft.world.level.block.Blocks;
+import net.minecraft.world.level.block.state.BlockState;
+
+public class TrappedRoomTrigger implements ILuckyTrigger {
+ @Override
+ public String getName() {
+ return "trapped_room";
+ }
+
+ @Override
+ public void execute(ServerLevel level, BlockPos pos, LuckyActionHolder holder, RandomSource random) {
+ Block block = BuiltInRegistries.BLOCK.get(new ResourceLocation(holder.wall_block));
+ BlockState wallState = (block != null) ? block.defaultBlockState() : Blocks.STONE_BRICKS.defaultBlockState();
+ int r = holder.radius;
+ for (int x = -r; x <= r; x++) {
+ for (int y = 0; y <= r * 2; y++) {
+ for (int z = -r; z <= r; z++) {
+ BlockPos targetPos = pos.offset(x, y, z);
+ if (Math.abs(x) == r || Math.abs(z) == r || y == 0 || y == r * 2) {
+ level.setBlock(targetPos, wallState, 3);
+ } else {
+ level.setBlock(targetPos, Blocks.AIR.defaultBlockState(), 3);
+ }
+ }
+ }
+ }
+ }
+} \ No newline at end of file