package com.hypixel.hytale.builtin.buildertools.prefabeditor; import com.hypixel.hytale.builtin.buildertools.BuilderToolsPlugin; import com.hypixel.hytale.component.Archetype; import com.hypixel.hytale.component.ArchetypeChunk; import com.hypixel.hytale.component.CommandBuffer; import com.hypixel.hytale.component.Store; import com.hypixel.hytale.component.query.Query; import com.hypixel.hytale.component.system.EntityEventSystem; import com.hypixel.hytale.math.vector.Vector3i; import com.hypixel.hytale.server.core.event.events.ecs.BreakBlockEvent; import com.hypixel.hytale.server.core.event.events.ecs.PlaceBlockEvent; import com.hypixel.hytale.server.core.universe.world.storage.EntityStore; import java.util.UUID; import java.util.Map.Entry; import javax.annotation.Nonnull; import javax.annotation.Nullable; public final class PrefabDirtySystems { private PrefabDirtySystems() { } private static void markDirtyAtPosition(@Nonnull Vector3i position) { PrefabEditSessionManager prefabEditSessionManager = BuilderToolsPlugin.get().getPrefabEditSessionManager(); for (Entry entry : prefabEditSessionManager.getActiveEditSessions().entrySet()) { PrefabEditSession editSession = entry.getValue(); editSession.markPrefabsDirtyAtPosition(position); } } public static class BlockBreakDirtySystem extends EntityEventSystem { public BlockBreakDirtySystem() { super(BreakBlockEvent.class); } public void handle( int index, @Nonnull ArchetypeChunk archetypeChunk, @Nonnull Store store, @Nonnull CommandBuffer commandBuffer, @Nonnull BreakBlockEvent event ) { PrefabDirtySystems.markDirtyAtPosition(event.getTargetBlock()); } @Nullable @Override public Query getQuery() { return Archetype.empty(); } } public static class BlockPlaceDirtySystem extends EntityEventSystem { public BlockPlaceDirtySystem() { super(PlaceBlockEvent.class); } public void handle( int index, @Nonnull ArchetypeChunk archetypeChunk, @Nonnull Store store, @Nonnull CommandBuffer commandBuffer, @Nonnull PlaceBlockEvent event ) { PrefabDirtySystems.markDirtyAtPosition(event.getTargetBlock()); } @Nullable @Override public Query getQuery() { return Archetype.empty(); } } }