From 8521d309e0de267b9c4f32a455196c7b0d1c9529 Mon Sep 17 00:00:00 2001 From: xoiox Date: Mon, 14 Sep 2026 00:30:07 +0200 Subject: [PATCH] Early working ritual using a snow block & crash fixes --- src/main/java/dev/hytalemodding/RitualSpawner.java | 12 +++++++++++- .../hytalemodding/events/RitualBreakBlockEvent.java | 9 +++++++-- .../hytalemodding/events/RitualPlaceBlockEvent.java | 9 +++++++-- 3 files changed, 25 insertions(+), 5 deletions(-) diff --git a/src/main/java/dev/hytalemodding/RitualSpawner.java b/src/main/java/dev/hytalemodding/RitualSpawner.java index e4a5779..380d117 100644 --- a/src/main/java/dev/hytalemodding/RitualSpawner.java +++ b/src/main/java/dev/hytalemodding/RitualSpawner.java @@ -1,13 +1,23 @@ package dev.hytalemodding; +import com.hypixel.hytale.math.vector.Rotation3f; import com.hypixel.hytale.server.core.universe.world.World; +import com.hypixel.hytale.server.npc.NPCPlugin; +import org.joml.Vector3d; import org.joml.Vector3i; +import java.util.Objects; public class RitualSpawner { public void blockChangeEvent(String itemId, Vector3i targetPosition, World world) { - String blockId = world.getBlockType(targetPosition).getId(); + String blockId = Objects.requireNonNull(world.getBlockType(targetPosition)).getId(); RitualPlugin.LOGGER.atInfo().log( "a block got placed or removed at the position: %d - %d - %d with the block id: %s and with the item id in hand: %s", targetPosition.x, targetPosition.y, targetPosition.z, blockId, itemId); + if (itemId.compareTo("Soil_Snow") == 0 && blockId.compareTo("Empty") == 0) { + RitualPlugin.LOGGER.atInfo().log("Ritual complete"); + world.execute(() -> { + NPCPlugin.get().spawnNPC(world.getEntityStore().getStore(), "Yeti", null, new Vector3d(targetPosition), new Rotation3f(0, 0, 0)); + }); + } } } diff --git a/src/main/java/dev/hytalemodding/events/RitualBreakBlockEvent.java b/src/main/java/dev/hytalemodding/events/RitualBreakBlockEvent.java index 56aa662..62d2c5b 100644 --- a/src/main/java/dev/hytalemodding/events/RitualBreakBlockEvent.java +++ b/src/main/java/dev/hytalemodding/events/RitualBreakBlockEvent.java @@ -7,6 +7,7 @@ import com.hypixel.hytale.component.Store; import com.hypixel.hytale.component.query.Query; import com.hypixel.hytale.component.system.EntityEventSystem; import com.hypixel.hytale.server.core.event.events.ecs.BreakBlockEvent; +import com.hypixel.hytale.server.core.inventory.ItemStack; import com.hypixel.hytale.server.core.universe.world.World; import com.hypixel.hytale.server.core.universe.world.storage.EntityStore; import dev.hytalemodding.RitualSpawner; @@ -27,10 +28,14 @@ public class RitualBreakBlockEvent extends EntityEventSystem store, @NonNullDecl CommandBuffer commandBuffer, @NonNullDecl BreakBlockEvent breakBlockEvent) { - String itemHolding = breakBlockEvent.getItemInHand().getItemId(); + ItemStack itemHolding = breakBlockEvent.getItemInHand(); + String itemId = "Empty"; + if(itemHolding != null) { + itemId = itemHolding.getItemId(); + } Vector3i blockPosition = breakBlockEvent.getTargetBlock(); World world = store.getExternalData().getWorld(); - ritualSpawner.blockChangeEvent(itemHolding, blockPosition, world); + ritualSpawner.blockChangeEvent(itemId, blockPosition, world); } @NullableDecl diff --git a/src/main/java/dev/hytalemodding/events/RitualPlaceBlockEvent.java b/src/main/java/dev/hytalemodding/events/RitualPlaceBlockEvent.java index aafd4ba..4879019 100644 --- a/src/main/java/dev/hytalemodding/events/RitualPlaceBlockEvent.java +++ b/src/main/java/dev/hytalemodding/events/RitualPlaceBlockEvent.java @@ -6,6 +6,7 @@ import com.hypixel.hytale.component.CommandBuffer; import com.hypixel.hytale.component.Store; import com.hypixel.hytale.component.query.Query; import com.hypixel.hytale.server.core.event.events.ecs.PlaceBlockEvent; +import com.hypixel.hytale.server.core.inventory.ItemStack; import com.hypixel.hytale.server.core.universe.world.World; import dev.hytalemodding.RitualSpawner; import com.hypixel.hytale.component.system.EntityEventSystem; @@ -27,10 +28,14 @@ public class RitualPlaceBlockEvent extends EntityEventSystem store, @NonNullDecl CommandBuffer commandBuffer, @NonNullDecl PlaceBlockEvent placeBlockEvent) { - String blockId = placeBlockEvent.getItemInHand().getItemId(); + ItemStack itemHolding = placeBlockEvent.getItemInHand(); + String itemId = "Empty"; + if(itemHolding != null) { + itemId = itemHolding.getItemId(); + } Vector3i targetPosition = placeBlockEvent.getTargetBlock(); World world = store.getExternalData().getWorld(); - ritualSpawner.blockChangeEvent(blockId, targetPosition, world); + ritualSpawner.blockChangeEvent(itemId, targetPosition, world); } @NullableDecl