Add Backhand Support for Storage Drawers (#47)

This commit is contained in:
mM4ri authored and GitHub committed 2025-10-01 18:57:17 +02:00
1 parent 464add34bf
commit 84987ce834
7 files changed
+107 -41

No files matched your search

+1
View File
@@ -10,4 +10,5 @@ dependencies {
compileOnly('curse.maven:refined-relocation-75811:2262970')
compileOnly('curse.maven:minetweaker3-224029:2255759')
compileOnly("com.github.GTNewHorizons:Avaritia:1.73:dev")
compileOnly("com.github.GTNewHorizons:Backhand:1.6.39:dev")
}
@@ -7,4 +7,6 @@ public interface IIntegrationConfig {
boolean isChiselEnabled();
boolean isGTNHEnabled();
boolean isBackhandEnabled();
}
@@ -24,10 +24,12 @@ import com.jaquadro.minecraft.storagedrawers.api.storage.attribute.LockAttribute
import com.jaquadro.minecraft.storagedrawers.block.tile.TileEntityController;
import com.jaquadro.minecraft.storagedrawers.core.ModCreativeTabs;
import com.jaquadro.minecraft.storagedrawers.core.ModItems;
import com.jaquadro.minecraft.storagedrawers.integration.BackhandIntegrationModule;
import com.jaquadro.minecraft.storagedrawers.item.ItemPersonalKey;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import xonin.backhand.api.core.BackhandUtils;
public class BlockController extends BlockContainer implements INetworked {
@@ -122,6 +124,10 @@ public class BlockController extends BlockContainer implements INetworked {
TileEntityController te = getTileEntitySafe(world, x, y, z);
ItemStack item = player.inventory.getCurrentItem();
if (BackhandIntegrationModule.isEnabled() && BackhandUtils.getOffhandItem(player) != null && item == null) {
if ((BackhandUtils.useOffhandItem(player, () -> true))) return false;
}
if (item != null && item.getItem() != null) {
if (item.getItem() == ModItems.shroudKey) {
if (!world.isRemote) te.toggleShroud(player.getGameProfile());
@@ -56,6 +56,7 @@ import com.jaquadro.minecraft.storagedrawers.block.tile.TileEntityDrawersStandar
import com.jaquadro.minecraft.storagedrawers.core.ModCreativeTabs;
import com.jaquadro.minecraft.storagedrawers.core.ModItems;
import com.jaquadro.minecraft.storagedrawers.core.handlers.GuiHandler;
import com.jaquadro.minecraft.storagedrawers.integration.BackhandIntegrationModule;
import com.jaquadro.minecraft.storagedrawers.item.ItemPersonalKey;
import com.jaquadro.minecraft.storagedrawers.item.ItemTrim;
import com.jaquadro.minecraft.storagedrawers.item.ItemUpgrade;
@@ -69,6 +70,7 @@ import cpw.mods.fml.common.Optional;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import fox.spiteful.avaritia.items.ItemMatterCluster;
import xonin.backhand.api.core.BackhandUtils;
public class BlockDrawers extends BlockContainer implements IExtendedBlockClickHandler, INetworked {
@@ -314,6 +316,11 @@ public class BlockDrawers extends BlockContainer implements IExtendedBlockClickH
if (itemStack.hasDisplayName()) tile.setInventoryName(itemStack.getDisplayName());
if (BackhandIntegrationModule.isEnabled() && entity instanceof EntityPlayer) {
ItemStack offhandItem = BackhandUtils.getOffhandItem((EntityPlayer) entity);
useKey(tile, (EntityPlayer) entity, offhandItem, 0, 0, 0, 0);
}
if (world.isRemote) {
tile.invalidate();
world.markBlockForUpdate(x, y, z);
@@ -331,6 +338,10 @@ public class BlockDrawers extends BlockContainer implements IExtendedBlockClickH
TileEntityDrawers tileDrawers = getTileEntitySafe(world, x, y, z);
ItemStack item = player.inventory.getCurrentItem();
if (BackhandIntegrationModule.isEnabled() && BackhandUtils.getOffhandItem(player) != null && item == null) {
if ((BackhandUtils.useOffhandItem(player, () -> true))) return false;
}
if (!SecurityManager.hasAccess(player.getGameProfile(), tileDrawers)) return false;
if (StorageDrawers.config.cache.debugTrace) {
@@ -369,47 +380,9 @@ public class BlockDrawers extends BlockContainer implements IExtendedBlockClickH
}
return true;
} else
if (item.getItem() == ModItems.upgradeLock) {
boolean locked = tileDrawers.isLocked(LockAttribute.LOCK_POPULATED);
if (locked) {
int slot = getDrawerSlot(side, hitX, hitY, hitZ);
IDrawer drawer = tileDrawers.getDrawer(slot);
if (drawer != null) {
ItemStack stack = drawer.getStoredItemPrototype();
int count = drawer.getStoredItemCount();
if (stack != null && count == 0) {
drawer.setStoredItemRedir(null, 0);
return true;
}
}
} else {
if (useKey(tileDrawers, player, item, side, hitX, hitY, hitZ)) return true;
}
tileDrawers.setLocked(LockAttribute.LOCK_POPULATED, !locked);
tileDrawers.setLocked(LockAttribute.LOCK_EMPTY, !locked);
return true;
} else if (item.getItem() == ModItems.shroudKey) {
tileDrawers.setIsShrouded(!tileDrawers.isShrouded());
return true;
} else if (item.getItem() == ModItems.quantifyKey) {
tileDrawers.setIsQuantified(!tileDrawers.isQuantified());
return true;
} else if (item.getItem() instanceof ItemPersonalKey) {
String securityKey = ((ItemPersonalKey) item.getItem())
.getSecurityProviderKey(item.getItemDamage());
ISecurityProvider provider = StorageDrawers.securityRegistry.getProvider(securityKey);
if (tileDrawers.getOwner() == null) {
tileDrawers.setOwner(player.getPersistentID());
tileDrawers.setSecurityProvider(provider);
} else if (SecurityManager.hasOwnership(player.getGameProfile(), tileDrawers)) {
tileDrawers.setOwner(null);
tileDrawers.setSecurityProvider(null);
} else return false;
return true;
} else if (item.getItem() == ModItems.tape) return false;
} else if (item == null && player.isSneaking()) {
if (tileDrawers.isSealed()) {
tileDrawers.setIsSealed(false);
@@ -432,10 +405,55 @@ public class BlockDrawers extends BlockContainer implements IExtendedBlockClickH
int countAdded = tileDrawers.interactPutItemsIntoSlot(slot, player);
if (countAdded > 0 && currentStack != null) world.markBlockForUpdate(x, y, z);
}
return true;
}
private boolean useKey(TileEntityDrawers tileDrawers, EntityPlayer player, ItemStack item, int side, float hitX,
float hitY, float hitZ) {
if (item != null && item.getItem() != null) {
if (item.getItem() == ModItems.upgradeLock) {
boolean locked = tileDrawers.isLocked(LockAttribute.LOCK_POPULATED);
if (locked) {
int slot = getDrawerSlot(side, hitX, hitY, hitZ);
IDrawer drawer = tileDrawers.getDrawer(slot);
if (drawer != null) {
ItemStack stack = drawer.getStoredItemPrototype();
int count = drawer.getStoredItemCount();
if (stack != null && count == 0) {
drawer.setStoredItemRedir(null, 0);
return true;
}
}
}
tileDrawers.setLocked(LockAttribute.LOCK_POPULATED, !locked);
tileDrawers.setLocked(LockAttribute.LOCK_EMPTY, !locked);
return true;
} else if (item.getItem() == ModItems.shroudKey) {
tileDrawers.setIsShrouded(!tileDrawers.isShrouded());
return true;
} else if (item.getItem() == ModItems.quantifyKey) {
tileDrawers.setIsQuantified(!tileDrawers.isQuantified());
return true;
} else if (item.getItem() instanceof ItemPersonalKey) {
String securityKey = ((ItemPersonalKey) item.getItem()).getSecurityProviderKey(item.getItemDamage());
ISecurityProvider provider = StorageDrawers.securityRegistry.getProvider(securityKey);
if (tileDrawers.getOwner() == null) {
tileDrawers.setOwner(player.getPersistentID());
tileDrawers.setSecurityProvider(provider);
} else if (SecurityManager.hasOwnership(player.getGameProfile(), tileDrawers)) {
tileDrawers.setOwner(null);
tileDrawers.setSecurityProvider(null);
} else return false;
return true;
} else if (item.getItem() == ModItems.tape) return false;
}
return false;
}
protected int getDrawerSlot(int side, float hitX, float hitY, float hitZ) {
if (drawerCount == 1) return 0;
if (drawerCount == 2) return hitTop(hitY) ? 0 : 1;
@@ -83,6 +83,7 @@ public class ConfigManager {
public boolean enableThermalFoundationIntegration;
public boolean enableChiselIntegration;
public boolean enableGTNHIntegration;
public boolean enableBackhandIntegration;
public boolean autoEnablePacks;
public boolean enableNaturaPack;
public boolean enableBopPack;
@@ -187,6 +188,11 @@ public class ConfigManager {
public boolean isGTNHEnabled() {
return cache.enableGTNHIntegration;
}
@Override
public boolean isBackhandEnabled() {
return cache.enableBackhandIntegration;
}
}
private class PacksConfig implements IPacksConfig {
@@ -425,6 +431,8 @@ public class ConfigManager {
.setLanguageKey(LANG_PREFIX + "integration.enableChisel").setRequiresMcRestart(true).getBoolean();
cache.enableGTNHIntegration = config.get(sectionIntegration.getQualifiedName(), "enableGTNH", true)
.setLanguageKey(LANG_PREFIX + "integration.enableGTNH").setRequiresMcRestart(true).getBoolean();
cache.enableBackhandIntegration = config.get(sectionIntegration.getQualifiedName(), "enableBackhand", true)
.setLanguageKey(LANG_PREFIX + "integration.enableBackhand").setRequiresMcRestart(true).getBoolean();
cache.autoEnablePacks = config.get(
sectionPacks.getQualifiedName(),
@@ -0,0 +1,30 @@
package com.jaquadro.minecraft.storagedrawers.integration;
import com.jaquadro.minecraft.storagedrawers.StorageDrawers;
import cpw.mods.fml.common.Loader;
public class BackhandIntegrationModule extends IntegrationModule {
private static final boolean BACKHAND_ENABLED = Loader.isModLoaded("backhand")
&& StorageDrawers.config.integrationConfig.isBackhandEnabled();
@Override
public String getModID() {
return "backhand";
}
public static boolean isEnabled() {
return BACKHAND_ENABLED;
}
@Override
public void init() throws Throwable {
}
@Override
public void postInit() {
}
}
@@ -34,6 +34,7 @@ public class IntegrationRegistry {
reg.add(new ThermalFoundation());
if (ChiselIntegrationModule.isEnabled()) reg.add(new ChiselIntegrationModule());
if (GTNHIntegrationModule.isEnabled()) reg.add(new GTNHIntegrationModule());
if (BackhandIntegrationModule.isEnabled()) reg.add(new BackhandIntegrationModule());
}
private IntegrationRegistry() {