summaryrefslogtreecommitdiff
path: root/src/main/java/luckyblock/action/triggers/SummonTrigger.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/luckyblock/action/triggers/SummonTrigger.java')
-rw-r--r--src/main/java/luckyblock/action/triggers/SummonTrigger.java72
1 files changed, 72 insertions, 0 deletions
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);
+ }
+ }
+ }
+ }
+ }
+ }
+}
+