separate the check for the blocks that should trigger the interaction into separate method

only insert the interaction if there's no other existing one
This commit is contained in:
2026-02-25 17:11:06 +01:00
parent d3fbb8fe06
commit 3eada6cd2f
@@ -2,6 +2,7 @@ package me.youhavetrouble.quickerstacker;
import com.hypixel.hytale.component.Ref; import com.hypixel.hytale.component.Ref;
import com.hypixel.hytale.event.EventPriority;
import com.hypixel.hytale.math.vector.Vector3i; import com.hypixel.hytale.math.vector.Vector3i;
import com.hypixel.hytale.protocol.InteractionType; import com.hypixel.hytale.protocol.InteractionType;
import com.hypixel.hytale.server.core.asset.type.blocktype.config.BlockType; import com.hypixel.hytale.server.core.asset.type.blocktype.config.BlockType;
@@ -25,6 +26,7 @@ import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.logging.Level;
public class QuickerStacker extends JavaPlugin { public class QuickerStacker extends JavaPlugin {
@@ -53,19 +55,19 @@ public class QuickerStacker extends JavaPlugin {
QuickStackToNearbyChestsInteraction.CODEC QuickStackToNearbyChestsInteraction.CODEC
); );
this.getEventRegistry().registerGlobal(BootEvent.class, (event) -> { this.getEventRegistry().registerGlobal(EventPriority.LAST, BootEvent.class, (event) -> {
for (BlockType block : BlockType.getAssetMap().getAssetMap().values()) { for (BlockType block : BlockType.getAssetMap().getAssetMap().values()) {
if (!"Open_Container".equals(block.getInteractions().get(InteractionType.Use))) continue; if (!isBlockContainer(block)) continue;
try { try {
Field interactionsField = block.getClass().getDeclaredField("interactions"); Field interactionsField = block.getClass().getDeclaredField("interactions");
interactionsField.setAccessible(true); interactionsField.setAccessible(true);
Object interactionsObj = interactionsField.get(block); Object interactionsObj = interactionsField.get(block);
if (!(interactionsObj instanceof Map<?,?> interactionsMap)) continue; if (!(interactionsObj instanceof Map<?,?> interactionsMap)) continue;
Map<Object, Object> modifiableMap = new HashMap<>(interactionsMap); Map<Object, Object> modifiableMap = new HashMap<>(interactionsMap);
modifiableMap.put(InteractionType.Secondary, "Yht_QuickerStacker_QuickStack"); modifiableMap.putIfAbsent(InteractionType.Secondary, "Yht_QuickerStacker_QuickStack");
interactionsField.set(block, modifiableMap); interactionsField.set(block, modifiableMap);
} catch (NoSuchFieldException | IllegalAccessException _) { } catch (NoSuchFieldException | IllegalAccessException _) {
System.out.println("Error modifying interactions for block type: " + block.getId()); getLogger().at(Level.WARNING).log("Error modifying interactions for block type: %s", block.getId());
continue; continue;
} }
} }
@@ -94,4 +96,9 @@ public class QuickerStacker extends JavaPlugin {
return !event.isCancelled(); return !event.isCancelled();
} }
private static boolean isBlockContainer(BlockType blockType) {
if ("Open_Container".equals(blockType.getInteractions().get(InteractionType.Use))) return true;
return false;
}
} }