Merge branch 'master' into custom-render

# Conflicts:
#	src/com/jaquadro/minecraft/storagedrawers/core/ModBlocks.java
This commit is contained in:
Justin Aquadro committed 2016-02-12 20:08:53 -05:00
commit 30ea409244
57 files changed
+1855 -188

No files matched your search

+1 -1
View File
@@ -17,7 +17,7 @@ buildscript {
apply plugin: 'forge'
version = "1.7.10-1.7.5"
version = "1.7.10-1.8.0"
group= "com.jaquadro.minecraft.storagedrawers" // http://maven.apache.org/guides/mini/guide-naming-conventions.html
archivesBaseName = "StorageDrawers"
+2 -2
View File
@@ -17,7 +17,7 @@ buildscript {
apply plugin: 'forge'
version = "1.7.10-1.1.0"
version = "1.7.10-1.1.1"
group= "com.jaquadro.minecraft.storagedrawers" // http://maven.apache.org/guides/mini/guide-naming-conventions.html
archivesBaseName = "StorageDrawers-BiomesOPlenty"
@@ -26,7 +26,7 @@ minecraft {
assetDir = "../../runtime/assets"
replace '@VERSION@', project.version
replace 'required-after:StorageDrawers', "required-after:StorageDrawers@[1.7.5,)"
replace 'required-after:StorageDrawers', "required-after:StorageDrawers@[1.7.6,)"
}
sourceSets.main {
@@ -41,7 +41,9 @@ public class StorageDrawersPack
@Mod.EventHandler
public void postInit (FMLPostInitializationEvent event) {
IStorageDrawersApi api = StorageDrawersApi.instance();
if (api != null)
if (api != null) {
api.registerStandardPackRecipes(resolver);
api.packFactory().registerResolver(resolver);
}
}
}
+2 -2
View File
@@ -17,7 +17,7 @@ buildscript {
apply plugin: 'forge'
version = "1.7.10-1.1.0"
version = "1.7.10-1.1.1"
group= "com.jaquadro.minecraft.storagedrawers" // http://maven.apache.org/guides/mini/guide-naming-conventions.html
archivesBaseName = "StorageDrawers-Erebus"
@@ -26,7 +26,7 @@ minecraft {
assetDir = "../../runtime/assets"
replace '@VERSION@', project.version
replace 'required-after:StorageDrawers', "required-after:StorageDrawers@[1.7.5,)"
replace 'required-after:StorageDrawers', "required-after:StorageDrawers@[1.7.6,)"
}
sourceSets.main {
@@ -41,7 +41,9 @@ public class StorageDrawersPack
@Mod.EventHandler
public void postInit (FMLPostInitializationEvent event) {
IStorageDrawersApi api = StorageDrawersApi.instance();
if (api != null)
if (api != null) {
api.registerStandardPackRecipes(resolver);
api.packFactory().registerResolver(resolver);
}
}
}
+2 -2
View File
@@ -17,7 +17,7 @@ buildscript {
apply plugin: 'forge'
version = "1.7.10-1.1.0"
version = "1.7.10-1.1.2"
group= "com.jaquadro.minecraft.storagedrawers" // http://maven.apache.org/guides/mini/guide-naming-conventions.html
archivesBaseName = "StorageDrawers-Forestry"
@@ -26,7 +26,7 @@ minecraft {
assetDir = "../../runtime/assets"
replace '@VERSION@', project.version
replace 'required-after:StorageDrawers', "required-after:StorageDrawers@[1.7.5,)"
replace 'required-after:StorageDrawers', "required-after:StorageDrawers@[1.7.6,)"
}
sourceSets.main {
@@ -49,8 +49,10 @@ public class StorageDrawersPack
public void postInit (FMLPostInitializationEvent event) {
IStorageDrawersApi api = StorageDrawersApi.instance();
if (api != null) {
for (IExtendedDataResolver resolver : resolvers)
for (IExtendedDataResolver resolver : resolvers) {
api.registerStandardPackRecipes(resolver);
api.packFactory().registerResolver(resolver);
}
}
}
}
@@ -30,33 +30,37 @@ public class DataResolver extends ExtendedDataResolver
public Block getBlock (BlockConfiguration blockConfig) {
switch (blockConfig.getBlockType()) {
case Drawers:
if (blockConfig.getDrawerCount() == 1)
if (blockConfig.getDrawerCount() == 1 && ModBlocks.fullDrawers1 != null)
return ModBlocks.fullDrawers1[bank];
if (blockConfig.getDrawerCount() == 2 && !blockConfig.isHalfDepth())
if (blockConfig.getDrawerCount() == 2 && !blockConfig.isHalfDepth() && ModBlocks.fullDrawers2 != null)
return ModBlocks.fullDrawers2[bank];
if (blockConfig.getDrawerCount() == 4 && !blockConfig.isHalfDepth())
if (blockConfig.getDrawerCount() == 4 && !blockConfig.isHalfDepth() && ModBlocks.fullDrawers4 != null)
return ModBlocks.fullDrawers4[bank];
if (blockConfig.getDrawerCount() == 2 && blockConfig.isHalfDepth())
if (blockConfig.getDrawerCount() == 2 && blockConfig.isHalfDepth() && ModBlocks.halfDrawers2 != null)
return ModBlocks.halfDrawers2[bank];
if (blockConfig.getDrawerCount() == 4 && blockConfig.isHalfDepth())
if (blockConfig.getDrawerCount() == 4 && blockConfig.isHalfDepth() && ModBlocks.halfDrawers4 != null)
return ModBlocks.halfDrawers4[bank];
break;
case DrawersSorting:
if (blockConfig.getDrawerCount() == 1)
if (blockConfig.getDrawerCount() == 1 && RefinedRelocation.fullDrawers1 != null)
return RefinedRelocation.fullDrawers1[bank];
if (blockConfig.getDrawerCount() == 2 && !blockConfig.isHalfDepth())
if (blockConfig.getDrawerCount() == 2 && !blockConfig.isHalfDepth() && RefinedRelocation.fullDrawers2 != null)
return RefinedRelocation.fullDrawers2[bank];
if (blockConfig.getDrawerCount() == 4 && !blockConfig.isHalfDepth())
if (blockConfig.getDrawerCount() == 4 && !blockConfig.isHalfDepth() && RefinedRelocation.fullDrawers4 != null)
return RefinedRelocation.fullDrawers4[bank];
if (blockConfig.getDrawerCount() == 2 && blockConfig.isHalfDepth())
if (blockConfig.getDrawerCount() == 2 && blockConfig.isHalfDepth() && RefinedRelocation.halfDrawers2 != null)
return RefinedRelocation.halfDrawers2[bank];
if (blockConfig.getDrawerCount() == 4 && blockConfig.isHalfDepth())
if (blockConfig.getDrawerCount() == 4 && blockConfig.isHalfDepth() && RefinedRelocation.halfDrawers4 != null)
return RefinedRelocation.halfDrawers4[bank];
break;
case Trim:
return ModBlocks.trim[bank];
if (ModBlocks.trim != null)
return ModBlocks.trim[bank];
break;
case TrimSorting:
return RefinedRelocation.trim[bank];
if (RefinedRelocation.trim != null)
return RefinedRelocation.trim[bank];
break;
}
return null;
}
+2 -2
View File
@@ -17,7 +17,7 @@ buildscript {
apply plugin: 'forge'
version = "1.7.10-1.1.0"
version = "1.7.10-1.1.2"
group= "com.jaquadro.minecraft.storagedrawers" // http://maven.apache.org/guides/mini/guide-naming-conventions.html
archivesBaseName = "StorageDrawers-Misc"
@@ -26,7 +26,7 @@ minecraft {
assetDir = "../../runtime/assets"
replace '@VERSION@', project.version
replace 'required-after:StorageDrawers', "required-after:StorageDrawers@[1.7.5,)"
replace 'required-after:StorageDrawers', "required-after:StorageDrawers@[1.7.6,)"
}
sourceSets.main {
@@ -47,8 +47,10 @@ public class StorageDrawersPack
public void postInit (FMLPostInitializationEvent event) {
IStorageDrawersApi api = StorageDrawersApi.instance();
if (api != null) {
for (IExtendedDataResolver resolver : resolvers)
for (IExtendedDataResolver resolver : resolvers) {
api.registerStandardPackRecipes(resolver);
api.packFactory().registerResolver(resolver);
}
}
}
}
@@ -32,33 +32,37 @@ public class DataResolver extends ExtendedDataResolver
public Block getBlock (BlockConfiguration blockConfig) {
switch (blockConfig.getBlockType()) {
case Drawers:
if (blockConfig.getDrawerCount() == 1)
if (blockConfig.getDrawerCount() == 1 && ModBlocks.fullDrawers1 != null)
return ModBlocks.fullDrawers1[bank];
if (blockConfig.getDrawerCount() == 2 && !blockConfig.isHalfDepth())
if (blockConfig.getDrawerCount() == 2 && !blockConfig.isHalfDepth() && ModBlocks.fullDrawers2 != null)
return ModBlocks.fullDrawers2[bank];
if (blockConfig.getDrawerCount() == 4 && !blockConfig.isHalfDepth())
if (blockConfig.getDrawerCount() == 4 && !blockConfig.isHalfDepth() && ModBlocks.fullDrawers4 != null)
return ModBlocks.fullDrawers4[bank];
if (blockConfig.getDrawerCount() == 2 && blockConfig.isHalfDepth())
if (blockConfig.getDrawerCount() == 2 && blockConfig.isHalfDepth() && ModBlocks.halfDrawers2 != null)
return ModBlocks.halfDrawers2[bank];
if (blockConfig.getDrawerCount() == 4 && blockConfig.isHalfDepth())
if (blockConfig.getDrawerCount() == 4 && blockConfig.isHalfDepth() && ModBlocks.halfDrawers4 != null)
return ModBlocks.halfDrawers4[bank];
break;
case DrawersSorting:
if (blockConfig.getDrawerCount() == 1)
if (blockConfig.getDrawerCount() == 1 && RefinedRelocation.fullDrawers1 != null)
return RefinedRelocation.fullDrawers1[bank];
if (blockConfig.getDrawerCount() == 2 && !blockConfig.isHalfDepth())
if (blockConfig.getDrawerCount() == 2 && !blockConfig.isHalfDepth() && RefinedRelocation.fullDrawers2 != null)
return RefinedRelocation.fullDrawers2[bank];
if (blockConfig.getDrawerCount() == 4 && !blockConfig.isHalfDepth())
if (blockConfig.getDrawerCount() == 4 && !blockConfig.isHalfDepth() && RefinedRelocation.fullDrawers4 != null)
return RefinedRelocation.fullDrawers4[bank];
if (blockConfig.getDrawerCount() == 2 && blockConfig.isHalfDepth())
if (blockConfig.getDrawerCount() == 2 && blockConfig.isHalfDepth() && RefinedRelocation.halfDrawers2 != null)
return RefinedRelocation.halfDrawers2[bank];
if (blockConfig.getDrawerCount() == 4 && blockConfig.isHalfDepth())
if (blockConfig.getDrawerCount() == 4 && blockConfig.isHalfDepth() && RefinedRelocation.halfDrawers4 != null)
return RefinedRelocation.halfDrawers4[bank];
break;
case Trim:
return ModBlocks.trim[bank];
if (ModBlocks.trim != null)
return ModBlocks.trim[bank];
break;
case TrimSorting:
return RefinedRelocation.trim[bank];
if (RefinedRelocation.trim != null)
return RefinedRelocation.trim[bank];
break;
}
return null;
}
+2 -2
View File
@@ -17,7 +17,7 @@ buildscript {
apply plugin: 'forge'
version = "1.7.10-1.1.0"
version = "1.7.10-1.1.1"
group= "com.jaquadro.minecraft.storagedrawers" // http://maven.apache.org/guides/mini/guide-naming-conventions.html
archivesBaseName = "StorageDrawers-Natura"
@@ -26,7 +26,7 @@ minecraft {
assetDir = "../../runtime/assets"
replace '@VERSION@', project.version
replace 'required-after:StorageDrawers', "required-after:StorageDrawers@[1.7.5,)"
replace 'required-after:StorageDrawers', "required-after:StorageDrawers@[1.7.6,)"
}
sourceSets.main {
@@ -41,7 +41,9 @@ public class StorageDrawersPack
@Mod.EventHandler
public void postInit (FMLPostInitializationEvent event) {
IStorageDrawersApi api = StorageDrawersApi.instance();
if (api != null)
if (api != null) {
api.registerStandardPackRecipes(resolver);
api.packFactory().registerResolver(resolver);
}
}
}
@@ -0,0 +1,183 @@
itemGroup.storageDrawers=Storage Drawers
itemGroup.storageDrawersSorting=Storage Drawers - Sortieren
storageDrawers.container.drawers=Schubfächer
storageDrawers.container.compDrawers=Verdichtende Schubfächer
storageDrawers.container.upgrades=Upgrades
storageDrawers.container.controller=Schubfach-Controller
storageDrawers.container.unboundSlave=Uneingebundener Slave
storagedrawers.msg.maxUpgrades=Dieses Schubfach kann keine Upgrades mehr annehmen.
# Items
item.storagedrawers.upgradeTemplate.name=Upgradeschablone
item.storagedrawers.upgrade.iron.name=Speicherupgrade (II)
item.storagedrawers.upgrade.gold.name=Speicherupgrade (III)
item.storagedrawers.upgrade.obsidian.name=Speicherupgrade (IV)
item.storagedrawers.upgrade.diamond.name=Speicherupgrade (V)
item.storagedrawers.upgrade.emerald.name=Speicherupgrade (VI)
item.storagedrawers.upgradeStatus.level1.name=Statusupgrade (I)
item.storagedrawers.upgradeStatus.level1.description=Zeige volle Speicher
item.storagedrawers.upgradeStatus.level2.name=Statusupgrade (II)
item.storagedrawers.upgradeStatus.level2.description=Zeige Füllstand
item.storagedrawers.upgradeLock.name=Schubfachschlüssel
item.storagedrawers.upgradeLock.description=Schließt und öffnet Schubfach
item.storagedrawers.upgradeVoid.name=Void Upgrade
item.storagedrawers.upgradeVoid.description=Zerstört überschüssige Items
item.storagedrawers.upgradeCreative.store.name=Kreativspeicherupgrade
item.storagedrawers.upgradeCreative.store.description=Fast unendlicher Speicher
item.storagedrawers.upgradeCreative.vend.name=Kreativautomatenupgrade
item.storagedrawers.upgradeCreative.vend.description=Uneingeschränkte Itementnahme
item.storagedrawers.upgradeSorting.name=Sortierungsupgrade
item.storagedrawers.upgradeSorting.description=Für Refined Relocation
item.storagedrawers.shroudKey.name=Verbergungsschlüssel
item.storagedrawers.shroudKey.description=Zeige oder verstecke Itemlabels
item.storagedrawers.tape.name=Packband
item.storagedrawers.tape.description=Dichte Schubfächer ab für den Umzug
# Blocks
tile.fullDrawers1.oak.name=Eichenschubfach
tile.fullDrawers1.spruce.name=Fichtenschubfach
tile.fullDrawers1.birch.name=Birkenschubfach
tile.fullDrawers1.jungle.name=Tropenschubfach
tile.fullDrawers1.acacia.name=Akazienschubfach
tile.fullDrawers1.big_oak.name=Dunkles Eichenschubfach
tile.fullDrawers2.oak.name=Eichenschubfach 1x2
tile.fullDrawers2.spruce.name=Fichtenschubfach 1x2
tile.fullDrawers2.birch.name=Birkenschubfach 1x2
tile.fullDrawers2.jungle.name=Tropenschubfach 1x2
tile.fullDrawers2.acacia.name=Akazienschubfach 1x2
tile.fullDrawers2.big_oak.name=Dunkles Eichenschubfach 1x2
tile.fullDrawers4.oak.name=Eichenschubfach 2x2
tile.fullDrawers4.spruce.name=Fichtenschubfach 2x2
tile.fullDrawers4.birch.name=Birkenschubfach 2x2
tile.fullDrawers4.jungle.name=Tropenschubfach 2x2
tile.fullDrawers4.acacia.name=Akazienschubfach 2x2
tile.fullDrawers4.big_oak.name=Dunkles Eichenschubfach 2x2
tile.halfDrawers2.oak.name=Kompaktes Eichenschubfach 1x2
tile.halfDrawers2.spruce.name=Kompaktes Fichtenschubfach 1x2
tile.halfDrawers2.birch.name=Kompaktes Birkenschubfach 1x2
tile.halfDrawers2.jungle.name=Kompaktes Tropenschubfach 1x2
tile.halfDrawers2.acacia.name=Kompaktes Akazienschubfach 1x2
tile.halfDrawers2.big_oak.name=Kompaktes Dunkles Eichenschubfach 1x2
tile.halfDrawers4.oak.name=Kompaktes Eichenschubfach 2x2
tile.halfDrawers4.spruce.name=Kompaktes Fichtenschubfach 2x2
tile.halfDrawers4.birch.name=Kompaktes Birkenschubfach 2x2
tile.halfDrawers4.jungle.name=Kompaktes Tropenschubfach 2x2
tile.halfDrawers4.acacia.name=Kompaktes Akazienschubfach 2x2
tile.halfDrawers4.big_oak.name=Kompaktes Dunkles Eichenschubfach 2x2
tile.compDrawers.name=Verdichtendes Schubfach
tile.drawerController.name=Schubfach-Controller
tile.controllerSlave.name=Controller Slave
tile.trim.oak.name=Eichenverkleidung
tile.trim.spruce.name=Fichtenverkleidung
tile.trim.birch.name=Birkenverkleidung
tile.trim.jungle.name=Tropenverkleidung
tile.trim.acacia.name=Akazienverkleidung
tile.trim.big_oak.name=Dunkle Eichenverkleidung
storageDrawers.drawers.description=Hält %d Stapel pro Schubfach
storageDrawers.drawers.sealed=Inhalt abgedichtet
storageDrawers.upgrade.description=Erhöht den Speicher zu %d mal dem Grundwert
storageDrawers.controller.description=Interagiere mit einer Bank an verbundenen Schubfächern
storageDrawers.controllerSlave.description=Zusätzlich Anhangspunkte für Controller
# Integration
storageDrawers.waila.empty=<Leer>
storageDrawers.waila.level=Upgrade Level: %s
storageDrawers.waila.drawer=#%s: %s
storageDrawers.waila.locked=Gelockt
storageDrawers.waila.void=Void
storageDrawers.waila.sorting=Sortieren
# Configuration
storageDrawers.config.title=Storage Drawers Konfiguration
storageDrawers.config.general=Allgemeine Einstellungen
storageDrawers.config.general.tooltip=Dies und Jenes.
storageDrawers.config.blocks=Blockeinstellungen
storageDrawers.config.blocks.tooltip=Konfiguriere individuelle Speicherblocks.
storageDrawers.config.blocks.fullDrawers1=Schubfächer 1x1
storageDrawers.config.blocks.fullDrawers2=Schubfächer 1x2
storageDrawers.config.blocks.fullDrawers4=Schubfächer 2x2
storageDrawers.config.blocks.halfDrawers2=Kompakte Schubfächer 1x2
storageDrawers.config.blocks.halfDrawers4=Kompakte Schubfächer 2x2
storageDrawers.config.blocks.compDrawers=Verdichtende Schubfächer
storageDrawers.config.blocks.controller=Schubfachcontroller
storageDrawers.config.blocks.trim=Verkleidung
storageDrawers.config.blocks.controllerSlave=Controller Slave
storageDrawers.config.upgrades=Upgradeeinstellungen
storageDrawers.config.upgrades.tooltip=Konfiguriere einzelne Speicherupgrades.
storageDrawers.config.upgrades.level2Mult=Speichermultiplikator (II)
storageDrawers.config.upgrades.level3Mult=Speichermultiplikator (III)
storageDrawers.config.upgrades.level4Mult=Speichermultiplikator (IV)
storageDrawers.config.upgrades.level5Mult=Speichermultiplikator (V)
storageDrawers.config.upgrades.level6Mult=Speichermultiplikator (VI)
storageDrawers.config.prop.itemRenderType=Itemrendertyp
storageDrawers.config.prop.itemRenderType.tooltip=Rendere Items in 3D oder flach (2D).
storageDrawers.config.prop.enableIndicatorUpgrades=Erlaube Indikatorupgrades
storageDrawers.config.prop.enableStorageUpgrades=Erlaube Storageupgrades
storageDrawers.config.prop.enableLockUpgrades=Erlaube Schubfachverschließung
storageDrawers.config.prop.enableShroudUpgrades=Erlaube Verbergen
storageDrawers.config.prop.enableVoidUpgrades=Erlaube Voidupgrade
storageDrawers.config.prop.enableCreativeUpgrades=Erlaube Kreativupgrade
storageDrawers.config.prop.enableSortingUpgrades=Erlaube Sortierungsupgrade
storageDrawers.config.prop.enableSortingUpgrades.tooltip=Refined Relocation muss geladen seien.
storageDrawers.config.prop.renderStorageUpgrades=Zeige Speicherupgrades
storageDrawers.config.prop.creativeTabVanillaWoods=Kreativ-Tab Vanillaholz
storageDrawers.config.prop.creativeTabVanillaWoods.tooltip=Erlaube alle Vanillaholzarten in Kreativemenütab.
storageDrawers.config.prop.enabled=Erlaubt
storageDrawers.config.prop.enabled.tooltip=Erlaube Block im Spiel.
storageDrawers.config.prop.baseStorage=Basisspeicher
storageDrawers.config.prop.baseStorage.tooltip=Anzahl an Stapeln gehalten in einem Schubfach
storageDrawers.config.prop.recipeOutput=Rezeptausgabe
storageDrawers.config.prop.recipeOutput.tooltip=Anzahl an Items von Einzelcrafting
storageDrawers.config.prop.enableDrawerUI=Erlaube Schubfach UI
storageDrawers.config.prop.enableDrawerUI.tooltip=Zeigt Itemzahlen und erlaubt Upgrades
storageDrawers.config.prop.enableSidedInput=Erlaube seitliche Itemeingabe
storageDrawers.config.prop.enableSidedInput.tooltip=Andere Blöcke können Items in Schubfächer einfügen
storageDrawers.config.prop.enableSidedOutput=Erlaube seitliche Itemausgabe
storageDrawers.config.prop.enableSidedOutput.tooltip=Andere Blöcke können Items auf Schubfächern entnehmen
storageDrawers.config.prop.enableItemConversion=Erlaube Itemumwandlung
storageDrawers.config.prop.enableItemConversion.tooltip=Schubfächer konvertieren automatich OreDict-kompatible Items
storageDrawers.config.prop.enableFallbackRecipes=Erlaube Fallback-Rezepte
storageDrawers.config.prop.enableFallbackRecipes.tooltip=Jedes valide Brettholz kann zu Eichenschubfächern gefertigt werden
storageDrawers.config.prop.invertShift=Invertiere Shift
storageDrawers.config.prop.invertShift.tooltip=Invertiert Klick- und Shift-Klick-Verhalten
storageDrawers.config.prop.enableDebugLogging=Enable Debug Logging
storageDrawers.config.prop.enableDebugLogging.tooltip=Gibt zusätzliche Informationen in das Log
storageDrawers.config.prop.enableTape=Erlaube Packband
storageDrawers.config.prop.enableTape.tooltip=Zum Verschieben der Schubfächer mit Iteminhalten
storageDrawers.config.prop.wailaStackRemainder=WAILA Anzahl-Darstellung
storageDrawers.config.prop.wailaStackRemainder.tooltip=Bestimme wie Anzahlen in WAILA dargestellt werden
storageDrawers.config.prop.controllerRange=Controllerreichweite
storageDrawers.config.prop.controllerRange.tooltip=Reichweite zur Erkennung von Netzwerkblöcken
storageDrawers.config.addons=Addons
storageDrawers.config.addons.tooltip=Konfiguriere globale Addons-Einstellungen
storageDrawers.config.addons.showNEI=Zeige Blöcke in NEI
storageDrawers.config.addons.showCreative=Zeige Blöcke in Kreativtabs
storageDrawers.config.addons.separateTabs=Separate Kreativtabs
storageDrawers.config.addons.tooltip=Jedes Pack benutzt seinen eigenen Kreativtab.
storageDrawers.config.integration=Integration
storageDrawers.config.integration.tooltip=Konfiguriere Integration mit anderen Mods
storageDrawers.config.integration.enableAE2=Erlaube Applied Energistics 2 Integration
storageDrawers.config.integration.enableWaila=Erlaube WAILA Integration
storageDrawers.config.integration.enableThaumcraft=Erlaube Thaumcraft Integration
storageDrawers.config.integration.enableMineTweaker=Erlaube MineTweaker Integration
storageDrawers.config.integration.enableRefinedRelocation=Erlaube Refined Relocation Integration
storageDrawers.config.integration.enableThermalExpansion=Elaube Thermal Expansion Integration
@@ -32,6 +32,10 @@ item.storagedrawers.upgradeSorting.name=Sorting Upgrade
item.storagedrawers.upgradeSorting.description=For Refined Relocation
item.storagedrawers.shroudKey.name=Concealment Key
item.storagedrawers.shroudKey.description=Show or hide item labels
item.storagedrawers.personalKey.default.name=Personal Key
item.storagedrawers.personalKey.default.description=Protect access from other players
item.storagedrawers.personalKey.cofh.name=Personal Key (CoFH)
item.storagedrawers.personalKey.cofh.description=Protect access from other players
item.storagedrawers.tape.name=Packing Tape
item.storagedrawers.tape.description=Seals drawers for moving
@@ -92,9 +96,12 @@ storageDrawers.controllerSlave.description=Extra attach points for controllers
storageDrawers.waila.empty=<Empty>
storageDrawers.waila.level=Upgrade Level: %s
storageDrawers.waila.drawer=#%s: %s
storageDrawers.waila.limit=Stack Limit: %s (x%s)
storageDrawers.waila.nolimit=Stack Limit: ∞
storageDrawers.waila.locked=Locked
storageDrawers.waila.void=Void
storageDrawers.waila.sorting=Sorting
storageDrawers.waila.protected=Protected
# Configuration
storageDrawers.config.title=Storage Drawers Configuration
@@ -130,6 +137,7 @@ storageDrawers.config.prop.enableIndicatorUpgrades=Enable Indicator Upgrades
storageDrawers.config.prop.enableStorageUpgrades=Enable Storage Upgrades
storageDrawers.config.prop.enableLockUpgrades=Enable Drawer Locking
storageDrawers.config.prop.enableShroudUpgrades=Enable Item Concealing
storageDrawers.config.prop.enablePersonalUpgrades=Enable Access Protection
storageDrawers.config.prop.enableVoidUpgrades=Enable Void Upgrade
storageDrawers.config.prop.enableCreativeUpgrades=Enable Creative Upgrade
storageDrawers.config.prop.enableSortingUpgrades=Enable Sorting Upgrade
@@ -181,3 +189,4 @@ storageDrawers.config.integration.enableThaumcraft=Enable Thaumcraft Integration
storageDrawers.config.integration.enableMineTweaker=Enable MineTweaker Integration
storageDrawers.config.integration.enableRefinedRelocation=Enable Refined Relocation Integration
storageDrawers.config.integration.enableThermalExpansion=Enable Thermal Expansion Integration
storageDrawers.config.integration.enableThermalFoundation=Enable Thermal Foundation Integration
@@ -35,7 +35,7 @@ item.storagedrawers.shroudKey.description=隱藏或顯示抽屜上的物品圖
item.storagedrawers.tape.name=打包帶
item.storagedrawers.tape.description=捆紮封裝抽屜以便攜帶。
# Block
# Blocks
tile.fullDrawers1.oak.name=橡木抽屜
tile.fullDrawers1.spruce.name=雲杉木抽屜
tile.fullDrawers1.birch.name=白樺木抽屜
@@ -88,15 +88,17 @@ storageDrawers.upgrade.description=將抽屜容量升級為其基礎容量的%d
storageDrawers.controller.description=將放入的物品分配存入鄰接的抽屜中。
storageDrawers.controllerSlave.description=為抽屜管理器擴展存儲連接面。
# Integration/WAILA
# Integration
storageDrawers.waila.empty=<空>
storageDrawers.waila.level=級別:%s
storageDrawers.waila.drawer=#%s:%s
storageDrawers.waila.limit=堆疊上限: %s (x%s)
storageDrawers.waila.nolimit=堆疊上限: ∞
storageDrawers.waila.locked=鎖定
storageDrawers.waila.void=清空
storageDrawers.waila.sorting=分揀
# Configruation
# Configuration
storageDrawers.config.title=儲物抽屜-模組選項
storageDrawers.config.general=一般設定
@@ -180,3 +182,4 @@ storageDrawers.config.integration.enableWaila=允許關聯WAILA顯示
storageDrawers.config.integration.enableThaumcraft=允許關聯秘術時代
storageDrawers.config.integration.enableMineTweaker=允許關聯MineTweaker
storageDrawers.config.integration.enableRefinedRelocation=允許關聯精準重定位
storageDrawers.config.integration.enableThermalExpansion=允許關聯精煉機械
Binary file not shown.

After

Width:  |  Height:  |  Size: 235 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 251 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 364 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 357 B

@@ -1,11 +1,14 @@
package com.jaquadro.minecraft.storagedrawers;
import com.jaquadro.minecraft.storagedrawers.api.StorageDrawersApi;
import com.jaquadro.minecraft.storagedrawers.config.*;
import com.jaquadro.minecraft.storagedrawers.core.*;
import com.jaquadro.minecraft.storagedrawers.core.api.BlockRegistry;
import com.jaquadro.minecraft.storagedrawers.core.handlers.GuiHandler;
import com.jaquadro.minecraft.storagedrawers.integration.IntegrationRegistry;
import com.jaquadro.minecraft.storagedrawers.network.BlockClickMessage;
import com.jaquadro.minecraft.storagedrawers.network.CountUpdateMessage;
import com.jaquadro.minecraft.storagedrawers.security.SecurityRegistry;
import cpw.mods.fml.client.event.ConfigChangedEvent;
import cpw.mods.fml.common.FMLCommonHandler;
import cpw.mods.fml.common.Mod;
@@ -43,6 +46,8 @@ public class StorageDrawers
public static RecipeHandlerRegistry recipeHandlerRegistry;
public static RenderRegistry renderRegistry;
public static WailaRegistry wailaRegistry;
public static BlockRegistry blockRegistry;
public static SecurityRegistry securityRegistry;
@Mod.Instance(MOD_ID)
public static StorageDrawers instance;
@@ -69,6 +74,8 @@ public class StorageDrawers
recipeHandlerRegistry = new RecipeHandlerRegistry();
renderRegistry = new RenderRegistry();
wailaRegistry = new WailaRegistry();
blockRegistry = new BlockRegistry();
securityRegistry = new SecurityRegistry();
blocks.init();
items.init();
@@ -90,6 +97,8 @@ public class StorageDrawers
recipes.init();
IntegrationRegistry.instance().postInit();
StorageDrawersApi.instance().packFactory().registerResolver(ModBlocks.resolver);
}
@SubscribeEvent
@@ -21,4 +21,9 @@ public interface IPackBlockFactory
* Hides block from NEI if NEI is active.
*/
void hideBlock (String blockID);
/**
* Registers block metadata from an initialized DataResolver with Storage Drawers.
*/
void registerResolver (IExtendedDataResolver resolver);
}
@@ -0,0 +1,13 @@
package com.jaquadro.minecraft.storagedrawers.api.security;
import com.jaquadro.minecraft.storagedrawers.api.storage.attribute.IProtectable;
import com.mojang.authlib.GameProfile;
public interface ISecurityProvider
{
String getProviderID ();
boolean hasOwnership (GameProfile profile, IProtectable target);
boolean hasAccess (GameProfile profile, IProtectable target);
}
@@ -0,0 +1,18 @@
package com.jaquadro.minecraft.storagedrawers.api.storage;
import net.minecraft.item.ItemStack;
public interface ISmartGroup
{
/**
* Gets a lazy enumeration of all slots that will accept at least one item of the given stack, ordered by
* insertion preference.
*/
Iterable<Integer> enumerateDrawersForInsertion (ItemStack stack, boolean strict);
/**
* Gets a lazy enumeration of all slots that will provide at least one item of the given stack, ordered by
* extraction preference.
*/
Iterable<Integer> enumerateDrawersForExtraction (ItemStack stack, boolean strict);
}
@@ -0,0 +1,31 @@
package com.jaquadro.minecraft.storagedrawers.api.storage.attribute;
import com.jaquadro.minecraft.storagedrawers.api.security.ISecurityProvider;
import java.util.UUID;
public interface IProtectable
{
/**
* Gets the owner of the drawer, or null if there is no owner.
*/
UUID getOwner ();
/**
* Sets the owner of the drawer. Set to null to set no owner.
* @return false if the operation is not supported, true otherwise.
*/
boolean setOwner (UUID owner);
/**
* Gets the provider managing security for the target.
* @return null to use the default provider, which enforces strict owner access.
*/
ISecurityProvider getSecurityProvider ();
/**
* Sets the provider managing security for the target. Set to null for default provider.
* @return false if the operation is not supported, true otherwise.
*/
boolean setSecurityProvider (ISecurityProvider provder);
}
@@ -1,6 +1,7 @@
package com.jaquadro.minecraft.storagedrawers.block;
import com.jaquadro.minecraft.storagedrawers.StorageDrawers;
import com.jaquadro.minecraft.storagedrawers.api.pack.BlockType;
import com.jaquadro.minecraft.storagedrawers.api.storage.IDrawer;
import com.jaquadro.minecraft.storagedrawers.api.storage.INetworked;
import com.jaquadro.minecraft.storagedrawers.block.tile.TileEntityDrawers;
@@ -52,6 +53,11 @@ public class BlockCompDrawers extends BlockDrawers implements INetworked
return 2;
}
@Override
public BlockType retrimType () {
return null;
}
@Override
public TileEntityDrawers createNewTileEntity (World world, int meta) {
return new TileEntityDrawersComp();
@@ -1,11 +1,13 @@
package com.jaquadro.minecraft.storagedrawers.block;
import com.jaquadro.minecraft.storagedrawers.StorageDrawers;
import com.jaquadro.minecraft.storagedrawers.api.security.ISecurityProvider;
import com.jaquadro.minecraft.storagedrawers.api.storage.INetworked;
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.item.ItemPersonalKey;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.block.Block;
@@ -121,12 +123,22 @@ public class BlockController extends BlockContainer implements INetworked
if (item != null && item.getItem() != null) {
if (item.getItem() == ModItems.shroudKey) {
if (!world.isRemote)
te.toggleShroud();
te.toggleShroud(player.getGameProfile());
return true;
}
else if (item.getItem() == ModItems.upgradeLock) {
if (!world.isRemote)
te.toggleLock(EnumSet.allOf(LockAttribute.class), LockAttribute.LOCK_POPULATED);
te.toggleLock(EnumSet.allOf(LockAttribute.class), LockAttribute.LOCK_POPULATED, player.getGameProfile());
return true;
}
else if (item.getItem() == ModItems.personalKey) {
if (!world.isRemote) {
String securityKey = ((ItemPersonalKey) item.getItem()).getSecurityProviderKey(item.getItemDamage());
ISecurityProvider provider = StorageDrawers.securityRegistry.getProvider(securityKey);
te.toggleProtection(player.getGameProfile(), provider);
}
return true;
}
}
@@ -3,6 +3,9 @@ package com.jaquadro.minecraft.storagedrawers.block;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.jaquadro.minecraft.storagedrawers.StorageDrawers;
import com.jaquadro.minecraft.storagedrawers.api.pack.BlockConfiguration;
import com.jaquadro.minecraft.storagedrawers.api.pack.BlockType;
import com.jaquadro.minecraft.storagedrawers.api.security.ISecurityProvider;
import com.jaquadro.minecraft.storagedrawers.api.storage.IDrawer;
import com.jaquadro.minecraft.storagedrawers.api.storage.INetworked;
import com.jaquadro.minecraft.storagedrawers.api.storage.attribute.LockAttribute;
@@ -11,8 +14,11 @@ 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.item.ItemPersonalKey;
import com.jaquadro.minecraft.storagedrawers.item.ItemTrim;
import com.jaquadro.minecraft.storagedrawers.network.BlockClickMessage;
import com.jaquadro.minecraft.storagedrawers.security.SecurityManager;
import cpw.mods.fml.common.FMLLog;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
@@ -96,6 +102,10 @@ public class BlockDrawers extends BlockContainer implements IExtendedBlockClickH
@SideOnly(Side.CLIENT)
private IIcon iconLock;
@SideOnly(Side.CLIENT)
private IIcon iconClaim;
@SideOnly(Side.CLIENT)
private IIcon iconClaimLock;
@SideOnly(Side.CLIENT)
private IIcon iconVoid;
@SideOnly(Side.CLIENT)
@@ -122,6 +132,54 @@ public class BlockDrawers extends BlockContainer implements IExtendedBlockClickH
setLightOpacity(255);
}
public boolean retrimBlock (World world, int x, int y, int z, ItemStack prototype) {
if (retrimType() == null)
return false;
Block protoBlock = Block.getBlockFromItem(prototype.getItem());
int protoMeta = prototype.getItemDamage();
BlockConfiguration config = BlockConfiguration.by(retrimType(), drawerCount, halfDepth);
Block plankBlock = StorageDrawers.blockRegistry.getPlankBlock(BlockConfiguration.Trim, protoBlock, protoMeta);
int plankMeta = StorageDrawers.blockRegistry.getPlankMeta(BlockConfiguration.Trim, protoBlock, protoMeta);
Block newBlock = StorageDrawers.blockRegistry.getBlock(config, plankBlock, plankMeta);
int newMeta = StorageDrawers.blockRegistry.getMeta(config, plankBlock, plankMeta);
if (newBlock == null)
return false;
TileEntityDrawers tile = getTileEntity(world, x, y, z);
if (newBlock == this && newMeta == world.getBlockMetadata(x, y, z) && !tile.shouldHideUpgrades()) {
tile.setShouldHideUpgrades(true);
return true;
}
if (newBlock == this)
world.setBlockMetadataWithNotify(x, y, z, newMeta, 3);
else {
TileEntity newDrawer = createNewTileEntity(world, newMeta);
NBTTagCompound tag = new NBTTagCompound();
tile.writeToNBT(tag);
newDrawer.readFromNBT(tag);
world.removeTileEntity(x, y, z);
world.setBlockToAir(x, y, z);
world.setBlock(x, y, z, newBlock, newMeta, 3);
world.setTileEntity(x, y, z, newDrawer);
}
return true;
}
public BlockType retrimType () {
return BlockType.Drawers;
}
public float getTrimWidth () {
return trimWidth;
}
@@ -246,13 +304,27 @@ public class BlockDrawers extends BlockContainer implements IExtendedBlockClickH
TileEntityDrawers tileDrawers = getTileEntitySafe(world, x, y, z);
ItemStack item = player.inventory.getCurrentItem();
if (!SecurityManager.hasAccess(player.getGameProfile(), tileDrawers))
return false;
if (StorageDrawers.config.cache.debugTrace) {
FMLLog.log(StorageDrawers.MOD_ID, Level.INFO, "BlockDrawers.onBlockActivated");
FMLLog.log(StorageDrawers.MOD_ID, Level.INFO, (item == null) ? " null item" : " " + item.toString());
}
if (item != null && item.getItem() != null) {
if (item.getItem() == ModItems.upgrade || item.getItem() == ModItems.upgradeStatus || item.getItem() == ModItems.upgradeVoid || item.getItem() == ModItems.upgradeCreative) {
if (item.getItem() instanceof ItemTrim && player.isSneaking()) {
if (!retrimBlock(world, x, y, z, item))
return false;
if (player != null && !player.capabilities.isCreativeMode) {
if (--item.stackSize <= 0)
player.inventory.setInventorySlotContents(player.inventory.currentItem, null);
}
return true;
}
else if (item.getItem() == ModItems.upgrade || item.getItem() == ModItems.upgradeStatus || item.getItem() == ModItems.upgradeVoid || item.getItem() == ModItems.upgradeCreative) {
if (!tileDrawers.addUpgrade(item)) {
player.addChatMessage(new ChatComponentTranslation("storagedrawers.msg.maxUpgrades"));
return false;
@@ -278,6 +350,22 @@ public class BlockDrawers extends BlockContainer implements IExtendedBlockClickH
tileDrawers.setIsShrouded(!tileDrawers.isShrouded());
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;
}
@@ -371,6 +459,9 @@ public class BlockDrawers extends BlockContainer implements IExtendedBlockClickH
if (tileDrawers.isSealed())
return;
if (!SecurityManager.hasAccess(player.getGameProfile(), tileDrawers))
return;
int slot = getDrawerSlot(side, hitX, hitY, hitZ);
IDrawer drawer = tileDrawers.getDrawer(slot);
@@ -465,17 +556,19 @@ public class BlockDrawers extends BlockContainer implements IExtendedBlockClickH
dropBlockAsItem(world, x, y, z, stack);
}
for (int i = 0; i < tile.getDrawerCount(); i++) {
if (!tile.isDrawerEnabled(i))
continue;
if (!tile.isVending()) {
for (int i = 0; i < tile.getDrawerCount(); i++) {
if (!tile.isDrawerEnabled(i))
continue;
IDrawer drawer = tile.getDrawer(i);
while (drawer.getStoredItemCount() > 0) {
ItemStack stack = tile.takeItemsFromSlot(i, drawer.getStoredItemStackSize());
if (stack == null || stack.stackSize == 0)
break;
IDrawer drawer = tile.getDrawer(i);
while (drawer.getStoredItemCount() > 0) {
ItemStack stack = tile.takeItemsFromSlot(i, drawer.getStoredItemStackSize());
if (stack == null || stack.stackSize == 0)
break;
dropStackInBatches(world, x, y, z, stack);
dropStackInBatches(world, x, y, z, stack);
}
}
}
@@ -727,8 +820,15 @@ public class BlockDrawers extends BlockContainer implements IExtendedBlockClickH
}
@SideOnly(Side.CLIENT)
public IIcon getLockIcon () {
return iconLock;
public IIcon getLockIcon (boolean locked, boolean claimed) {
if (locked && claimed)
return iconClaimLock;
else if (locked)
return iconLock;
else if (claimed)
return iconClaim;
else
return null;
}
@SideOnly(Side.CLIENT)
@@ -790,6 +890,8 @@ public class BlockDrawers extends BlockContainer implements IExtendedBlockClickH
iconIndicator4[1] = register.registerIcon(StorageDrawers.MOD_ID + ":indicator/indicator_4_on");
iconLock = register.registerIcon(StorageDrawers.MOD_ID + ":indicator/lock_icon");
iconClaim = register.registerIcon(StorageDrawers.MOD_ID + ":indicator/claim_icon");
iconClaimLock = register.registerIcon(StorageDrawers.MOD_ID + ":indicator/claim_lock_icon");
iconVoid = register.registerIcon(StorageDrawers.MOD_ID + ":indicator/void_icon");
loadBlockConfig();
@@ -0,0 +1,67 @@
package com.jaquadro.minecraft.storagedrawers.block;
import com.jaquadro.minecraft.storagedrawers.api.pack.BlockConfiguration;
import com.jaquadro.minecraft.storagedrawers.api.pack.BlockType;
import com.jaquadro.minecraft.storagedrawers.api.pack.ExtendedDataResolver;
import com.jaquadro.minecraft.storagedrawers.core.ModBlocks;
import com.jaquadro.minecraft.storagedrawers.core.ModCreativeTabs;
import com.jaquadro.minecraft.storagedrawers.integration.RefinedRelocation;
import net.minecraft.block.Block;
import net.minecraft.block.BlockWood;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.init.Blocks;
public class DataResolver extends ExtendedDataResolver
{
private static String[] textureNames = BlockWood.field_150096_a;
public DataResolver (String modID) {
super(modID, textureNames);
}
@Override
public CreativeTabs getCreativeTabs (BlockType type) {
return ModCreativeTabs.tabStorageDrawers;
}
@Override
public Block getBlock (BlockConfiguration blockConfig) {
switch (blockConfig.getBlockType()) {
case Drawers:
if (blockConfig.getDrawerCount() == 1)
return ModBlocks.fullDrawers1;
if (blockConfig.getDrawerCount() == 2 && !blockConfig.isHalfDepth())
return ModBlocks.fullDrawers2;
if (blockConfig.getDrawerCount() == 4 && !blockConfig.isHalfDepth())
return ModBlocks.fullDrawers4;
if (blockConfig.getDrawerCount() == 2 && blockConfig.isHalfDepth())
return ModBlocks.halfDrawers2;
if (blockConfig.getDrawerCount() == 4 && blockConfig.isHalfDepth())
return ModBlocks.halfDrawers4;
break;
case DrawersSorting:
if (blockConfig.getDrawerCount() == 1)
return RefinedRelocation.fullDrawers1;
if (blockConfig.getDrawerCount() == 2 && !blockConfig.isHalfDepth())
return RefinedRelocation.fullDrawers2;
if (blockConfig.getDrawerCount() == 4 && !blockConfig.isHalfDepth())
return RefinedRelocation.fullDrawers4;
if (blockConfig.getDrawerCount() == 2 && blockConfig.isHalfDepth())
return RefinedRelocation.halfDrawers2;
if (blockConfig.getDrawerCount() == 4 && blockConfig.isHalfDepth())
return RefinedRelocation.halfDrawers4;
break;
case Trim:
return ModBlocks.trim;
case TrimSorting:
return RefinedRelocation.trim;
}
return null;
}
@Override
public void init () {
for (int i = 0, p = 0, m = 0; i < 6; i++, p++, m++)
setPlankSlab(i, Blocks.planks, p, Blocks.wooden_slab, m);
}
}
@@ -2,15 +2,19 @@ package com.jaquadro.minecraft.storagedrawers.block.tile;
import com.jaquadro.minecraft.storagedrawers.StorageDrawers;
import com.jaquadro.minecraft.storagedrawers.api.inventory.IDrawerInventory;
import com.jaquadro.minecraft.storagedrawers.api.security.ISecurityProvider;
import com.jaquadro.minecraft.storagedrawers.api.storage.*;
import com.jaquadro.minecraft.storagedrawers.api.storage.attribute.ILockable;
import com.jaquadro.minecraft.storagedrawers.api.storage.attribute.IShroudable;
import com.jaquadro.minecraft.storagedrawers.api.storage.attribute.IVoidable;
import com.jaquadro.minecraft.storagedrawers.api.storage.attribute.LockAttribute;
import com.jaquadro.minecraft.storagedrawers.api.storage.attribute.*;
import com.jaquadro.minecraft.storagedrawers.block.BlockSlave;
import com.jaquadro.minecraft.storagedrawers.security.SecurityManager;
import com.jaquadro.minecraft.storagedrawers.util.ItemMetaListRegistry;
import com.jaquadro.minecraft.storagedrawers.util.ItemMetaRegistry;
import com.jaquadro.minecraft.storagedrawers.util.UniqueMetaIdentifier;
import com.mojang.authlib.GameProfile;
import net.minecraft.block.Block;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.ISidedInventory;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.network.NetworkManager;
@@ -22,13 +26,14 @@ import net.minecraftforge.common.util.ForgeDirection;
import java.util.*;
public class TileEntityController extends TileEntity implements IDrawerGroup, IPriorityGroup, ISidedInventory
public class TileEntityController extends TileEntity implements IDrawerGroup, IPriorityGroup, ISmartGroup, ISidedInventory
{
private static final int PRI_VOID = 0;
private static final int PRI_LOCKED = 1;
private static final int PRI_NORMAL = 2;
private static final int PRI_EMPTY = 3;
private static final int PRI_DISABLED = 4;
private static final int PRI_LOCKED_EMPTY = 4;
private static final int PRI_DISABLED = 5;
private static final int DEPTH_LIMIT = 12;
private static final int[] emptySlots = new int[0];
@@ -85,7 +90,12 @@ public class TileEntityController extends TileEntity implements IDrawerGroup, IP
IDrawer drawer = group.getDrawer(drawerSlot);
if (drawer.isEmpty()) {
return PRI_EMPTY;
if ((drawer instanceof ILockable && ((ILockable) drawer).isLocked(LockAttribute.LOCK_EMPTY)) ||
(group instanceof ILockable && ((ILockable) group).isLocked(LockAttribute.LOCK_EMPTY))) {
return PRI_LOCKED_EMPTY;
}
else
return PRI_EMPTY;
}
if ((drawer instanceof IVoidable && ((IVoidable) drawer).isVoid()) ||
@@ -108,6 +118,9 @@ public class TileEntityController extends TileEntity implements IDrawerGroup, IP
private List<SlotRecord> invSlotList = new ArrayList<SlotRecord>();
private List<SlotRecord> drawerSlotList = new ArrayList<SlotRecord>();
private ItemMetaListRegistry<SlotRecord> invPrimaryLookup = new ItemMetaListRegistry<SlotRecord>();
private ItemMetaListRegistry<SlotRecord> drawerPrimaryLookup = new ItemMetaListRegistry<SlotRecord>();
private int[] inventorySlots = new int[0];
private int[] drawerSlots = new int[0];
private int[] autoSides = new int[] { 0, 1, 2, 3, 4, 5 };
@@ -142,27 +155,26 @@ public class TileEntityController extends TileEntity implements IDrawerGroup, IP
boolean dumpInventory = worldObj.getTotalWorldTime() - lastClickTime < 10 && player.getPersistentID().equals(lastClickUUID);
int count = 0;
for (int i = 0, n = drawerSlots.length; i < n; i++) {
int slotIndex = drawerSlots[i];
if (!dumpInventory) {
ItemStack currentStack = player.inventory.getCurrentItem();
if (currentStack != null) {
count = insertItems(currentStack, player.getGameProfile());
if (currentStack.stackSize == 0)
player.inventory.setInventorySlotContents(player.inventory.currentItem, null);
}
}
else {
for (int i = 0, n = player.inventory.getSizeInventory(); i < n; i++) {
ItemStack subStack = player.inventory.getStackInSlot(i);
if (subStack != null) {
count += insertItems(subStack, player.getGameProfile());
if (subStack.stackSize == 0)
player.inventory.setInventorySlotContents(i, null);
}
}
IDrawerGroup group = getGroupForDrawerSlot(slotIndex);
if (group == null || !(group instanceof IDrawerGroupInteractive))
continue;
IDrawerGroupInteractive intGroup = (IDrawerGroupInteractive)group;
int slot = getLocalDrawerSlot(slotIndex);
if (!group.isDrawerEnabled(slot))
continue;
IDrawer drawer = group.getDrawer(slot);
if (drawer == null || drawer.isEmpty())
continue;
if (dumpInventory)
count += intGroup.interactPutCurrentInventoryIntoSlot(slot, player);
else
count += intGroup.interactPutCurrentItemIntoSlot(slot, player);
if (count > 0)
StorageDrawers.proxy.updatePlayerInventory(player);
}
lastClickTime = worldObj.getTotalWorldTime();
@@ -171,7 +183,87 @@ public class TileEntityController extends TileEntity implements IDrawerGroup, IP
return count;
}
public void toggleShroud () {
private int insertItems (ItemStack stack, GameProfile profile) {
int itemsLeft = stack.stackSize;
for (int slot : enumerateDrawersForInsertion(stack, false)) {
IDrawerGroup group = getGroupForDrawerSlot(slot);
if (group instanceof IProtectable) {
if (!SecurityManager.hasAccess(profile, (IProtectable)group))
continue;
}
IDrawer drawer = getDrawer(slot);
ItemStack itemProto = drawer.getStoredItemPrototype();
if (itemProto == null)
break;
itemsLeft = insertItemsIntoDrawer(drawer, itemsLeft);
if (drawer instanceof IVoidable && ((IVoidable) drawer).isVoid())
itemsLeft = 0;
if (itemsLeft == 0)
break;
}
int count = stack.stackSize - itemsLeft;
stack.stackSize = itemsLeft;
return count;
}
private int insertItemsIntoDrawer (IDrawer drawer, int itemCount) {
int capacity = drawer.getMaxCapacity();
int storedItems = drawer.getStoredItemCount();
int storableItems = capacity - storedItems;
if (drawer instanceof IFractionalDrawer) {
IFractionalDrawer fracDrawer = (IFractionalDrawer)drawer;
if (!fracDrawer.isSmallestUnit() && fracDrawer.getStoredItemRemainder() > 0)
storableItems--;
}
if (storableItems == 0)
return itemCount;
int remainder = Math.max(itemCount - storableItems, 0);
storedItems += Math.min(itemCount, storableItems);
drawer.setStoredItemCount(storedItems);
return remainder;
}
public void toggleProtection (GameProfile profile, ISecurityProvider provider) {
IProtectable template = null;
UUID state = null;
for (StorageRecord record : storage.values()) {
if (record.storage == null)
continue;
if (record.storage instanceof IProtectable) {
IProtectable protectable = (IProtectable)record.storage;
if (!SecurityManager.hasOwnership(profile, protectable))
continue;
if (template == null) {
template = protectable;
if (template.getOwner() == null)
state = profile.getId();
else {
state = null;
provider = null;
}
}
protectable.setOwner(state);
protectable.setSecurityProvider(provider);
}
}
}
public void toggleShroud (GameProfile profile) {
IShroudable template = null;
boolean state = false;
@@ -179,6 +271,11 @@ public class TileEntityController extends TileEntity implements IDrawerGroup, IP
if (record.storage == null)
continue;
if (record.storage instanceof IProtectable) {
if (!SecurityManager.hasAccess(profile, (IProtectable)record.storage))
continue;
}
for (int i = 0, n = record.storage.getDrawerCount(); i < n; i++) {
if (!record.storage.isDrawerEnabled(i))
continue;
@@ -198,7 +295,7 @@ public class TileEntityController extends TileEntity implements IDrawerGroup, IP
}
}
public void toggleLock (EnumSet<LockAttribute> attributes, LockAttribute key) {
public void toggleLock (EnumSet<LockAttribute> attributes, LockAttribute key, GameProfile profile) {
ILockable template = null;
boolean state = false;
@@ -206,6 +303,11 @@ public class TileEntityController extends TileEntity implements IDrawerGroup, IP
if (record.storage == null)
continue;
if (record.storage instanceof IProtectable) {
if (!SecurityManager.hasAccess(profile, (IProtectable)record.storage))
continue;
}
if (record.storage instanceof ILockable) {
ILockable lockableStorage = (ILockable)record.storage;
if (template == null) {
@@ -261,9 +363,12 @@ public class TileEntityController extends TileEntity implements IDrawerGroup, IP
populateNodes(xCoord, yCoord, zCoord);
flattenLists();
inventorySlots = sortSlotRecords(invSlotList, true); //sortInventorySlots();
inventorySlots = sortSlotRecords(invSlotList, true);
drawerSlots = sortSlotRecords(drawerSlotList, false);
rebuildPrimaryLookup(invPrimaryLookup, invSlotList, true);
rebuildPrimaryLookup(drawerPrimaryLookup, drawerSlotList, false);
if (preCount != inventorySlots.length && (preCount == 0 || inventorySlots.length == 0)) {
if (!worldObj.isRemote)
markDirty();
@@ -293,6 +398,27 @@ public class TileEntityController extends TileEntity implements IDrawerGroup, IP
return slotMap;
}
private void rebuildPrimaryLookup (ItemMetaListRegistry<SlotRecord> lookup, List<SlotRecord> records, boolean invBased) {
lookup.clear();
for (SlotRecord record : records) {
IDrawerGroup group = getGroupForCoord(record.coord);
if (group == null)
continue;
int drawerSlot = (invBased) ? group.getDrawerInventory().getDrawerSlot(record.slot) : record.slot;
if (!group.isDrawerEnabled(drawerSlot))
continue;
IDrawer drawer = group.getDrawer(drawerSlot);
if (drawer.isEmpty())
continue;
ItemStack item = drawer.getStoredItemPrototype();
lookup.register(item.getItem(), item.getItemDamage(), record);
}
}
private boolean containsNullEntries (List<SlotRecord> list) {
int nullCount = 0;
for (int i = 0, n = list.size(); i < n; i++) {
@@ -638,6 +764,20 @@ public class TileEntityController extends TileEntity implements IDrawerGroup, IP
if (inventory == null)
return false;
if (slot >= invSlotList.size())
return false;
SlotRecord record = invSlotList.get(slot);
List<SlotRecord> primaryRecords = invPrimaryLookup.getEntries(stack.getItem(), stack.getItemDamage());
if (primaryRecords != null && !primaryRecords.contains(record)) {
for (SlotRecord candidate : primaryRecords) {
IDrawerGroup candidateGroup = getGroupForCoord(candidate.coord);
IDrawerInventory candidateInventory = candidateGroup.getDrawerInventory();
if (candidateInventory.canInsertItem(candidate.slot, stack))
return false;
}
}
return inventory.canInsertItem(getLocalInvSlot(slot), stack);
}
@@ -728,6 +868,127 @@ public class TileEntityController extends TileEntity implements IDrawerGroup, IP
if (inventory == null)
return false;
if (slot >= invSlotList.size())
return false;
SlotRecord record = invSlotList.get(slot);
List<SlotRecord> primaryRecords = invPrimaryLookup.getEntries(stack.getItem(), stack.getItemDamage());
if (primaryRecords != null && !primaryRecords.contains(record)) {
for (SlotRecord candidate : primaryRecords) {
IDrawerGroup candidateGroup = getGroupForCoord(candidate.coord);
IDrawerInventory candidateInventory = candidateGroup.getDrawerInventory();
if (candidateInventory.isItemValidForSlot(candidate.slot, stack))
return false;
}
}
return inventory.isItemValidForSlot(getLocalInvSlot(slot), stack);
}
private class DrawerStackIterator implements Iterable<Integer>
{
private ItemStack stack;
private boolean strict;
private boolean insert;
public DrawerStackIterator (ItemStack stack, boolean strict, boolean insert) {
this.stack = stack;
this.strict = strict;
this.insert = insert;
}
@Override
public Iterator<Integer> iterator () {
return new Iterator<Integer> ()
{
List<SlotRecord> primaryRecords = drawerPrimaryLookup.getEntries(stack.getItem(), stack.getItemDamage());
Iterator<SlotRecord> iter1;
int index2;
Integer nextSlot = null;
@Override
public boolean hasNext () {
if (nextSlot == null)
advance();
return nextSlot != null;
}
@Override
public Integer next () {
if (nextSlot == null)
advance();
Integer slot = nextSlot;
nextSlot = null;
return slot;
}
private void advance () {
if (iter1 == null && primaryRecords != null && primaryRecords.size() > 0)
iter1 = primaryRecords.iterator();
if (iter1 != null) {
while (iter1.hasNext()) {
SlotRecord candidate = iter1.next();
IDrawerGroup candidateGroup = getGroupForCoord(candidate.coord);
IDrawer drawer = candidateGroup.getDrawer(candidate.slot);
if (insert) {
if (!(drawer.canItemBeStored(stack) && (drawer.isEmpty() || drawer.getRemainingCapacity() > 0)))
continue;
}
else {
if (!(drawer.canItemBeExtracted(stack) && drawer.getStoredItemCount() > 0))
continue;
}
int slot = drawerSlotList.indexOf(candidate);
if (slot > -1) {
nextSlot = slot;
return;
}
}
}
for (; index2 < drawerSlots.length; index2++) {
int slot = drawerSlots[index2];
if (!isDrawerEnabled(slot))
continue;
IDrawer drawer = getDrawer(slot);
if (strict) {
ItemStack proto = drawer.getStoredItemPrototype();
if (proto != null && !proto.isItemEqual(stack))
continue;
}
if (insert) {
if (!(drawer.canItemBeStored(stack) && (drawer.isEmpty() || drawer.getRemainingCapacity() > 0)))
continue;
}
else {
if (!(drawer.canItemBeExtracted(stack) && drawer.getStoredItemCount() > 0))
continue;
}
SlotRecord record = drawerSlotList.get(slot);
if (primaryRecords != null && primaryRecords.contains(record))
continue;
nextSlot = slot;
index2++;
return;
}
}
};
}
};
public Iterable<Integer> enumerateDrawersForInsertion (ItemStack stack, boolean strict) {
return new DrawerStackIterator(stack, strict, true);
}
public Iterable<Integer> enumerateDrawersForExtraction (ItemStack stack, boolean strict) {
return new DrawerStackIterator(stack, strict, false);
}
}
@@ -2,9 +2,11 @@ package com.jaquadro.minecraft.storagedrawers.block.tile;
import com.jaquadro.minecraft.storagedrawers.StorageDrawers;
import com.jaquadro.minecraft.storagedrawers.api.inventory.IDrawerInventory;
import com.jaquadro.minecraft.storagedrawers.api.security.ISecurityProvider;
import com.jaquadro.minecraft.storagedrawers.api.storage.IDrawer;
import com.jaquadro.minecraft.storagedrawers.api.storage.IDrawerGroupInteractive;
import com.jaquadro.minecraft.storagedrawers.api.storage.attribute.ILockable;
import com.jaquadro.minecraft.storagedrawers.api.storage.attribute.IProtectable;
import com.jaquadro.minecraft.storagedrawers.api.storage.attribute.ISealable;
import com.jaquadro.minecraft.storagedrawers.api.storage.attribute.LockAttribute;
import com.jaquadro.minecraft.storagedrawers.config.ConfigManager;
@@ -35,7 +37,7 @@ import java.util.EnumSet;
import java.util.Iterator;
import java.util.UUID;
public abstract class TileEntityDrawers extends BaseTileEntity implements IDrawerGroupInteractive, ISidedInventory, IUpgradeProvider, ILockable, ISealable
public abstract class TileEntityDrawers extends BaseTileEntity implements IDrawerGroupInteractive, ISidedInventory, IUpgradeProvider, ILockable, ISealable, IProtectable
{
private IDrawer[] drawers;
private IDrawerInventory inventory;
@@ -46,6 +48,9 @@ public abstract class TileEntityDrawers extends BaseTileEntity implements IDrawe
private int drawerCapacity = 1;
private boolean shrouded = false;
private boolean taped = false;
private boolean hideUpgrade = false;
private UUID owner;
private String securityKey;
private EnumSet<LockAttribute> lockAttributes = null;
@@ -242,6 +247,67 @@ public abstract class TileEntityDrawers extends BaseTileEntity implements IDrawe
}
}
@Override
public UUID getOwner () {
if (!StorageDrawers.config.cache.enablePersonalUpgrades)
return null;
return owner;
}
@Override
public boolean setOwner (UUID owner) {
if (!StorageDrawers.config.cache.enablePersonalUpgrades)
return false;
if ((this.owner != null && !this.owner.equals(owner)) || (owner != null && !owner.equals(this.owner))) {
this.owner = owner;
if (worldObj != null && !worldObj.isRemote) {
markDirty();
worldObj.markBlockForUpdate(xCoord, yCoord, zCoord);
}
}
return true;
}
@Override
public ISecurityProvider getSecurityProvider () {
return StorageDrawers.securityRegistry.getProvider(securityKey);
}
@Override
public boolean setSecurityProvider (ISecurityProvider provider) {
if (!StorageDrawers.config.cache.enablePersonalUpgrades)
return false;
String newKey = (provider == null) ? null : provider.getProviderID();
if ((newKey != null && !newKey.equals(securityKey)) || (securityKey != null && !securityKey.equals(newKey))) {
securityKey = newKey;
if (worldObj != null && !worldObj.isRemote) {
markDirty();
worldObj.markBlockForUpdate(xCoord, yCoord, zCoord);
}
}
return true;
}
public boolean shouldHideUpgrades () {
return hideUpgrade;
}
public void setShouldHideUpgrades (boolean hide) {
hideUpgrade = hide;
if (worldObj != null && !worldObj.isRemote) {
markDirty();
worldObj.markBlockForUpdate(xCoord, yCoord, zCoord);
}
}
public boolean isSealed () {
if (!StorageDrawers.config.cache.enableTape)
return false;
@@ -488,6 +554,18 @@ public abstract class TileEntityDrawers extends BaseTileEntity implements IDrawe
if (tag.hasKey("Shr"))
shrouded = tag.getBoolean("Shr");
owner = null;
if (tag.hasKey("Own"))
owner = UUID.fromString(tag.getString("Own"));
securityKey = null;
if (tag.hasKey("Sec"))
securityKey = tag.getString("Sec");
hideUpgrade = false;
if (tag.hasKey("HideUp"))
hideUpgrade = tag.getBoolean("HideUp");
NBTTagList slots = tag.getTagList("Slots", Constants.NBT.TAG_COMPOUND);
drawers = new IDrawer[slots.tagCount()];
@@ -537,6 +615,15 @@ public abstract class TileEntityDrawers extends BaseTileEntity implements IDrawe
if (shrouded)
tag.setBoolean("Shr", shrouded);
if (owner != null)
tag.setString("Own", owner.toString());
if (securityKey != null)
tag.setString("Sec", securityKey);
if (hideUpgrade)
tag.setBoolean("HideUp", hideUpgrade);
NBTTagList slots = new NBTTagList();
for (IDrawer drawer : drawers) {
NBTTagCompound slot = new NBTTagCompound();
@@ -130,7 +130,7 @@ public class DrawersRenderer implements ISimpleBlockRenderingHandler
renderer.uvRotateTop = 0;
int maxStorageLevel = tile.getMaxStorageLevel();
if (maxStorageLevel > 1 && StorageDrawers.config.cache.renderStorageUpgrades) {
if (maxStorageLevel > 1 && StorageDrawers.config.cache.renderStorageUpgrades && !tile.shouldHideUpgrades()) {
for (int i = 0; i < 6; i++)
boxRenderer.setExteriorIcon(block.getOverlayIcon(world, x, y, z, i, maxStorageLevel), i);
@@ -151,7 +151,7 @@ public class DrawersRenderer implements ISimpleBlockRenderingHandler
if (StorageDrawers.config.cache.enableIndicatorUpgrades)
renderIndicator(block, x, y, z, side, renderer, tile.getEffectiveStatusLevel());
if (StorageDrawers.config.cache.enableLockUpgrades)
renderLock(block, x, y, z, side, renderer, tile.isLocked(LockAttribute.LOCK_POPULATED));
renderLock(block, x, y, z, side, renderer, tile.isLocked(LockAttribute.LOCK_POPULATED), tile.getOwner() != null);
if (StorageDrawers.config.cache.enableVoidUpgrades)
renderVoid(block, x, y, z, side, renderer, tile.isVoid());
if (StorageDrawers.config.cache.enableTape)
@@ -162,12 +162,12 @@ public class DrawersRenderer implements ISimpleBlockRenderingHandler
return;
}
private void renderLock (BlockDrawers block, int x, int y, int z, int side, RenderBlocks renderer, boolean locked) {
if (!locked)
private void renderLock (BlockDrawers block, int x, int y, int z, int side, RenderBlocks renderer, boolean locked, boolean owned) {
if (!locked && !owned)
return;
double depth = block.halfDepth ? .5 : 1;
IIcon iconLock = block.getLockIcon();
IIcon iconLock = block.getLockIcon(locked, owned);
RenderHelper.instance.setRenderBounds(0.46875, 0.9375, 0, 0.53125, 1, depth + .005);
RenderHelper.instance.state.setRotateTransform(RenderHelper.ZPOS, side);
@@ -137,6 +137,9 @@ public final class RenderUtil
}
public static void renderFaceYNegColorMult (RenderBlocks renderer, Block block, int x, int y, int z, IIcon icon, float r, float g, float b) {
if (icon == null)
return;
Tessellator tessellator = Tessellator.instance;
tessellator.setColorOpaque_F(.5f * r, .5f * g, .5f * b);
if (renderer.blockAccess == null) {
@@ -154,6 +157,9 @@ public final class RenderUtil
}
public static void renderFaceYPosColorMult (RenderBlocks renderer, Block block, int x, int y, int z, IIcon icon, float r, float g, float b) {
if (icon == null)
return;
Tessellator tessellator = Tessellator.instance;
tessellator.setColorOpaque_F(1f * r, 1f * g, 1f * b);
if (renderer.blockAccess == null) {
@@ -171,6 +177,9 @@ public final class RenderUtil
}
public static void renderFaceZNegColorMult (RenderBlocks renderer, Block block, int x, int y, int z, IIcon icon, float r, float g, float b) {
if (icon == null)
return;
Tessellator tessellator = Tessellator.instance;
tessellator.setColorOpaque_F(.8f * r, .8f * g, .8f * b);
if (renderer.blockAccess == null) {
@@ -188,6 +197,9 @@ public final class RenderUtil
}
public static void renderFaceZPosColorMult (RenderBlocks renderer, Block block, int x, int y, int z, IIcon icon, float r, float g, float b) {
if (icon == null)
return;
Tessellator tessellator = Tessellator.instance;
tessellator.setColorOpaque_F(.8f * r, .8f * g, .8f * b);
if (renderer.blockAccess == null) {
@@ -205,6 +217,9 @@ public final class RenderUtil
}
public static void renderFaceXNegColorMult (RenderBlocks renderer, Block block, int x, int y, int z, IIcon icon, float r, float g, float b) {
if (icon == null)
return;
Tessellator tessellator = Tessellator.instance;
tessellator.setColorOpaque_F(.6f * r, .6f * g, .6f * b);
if (renderer.blockAccess == null) {
@@ -222,6 +237,9 @@ public final class RenderUtil
}
public static void renderFaceXPosColorMult (RenderBlocks renderer, Block block, int x, int y, int z, IIcon icon, float r, float g, float b) {
if (icon == null)
return;
Tessellator tessellator = Tessellator.instance;
tessellator.setColorOpaque_F(.6f * r, .6f * g, .6f * b);
if (renderer.blockAccess == null) {
@@ -60,6 +60,7 @@ public class ConfigManager
public boolean enableVoidUpgrades;
public boolean enableCreativeUpgrades;
public boolean enableShroudUpgrades;
public boolean enablePersonalUpgrades;
public boolean enableSortingUpgrades;
public boolean renderStorageUpgrades;
public boolean enableDrawerUI;
@@ -74,6 +75,7 @@ public class ConfigManager
public boolean enableMineTweakerIntegration;
public boolean enableRefinedRelocationIntegration;
public boolean enableThermalExpansionIntegration;
public boolean enableThermalFoundationIntegration;
public boolean enableTape;
public boolean enableFallbackRecipes;
public boolean invertShift;
@@ -229,6 +231,7 @@ public class ConfigManager
cache.enableVoidUpgrades = config.get(Configuration.CATEGORY_GENERAL, "enableVoidUpgrades", true).setLanguageKey(LANG_PREFIX + "prop.enableVoidUpgrades").setRequiresMcRestart(true).getBoolean();
cache.enableCreativeUpgrades = config.get(Configuration.CATEGORY_GENERAL, "enableCreativeUpgrades", true).setLanguageKey(LANG_PREFIX + "prop.enableCreativeUpgrades").setRequiresMcRestart(true).getBoolean();
cache.enableShroudUpgrades = config.get(Configuration.CATEGORY_GENERAL, "enableShroudUpgrades", true).setLanguageKey(LANG_PREFIX + "prop.enableShroudUpgrades").setRequiresMcRestart(true).getBoolean();
cache.enablePersonalUpgrades = config.get(Configuration.CATEGORY_GENERAL, "enablePersonalUpgrades", true).setLanguageKey(LANG_PREFIX + "prop.enablePersonalUpgrades").setRequiresMcRestart(true).getBoolean();
cache.enableSortingUpgrades = config.get(Configuration.CATEGORY_GENERAL, "enableSortingUpgrades", true).setLanguageKey(LANG_PREFIX + "prop.enableSortingUpgrades").setRequiresMcRestart(true).getBoolean();
cache.enableTape = config.get(Configuration.CATEGORY_GENERAL, "enableTape", true).setLanguageKey(LANG_PREFIX + "prop.enableTape").setRequiresMcRestart(true).getBoolean();
cache.itemRenderType = config.get(Configuration.CATEGORY_GENERAL, "itemRenderType", "fast", null, new String[]{"fancy", "fast"}).setLanguageKey(LANG_PREFIX + "prop.itemRenderType").getString();
@@ -239,7 +242,7 @@ public class ConfigManager
cache.enableSidedOutput = config.get(Configuration.CATEGORY_GENERAL, "enableSidedOutput", true).setLanguageKey(LANG_PREFIX + "prop.enableSidedOutput").getBoolean();
cache.enableItemConversion = config.get(Configuration.CATEGORY_GENERAL, "enableItemConversion", true).setLanguageKey(LANG_PREFIX + "prop.enableItemConversion").getBoolean();
cache.enableFallbackRecipes = config.get(Configuration.CATEGORY_GENERAL, "enableFallbackRecipes", true).setLanguageKey(LANG_PREFIX + "prop.enableFallbackRecipes").setRequiresMcRestart(true).getBoolean();
cache.stackRemainderWaila = !config.get(Configuration.CATEGORY_GENERAL, "wailaStackRemainder", "exact", null, new String[]{"exact", "stack + remainder"}).setLanguageKey(LANG_PREFIX + "prop.wailaStackRemainder").getString().equals("exact");
cache.stackRemainderWaila = !config.get(Configuration.CATEGORY_GENERAL, "wailaStackRemainder", "stack + remainder", null, new String[]{"exact", "stack + remainder"}).setLanguageKey(LANG_PREFIX + "prop.wailaStackRemainder").getString().equals("exact");
cache.invertShift = config.get(Configuration.CATEGORY_GENERAL, "invertShift", false,
"Inverts how shift works with drawers. If this is true, shifting will only give one item, where regular clicks will give a full stack. Leave false for default behavior.")
.setLanguageKey(LANG_PREFIX + "prop.invertShift").getBoolean();
@@ -253,6 +256,7 @@ public class ConfigManager
cache.enableMineTweakerIntegration = config.get(sectionIntegration.getQualifiedName(), "enableMineTweaker", true).setLanguageKey(LANG_PREFIX + "integration.enableMineTweaker").setRequiresMcRestart(true).getBoolean();
cache.enableRefinedRelocationIntegration = config.get(sectionIntegration.getQualifiedName(), "enableRefinedRelocation", true).setLanguageKey(LANG_PREFIX + "integration.enableRefinedRelocation").setRequiresMcRestart(true).getBoolean();
cache.enableThermalExpansionIntegration = config.get(sectionIntegration.getQualifiedName(), "enableThermalExpansion", true).setLanguageKey(LANG_PREFIX + "integration.enableThermalExpansion").setRequiresMcRestart(true).getBoolean();
cache.enableThermalFoundationIntegration = config.get(sectionIntegration.getQualifiedName(), "enableThermalFoundation", true).setLanguageKey(LANG_PREFIX + "integration.enableThermalFoundation").setRequiresMcRestart(true).getBoolean();
config.get(sectionBlocksFullDrawers1x1.getQualifiedName(), "enabled", true).setLanguageKey(LANG_PREFIX + "prop.enabled").setRequiresMcRestart(true);
config.get(sectionBlocksFullDrawers1x1.getQualifiedName(), "baseStorage", 32).setLanguageKey(LANG_PREFIX + "prop.baseStorage").setRequiresWorldRestart(true);
@@ -19,6 +19,8 @@ import net.minecraftforge.oredict.OreDictionary;
public class ModBlocks
{
public static DataResolver resolver;
public static BlockDrawers fullDrawers1;
public static BlockDrawers fullDrawers2;
public static BlockDrawers fullDrawers4;
@@ -33,6 +35,8 @@ public class ModBlocks
public static BlockDrawersCustom fullCustom2;
public void init () {
resolver = new DataResolver(StorageDrawers.MOD_ID);
fullDrawers1 = new BlockDrawers("fullDrawers1", 1, false);
fullDrawers2 = new BlockDrawers("fullDrawers2", 2, false);
fullDrawers4 = new BlockDrawers("fullDrawers4", 4, false);
@@ -103,6 +107,8 @@ public class ModBlocks
for (String key : new String[] { "drawerBasic" })
OreDictionary.registerOre(key, new ItemStack(fullCustom1, 1, OreDictionary.WILDCARD_VALUE));
resolver.init();
}
public static String getQualifiedName (String name) {
@@ -14,6 +14,7 @@ public class ModItems
public static ItemUpgradeVoid upgradeVoid;
public static ItemUpgradeCreative upgradeCreative;
public static ItemShroudKey shroudKey;
public static ItemPersonalKey personalKey;
public static ItemTape tape;
public void init () {
@@ -24,6 +25,7 @@ public class ModItems
upgradeVoid = new ItemUpgradeVoid(makeName("upgradeVoid"));
upgradeCreative = new ItemUpgradeCreative(makeName("upgradeCreative"));
shroudKey = new ItemShroudKey(makeName("shroudKey"));
personalKey = new ItemPersonalKey(makeName("personalKey"));
tape = new ItemTape(makeName("tape"));
GameRegistry.registerItem(upgradeTemplate, "upgradeTemplate");
@@ -40,6 +42,8 @@ public class ModItems
GameRegistry.registerItem(upgradeLock, "upgradeLock");
if (StorageDrawers.config.cache.enableShroudUpgrades)
GameRegistry.registerItem(shroudKey, "shroudKey");
if (StorageDrawers.config.cache.enablePersonalUpgrades)
GameRegistry.registerItem(personalKey, "personalKey");
if (StorageDrawers.config.cache.enableTape)
GameRegistry.registerItem(tape, "tape");
}
@@ -116,6 +116,10 @@ public class ModRecipes
GameRegistry.addShapelessRecipe(new ItemStack(ModItems.shroudKey), ModItems.upgradeLock, Items.ender_eye);
}
if (config.cache.enablePersonalUpgrades) {
GameRegistry.addShapelessRecipe(new ItemStack(ModItems.personalKey), ModItems.upgradeLock, Items.name_tag);
}
if (config.cache.enableTape) {
GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.tape), " x ", "yyy",
'x', "slimeball", 'y', Items.paper));
@@ -0,0 +1,81 @@
package com.jaquadro.minecraft.storagedrawers.core.api;
import com.jaquadro.minecraft.storagedrawers.api.pack.BlockConfiguration;
import com.jaquadro.minecraft.storagedrawers.api.pack.IExtendedDataResolver;
import com.jaquadro.minecraft.storagedrawers.util.UniqueMetaIdentifier;
import com.jaquadro.minecraft.storagedrawers.util.UniqueMetaRegistry;
import net.minecraft.block.Block;
import java.util.HashMap;
import java.util.Map;
public class BlockRegistry
{
private Map<BlockConfiguration, UniqueMetaRegistry<UniqueMetaIdentifier>> registry = new HashMap<BlockConfiguration, UniqueMetaRegistry<UniqueMetaIdentifier>>();
private Map<BlockConfiguration, UniqueMetaRegistry<UniqueMetaIdentifier>> invertRegistry = new HashMap<BlockConfiguration, UniqueMetaRegistry<UniqueMetaIdentifier>>();
public void register (BlockConfiguration config, IExtendedDataResolver resolver) {
for (int i = 0; i < 16; i++) {
if (resolver.isValidMetaValue(i))
register(config, resolver.getBlock(config), i, resolver.getPlankBlock(i), resolver.getPlankMeta(i));
}
}
public void register (BlockConfiguration config, Block block, int meta, Block plankBlock, int plankMeta) {
UniqueMetaRegistry<UniqueMetaIdentifier> uniq = registry.get(config);
if (uniq == null) {
uniq = new UniqueMetaRegistry<UniqueMetaIdentifier>();
registry.put(config, uniq);
}
uniq.register(UniqueMetaIdentifier.createFor(plankBlock, plankMeta), UniqueMetaIdentifier.createFor(block, meta));
UniqueMetaRegistry<UniqueMetaIdentifier> blockReg = invertRegistry.get(config);
if (blockReg == null) {
blockReg = new UniqueMetaRegistry<UniqueMetaIdentifier>();
invertRegistry.put(config, blockReg);
}
blockReg.register(UniqueMetaIdentifier.createFor(block, meta), UniqueMetaIdentifier.createFor(plankBlock, plankMeta));
}
public Block getBlock (BlockConfiguration config, Block plankBlock, int plankMeta) {
return blockLookup(registry, config, plankBlock, plankMeta);
}
public int getMeta (BlockConfiguration config, Block plankBlock, int plankMeta) {
return metaLookup(registry, config, plankBlock, plankMeta);
}
public Block getPlankBlock (BlockConfiguration config, Block block, int meta) {
return blockLookup(invertRegistry, config, block, meta);
}
public int getPlankMeta (BlockConfiguration config, Block block, int meta) {
return metaLookup(invertRegistry, config, block, meta);
}
private Block blockLookup (Map<BlockConfiguration, UniqueMetaRegistry<UniqueMetaIdentifier>> reg, BlockConfiguration config, Block block, int meta) {
UniqueMetaRegistry<UniqueMetaIdentifier> uniq = reg.get(config);
if (uniq == null)
return null;
UniqueMetaIdentifier id = uniq.getEntry(UniqueMetaIdentifier.createFor(block, meta));
if (id == null)
return null;
return id.getBlock();
}
private int metaLookup (Map<BlockConfiguration, UniqueMetaRegistry<UniqueMetaIdentifier>> reg, BlockConfiguration config, Block block, int meta) {
UniqueMetaRegistry<UniqueMetaIdentifier> uniq = reg.get(config);
if (uniq == null)
return 0;
UniqueMetaIdentifier id = uniq.getEntry(UniqueMetaIdentifier.createFor(block, meta));
if (id == null)
return 0;
return id.meta;
}
}
@@ -2,9 +2,11 @@ package com.jaquadro.minecraft.storagedrawers.core.api;
import com.jaquadro.minecraft.storagedrawers.StorageDrawers;
import com.jaquadro.minecraft.storagedrawers.api.pack.BlockConfiguration;
import com.jaquadro.minecraft.storagedrawers.api.pack.IExtendedDataResolver;
import com.jaquadro.minecraft.storagedrawers.api.pack.IPackBlockFactory;
import com.jaquadro.minecraft.storagedrawers.api.pack.IPackDataResolver;
import com.jaquadro.minecraft.storagedrawers.block.pack.BlockSortingTrimPack;
import com.jaquadro.minecraft.storagedrawers.config.ConfigManager;
import com.jaquadro.minecraft.storagedrawers.integration.IntegrationRegistry;
import com.jaquadro.minecraft.storagedrawers.block.pack.BlockDrawersPack;
import com.jaquadro.minecraft.storagedrawers.block.pack.BlockSortingDrawersPack;
@@ -15,6 +17,7 @@ import com.jaquadro.minecraft.storagedrawers.item.pack.ItemDrawersPack;
import com.jaquadro.minecraft.storagedrawers.item.pack.ItemSortingDrawersPack;
import com.jaquadro.minecraft.storagedrawers.item.pack.ItemSortingTrimPack;
import com.jaquadro.minecraft.storagedrawers.item.pack.ItemTrimPack;
import cpw.mods.fml.common.Loader;
import cpw.mods.fml.common.registry.GameRegistry;
import net.minecraft.block.Block;
import net.minecraft.item.ItemStack;
@@ -83,4 +86,39 @@ public class PackFactory implements IPackBlockFactory
public void hideBlock (String blockID) {
NEIStorageDrawersConfig.hideBlock(blockID);
}
@Override
public void registerResolver (IExtendedDataResolver resolver) {
ConfigManager config = StorageDrawers.config;
if (config.isBlockEnabled("fulldrawers1")) {
StorageDrawers.blockRegistry.register(BlockConfiguration.BasicFull1, resolver);
if (Loader.isModLoaded("RefinedRelocation") && config.cache.enableRefinedRelocationIntegration)
StorageDrawers.blockRegistry.register(BlockConfiguration.SortingFull1, resolver);
}
if (config.isBlockEnabled("fulldrawers2")) {
StorageDrawers.blockRegistry.register(BlockConfiguration.BasicFull2, resolver);
if (Loader.isModLoaded("RefinedRelocation") && config.cache.enableRefinedRelocationIntegration)
StorageDrawers.blockRegistry.register(BlockConfiguration.SortingFull2, resolver);
}
if (config.isBlockEnabled("fulldrawers4")) {
StorageDrawers.blockRegistry.register(BlockConfiguration.BasicFull4, resolver);
if (Loader.isModLoaded("RefinedRelocation") && config.cache.enableRefinedRelocationIntegration)
StorageDrawers.blockRegistry.register(BlockConfiguration.SortingFull4, resolver);
}
if (config.isBlockEnabled("halfdrawers2")) {
StorageDrawers.blockRegistry.register(BlockConfiguration.BasicHalf2, resolver);
if (Loader.isModLoaded("RefinedRelocation") && config.cache.enableRefinedRelocationIntegration)
StorageDrawers.blockRegistry.register(BlockConfiguration.SortingHalf2, resolver);
}
if (config.isBlockEnabled("halfdrawers4")) {
StorageDrawers.blockRegistry.register(BlockConfiguration.BasicHalf4, resolver);
if (Loader.isModLoaded("RefinedRelocation") && config.cache.enableRefinedRelocationIntegration)
StorageDrawers.blockRegistry.register(BlockConfiguration.SortingHalf4, resolver);
}
if (config.isBlockEnabled("trim")) {
StorageDrawers.blockRegistry.register(BlockConfiguration.Trim, resolver);
if (Loader.isModLoaded("RefinedRelocation") && config.cache.enableRefinedRelocationIntegration)
StorageDrawers.blockRegistry.register(BlockConfiguration.TrimSorting, resolver);
}
}
}
@@ -11,9 +11,7 @@ import java.util.List;
public abstract class IntegrationModule
{
public String getModID () {
return null;
}
public abstract String getModID ();
public boolean versionCheck () {
String pattern = versionPattern();
@@ -30,6 +30,8 @@ public class IntegrationRegistry
reg.add(new NotEnoughItems());
if (Loader.isModLoaded("ThermalExpansion") && StorageDrawers.config.cache.enableThermalExpansionIntegration)
reg.add(new ThermalExpansion());
if (Loader.isModLoaded("ThermalFoundation") && StorageDrawers.config.cache.enableThermalFoundationIntegration)
reg.add(new ThermalFoundation());
}
private IntegrationRegistry () {
@@ -29,6 +29,11 @@ public class ThermalExpansion extends IntegrationModule
static boolean initialized;
@Override
public String getModID () {
return MOD_ID;
}
@Override
public void init () throws Throwable {
clSawmillManager = Class.forName("cofh.thermalexpansion.util.crafting.SawmillManager");
@@ -121,37 +126,41 @@ public class ThermalExpansion extends IntegrationModule
continue;
Block plank = resolver.getPlankBlock(i);
int plankMeta = resolver.getPlankMeta(i);
if (plank != null) {
if (basicFull1 != null)
mtSawmillAddRecipe.invoke(null, 2400, new ItemStack(basicFull1, 1, i), new ItemStack(plank, 6, i), new ItemStack(Blocks.planks, 8, 0), 100);
mtSawmillAddRecipe.invoke(null, 2400, new ItemStack(basicFull1, 1, i), new ItemStack(plank, 6, plankMeta), new ItemStack(Blocks.planks, 8, 0), 100);
if (basicFull2 != null)
mtSawmillAddRecipe.invoke(null, 2400, new ItemStack(basicFull2, 1, i), new ItemStack(plank, 7, i), new ItemStack(Blocks.planks, 8, 0), 100);
mtSawmillAddRecipe.invoke(null, 2400, new ItemStack(basicFull2, 1, i), new ItemStack(plank, 7, plankMeta), new ItemStack(Blocks.planks, 8, 0), 100);
if (basicFull4 != null)
mtSawmillAddRecipe.invoke(null, 2400, new ItemStack(basicFull4, 1, i), new ItemStack(plank, 5, i), new ItemStack(Blocks.planks, 8, 0), 100);
mtSawmillAddRecipe.invoke(null, 2400, new ItemStack(basicFull4, 1, i), new ItemStack(plank, 5, plankMeta), new ItemStack(Blocks.planks, 8, 0), 100);
if (basicTrim != null)
mtSawmillAddRecipe.invoke(null, 2400, new ItemStack(basicTrim, 1, i), new ItemStack(plank, 5, i), itemSawdust, 100);
mtSawmillAddRecipe.invoke(null, 2400, new ItemStack(basicTrim, 1, i), new ItemStack(plank, 5, plankMeta), itemSawdust, 100);
if (sortingFull1 != null)
mtSawmillAddRecipe.invoke(null, 2400, new ItemStack(sortingFull1, 1, i), new ItemStack(plank, 6, i), new ItemStack(Blocks.planks, 8, 0), 100);
mtSawmillAddRecipe.invoke(null, 2400, new ItemStack(sortingFull1, 1, i), new ItemStack(plank, 6, plankMeta), new ItemStack(Blocks.planks, 8, 0), 100);
if (sortingFull2 != null)
mtSawmillAddRecipe.invoke(null, 2400, new ItemStack(sortingFull2, 1, i), new ItemStack(plank, 7, i), new ItemStack(Blocks.planks, 8, 0), 100);
mtSawmillAddRecipe.invoke(null, 2400, new ItemStack(sortingFull2, 1, i), new ItemStack(plank, 7, plankMeta), new ItemStack(Blocks.planks, 8, 0), 100);
if (sortingFull4 != null)
mtSawmillAddRecipe.invoke(null, 2400, new ItemStack(sortingFull4, 1, i), new ItemStack(plank, 5, i), new ItemStack(Blocks.planks, 8, 0), 100);
mtSawmillAddRecipe.invoke(null, 2400, new ItemStack(sortingFull4, 1, i), new ItemStack(plank, 5, plankMeta), new ItemStack(Blocks.planks, 8, 0), 100);
if (sortingTrim != null)
mtSawmillAddRecipe.invoke(null, 2400, new ItemStack(sortingTrim, 1, i), new ItemStack(plank, 5, i), itemSawdust, 100);
mtSawmillAddRecipe.invoke(null, 2400, new ItemStack(sortingTrim, 1, i), new ItemStack(plank, 5, plankMeta), itemSawdust, 100);
}
Block slab = resolver.getSlabBlock(i);
int slabMeta = resolver.getSlabMeta(i);
if (slab != null) {
if (basicHalf2 != null)
mtSawmillAddRecipe.invoke(null, 2400, new ItemStack(basicHalf2, 1, i), new ItemStack(slab, 7, i), new ItemStack(Blocks.planks, 8, 0), 100);
mtSawmillAddRecipe.invoke(null, 2400, new ItemStack(basicHalf2, 1, i), new ItemStack(slab, 7, slabMeta), new ItemStack(Blocks.planks, 8, 0), 100);
if (basicHalf4 != null)
mtSawmillAddRecipe.invoke(null, 2400, new ItemStack(basicHalf4, 1, i), new ItemStack(slab, 5, i), new ItemStack(Blocks.planks, 8, 0), 100);
mtSawmillAddRecipe.invoke(null, 2400, new ItemStack(basicHalf4, 1, i), new ItemStack(slab, 5, slabMeta), new ItemStack(Blocks.planks, 8, 0), 100);
if (sortingHalf2 != null)
mtSawmillAddRecipe.invoke(null, 2400, new ItemStack(sortingHalf2, 1, i), new ItemStack(slab, 7, i), new ItemStack(Blocks.planks, 8, 0), 100);
mtSawmillAddRecipe.invoke(null, 2400, new ItemStack(sortingHalf2, 1, i), new ItemStack(slab, 7, slabMeta), new ItemStack(Blocks.planks, 8, 0), 100);
if (sortingHalf4 != null)
mtSawmillAddRecipe.invoke(null, 2400, new ItemStack(sortingHalf4, 1, i), new ItemStack(slab, 5, i), new ItemStack(Blocks.planks, 8, 0), 100);
mtSawmillAddRecipe.invoke(null, 2400, new ItemStack(sortingHalf4, 1, i), new ItemStack(slab, 5, slabMeta), new ItemStack(Blocks.planks, 8, 0), 100);
}
}
}
@@ -0,0 +1,55 @@
package com.jaquadro.minecraft.storagedrawers.integration;
import com.jaquadro.minecraft.storagedrawers.StorageDrawers;
import com.jaquadro.minecraft.storagedrawers.core.ModItems;
import com.jaquadro.minecraft.storagedrawers.integration.thermalfoundation.CoFHSecurityProvider;
import com.mojang.authlib.GameProfile;
import cpw.mods.fml.common.registry.GameRegistry;
import net.minecraft.init.Items;
import net.minecraft.item.ItemStack;
import net.minecraftforge.oredict.ShapedOreRecipe;
import java.lang.reflect.Method;
public class ThermalFoundation extends IntegrationModule
{
private Class classRegistrySocial;
private Method methodPlayerHasAccess;
@Override
public String getModID () {
return "ThermalFoundation";
}
@Override
public void init () throws Throwable {
try {
classRegistrySocial = Class.forName("cofh.core.RegistrySocial");
}
catch (ClassNotFoundException e) {
classRegistrySocial = Class.forName("cofh.core.util.SocialRegistry");
}
methodPlayerHasAccess = classRegistrySocial.getDeclaredMethod("playerHasAccess", String.class, GameProfile.class);
}
@Override
public void postInit () {
StorageDrawers.securityRegistry.registerProvider(new CoFHSecurityProvider(this));
if (StorageDrawers.config.cache.enablePersonalUpgrades) {
GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.personalKey, 1, 1), "xxx", "xyx", "xxx",
'x', "nuggetSignalum", 'y', ModItems.personalKey));
}
}
public boolean playerHasAccess (String playerName, GameProfile owner) {
try {
return (Boolean) methodPlayerHasAccess.invoke(null, playerName, owner);
}
catch (Throwable t) {
return false;
}
}
}
@@ -8,11 +8,13 @@ import com.jaquadro.minecraft.storagedrawers.api.storage.IFractionalDrawer;
import com.jaquadro.minecraft.storagedrawers.api.storage.attribute.LockAttribute;
import com.jaquadro.minecraft.storagedrawers.block.BlockDrawers;
import com.jaquadro.minecraft.storagedrawers.block.tile.TileEntityDrawers;
import com.jaquadro.minecraft.storagedrawers.security.SecurityManager;
import cpw.mods.fml.common.event.FMLInterModComms;
import mcp.mobius.waila.api.IWailaConfigHandler;
import mcp.mobius.waila.api.IWailaDataAccessor;
import mcp.mobius.waila.api.IWailaDataProvider;
import mcp.mobius.waila.api.IWailaRegistrar;
import net.minecraft.client.Minecraft;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
@@ -61,39 +63,46 @@ public class Waila extends IntegrationModule
public List<String> getWailaBody (ItemStack itemStack, List<String> currenttip, IWailaDataAccessor accessor, IWailaConfigHandler config) {
TileEntityDrawers tile = (TileEntityDrawers) accessor.getTileEntity();
IDrawerGroup group = tile;
for (int i = 0; i < group.getDrawerCount(); i++) {
if (!group.isDrawerEnabled(i))
continue;
if (SecurityManager.hasAccess(Minecraft.getMinecraft().thePlayer.getGameProfile(), tile)) {
for (int i = 0; i < tile.getDrawerCount(); i++) {
if (!tile.isDrawerEnabled(i))
continue;
String name = StatCollector.translateToLocal("storageDrawers.waila.empty");
String name = StatCollector.translateToLocal("storageDrawers.waila.empty");
IDrawer drawer = group.getDrawer(i);
ItemStack stack = drawer.getStoredItemPrototype();
if (stack != null && stack.getItem() != null) {
String stackName = stack.getDisplayName();
List<IWailaTooltipHandler> handlers = StorageDrawers.wailaRegistry.getTooltipHandlers();
for (int j = 0, n = handlers.size(); j < n; j++)
stackName = handlers.get(j).transformItemName(drawer, stackName);
IDrawer drawer = tile.getDrawer(i);
ItemStack stack = drawer.getStoredItemPrototype();
if (stack != null && stack.getItem() != null) {
String stackName = stack.getDisplayName();
List<IWailaTooltipHandler> handlers = StorageDrawers.wailaRegistry.getTooltipHandlers();
for (int j = 0, n = handlers.size(); j < n; j++)
stackName = handlers.get(j).transformItemName(drawer, stackName);
if (drawer.getStoredItemCount() == Integer.MAX_VALUE)
name = stackName + " [\u221E]";
else if (drawer instanceof IFractionalDrawer && ((IFractionalDrawer) drawer).getConversionRate() > 1)
name = stackName + ((i == 0) ? " [" : " [+") + ((IFractionalDrawer) drawer).getStoredItemRemainder() + "]";
else if (StorageDrawers.config.cache.stackRemainderWaila) {
int stacks = drawer.getStoredItemCount() / drawer.getStoredItemStackSize();
int remainder = drawer.getStoredItemCount() - (stacks * drawer.getStoredItemStackSize());
if (stacks > 0 && remainder > 0)
name = stackName + " [" + stacks + "x" + drawer.getStoredItemStackSize() + " + " + remainder + "]";
else if (stacks > 0)
name = stackName + " [" + stacks + "x" + drawer.getStoredItemStackSize() + "]";
else
name = stackName + " [" + remainder + "]";
if (drawer.getStoredItemCount() == Integer.MAX_VALUE)
name = stackName + " [\u221E]";
else if (drawer instanceof IFractionalDrawer && ((IFractionalDrawer) drawer).getConversionRate() > 1)
name = stackName + ((i == 0) ? " [" : " [+") + ((IFractionalDrawer) drawer).getStoredItemRemainder() + "]";
else if (StorageDrawers.config.cache.stackRemainderWaila) {
int stacks = drawer.getStoredItemCount() / drawer.getStoredItemStackSize();
int remainder = drawer.getStoredItemCount() - (stacks * drawer.getStoredItemStackSize());
if (stacks > 0 && remainder > 0)
name = stackName + " [" + stacks + "x" + drawer.getStoredItemStackSize() + " + " + remainder + "]";
else if (stacks > 0)
name = stackName + " [" + stacks + "x" + drawer.getStoredItemStackSize() + "]";
else
name = stackName + " [" + remainder + "]";
} else
name = stackName + " [" + drawer.getStoredItemCount() + "]";
}
else
name = stackName + " [" + drawer.getStoredItemCount() + "]";
currenttip.add(StatCollector.translateToLocalFormatted("storageDrawers.waila.drawer", i + 1, name));
}
if (tile.isUnlimited() || tile.isVending())
currenttip.add(StatCollector.translateToLocalFormatted("storageDrawers.waila.nolimit"));
else {
int limit = tile.getDrawerCapacity() * tile.getEffectiveStorageMultiplier();
currenttip.add(StatCollector.translateToLocalFormatted("storageDrawers.waila.limit", limit, tile.getEffectiveStorageMultiplier()));
}
currenttip.add(StatCollector.translateToLocalFormatted("storageDrawers.waila.drawer", i + 1, name));
}
String attrib = "";
@@ -103,6 +112,8 @@ public class Waila extends IntegrationModule
attrib += (attrib.isEmpty() ? "" : ", ") + StatCollector.translateToLocal("storageDrawers.waila.void");
if (tile.isSorting())
attrib += (attrib.isEmpty() ? "" : ", ") + StatCollector.translateToLocal("storageDrawers.waila.sorting");
if (tile.getOwner() != null)
attrib += (attrib.isEmpty() ? "" : ", ") + StatCollector.translateToLocal("storageDrawers.waila.protected");
if (!attrib.isEmpty())
currenttip.add(attrib);
@@ -7,15 +7,14 @@ import appeng.api.storage.IMEInventory;
import appeng.api.storage.StorageChannel;
import appeng.api.storage.data.IAEItemStack;
import appeng.api.storage.data.IItemList;
import com.jaquadro.minecraft.storagedrawers.api.storage.IDrawer;
import com.jaquadro.minecraft.storagedrawers.api.storage.IDrawerGroup;
import com.jaquadro.minecraft.storagedrawers.api.storage.IFractionalDrawer;
import com.jaquadro.minecraft.storagedrawers.api.storage.IPriorityGroup;
import com.jaquadro.minecraft.storagedrawers.api.storage.*;
import com.jaquadro.minecraft.storagedrawers.api.storage.attribute.ILockable;
import com.jaquadro.minecraft.storagedrawers.api.storage.attribute.IVoidable;
import com.jaquadro.minecraft.storagedrawers.api.storage.attribute.LockAttribute;
import net.minecraft.item.ItemStack;
import java.util.Iterator;
public class DrawerMEInventory implements IMEInventory<IAEItemStack>
{
final IDrawerGroup group;
@@ -26,52 +25,71 @@ public class DrawerMEInventory implements IMEInventory<IAEItemStack>
@Override
public IAEItemStack injectItems (IAEItemStack input, Actionable type, BaseActionSource src) {
int[] order = null;
if (group instanceof IPriorityGroup)
order = ((IPriorityGroup) group).getAccessibleDrawerSlots();
long itemsLeft = input.getStackSize();
for (int i = 0, n = group.getDrawerCount(); i < n; i++) {
int slot = (order != null) ? order[i] : i;
if (!group.isDrawerEnabled(slot))
continue;
IDrawer drawer = group.getDrawer(slot);
ItemStack itemProto = drawer.getStoredItemPrototype();
if (itemProto != null) {
if (drawer.canItemBeStored(input.getItemStack())) {
itemsLeft = injectItemsIntoDrawer(drawer, itemsLeft, type);
if (drawer instanceof IVoidable && ((IVoidable) drawer).isVoid())
itemsLeft = 0;
if (itemsLeft == 0)
return null;
}
if (group instanceof ISmartGroup) {
for (int slot : ((ISmartGroup) group).enumerateDrawersForInsertion(input.getItemStack(), false)) {
IDrawer drawer = group.getDrawer(slot);
ItemStack itemProto = drawer.getStoredItemPrototype();
if (itemProto == null)
drawer.setStoredItem(input.getItemStack(), 0);
itemsLeft = injectItemsIntoDrawer(drawer, itemsLeft, type);
if (drawer instanceof IVoidable && ((IVoidable) drawer).isVoid())
itemsLeft = 0;
if (itemsLeft == 0)
return null;
}
}
else {
int[] order = null;
if (group instanceof IPriorityGroup)
order = ((IPriorityGroup) group).getAccessibleDrawerSlots();
for (int i = 0, n = group.getDrawerCount(); i < n; i++) {
int slot = (order != null) ? order[i] : i;
if (!group.isDrawerEnabled(slot))
continue;
if (group instanceof ILockable && ((ILockable) group).isLocked(LockAttribute.LOCK_EMPTY))
continue;
for (int i = 0, n = group.getDrawerCount(); i < n; i++) {
int slot = (order != null) ? order[i] : i;
if (!group.isDrawerEnabled(slot))
continue;
IDrawer drawer = group.getDrawer(slot);
ItemStack itemProto = drawer.getStoredItemPrototype();
IDrawer drawer = group.getDrawer(slot);
ItemStack itemProto = drawer.getStoredItemPrototype();
if (itemProto != null) {
if (drawer.canItemBeStored(input.getItemStack())) {
itemsLeft = injectItemsIntoDrawer(drawer, itemsLeft, type);
if (drawer instanceof IVoidable && ((IVoidable) drawer).isVoid())
itemsLeft = 0;
if (itemsLeft == 0)
return null;
}
}
}
if (itemProto == null && drawer instanceof ILockable && ((ILockable) drawer).isLocked(LockAttribute.LOCK_EMPTY))
continue;
for (int i = 0, n = group.getDrawerCount(); i < n; i++) {
int slot = (order != null) ? order[i] : i;
if (!group.isDrawerEnabled(slot))
continue;
if (itemProto == null) {
itemProto = input.getItemStack();
if (drawer.canItemBeStored(itemProto)) {
drawer.setStoredItem(itemProto, 0);
itemsLeft = injectItemsIntoDrawer(drawer, itemsLeft, type);
if (drawer instanceof IVoidable && ((IVoidable) drawer).isVoid())
itemsLeft = 0;
if (itemsLeft == 0)
return null;
if (group instanceof ILockable && ((ILockable) group).isLocked(LockAttribute.LOCK_EMPTY))
continue;
IDrawer drawer = group.getDrawer(slot);
ItemStack itemProto = drawer.getStoredItemPrototype();
if (itemProto == null && drawer instanceof ILockable && ((ILockable) drawer).isLocked(LockAttribute.LOCK_EMPTY))
continue;
if (itemProto == null) {
itemProto = input.getItemStack();
if (drawer.canItemBeStored(itemProto)) {
drawer.setStoredItem(itemProto, 0);
itemsLeft = injectItemsIntoDrawer(drawer, itemsLeft, type);
if (drawer instanceof IVoidable && ((IVoidable) drawer).isVoid())
itemsLeft = 0;
if (itemsLeft == 0)
return null;
}
}
}
}
@@ -110,18 +128,13 @@ public class DrawerMEInventory implements IMEInventory<IAEItemStack>
@Override
public IAEItemStack extractItems (IAEItemStack request, Actionable mode, BaseActionSource src) {
int[] order = null;
if (group instanceof IPriorityGroup)
order = ((IPriorityGroup) group).getAccessibleDrawerSlots();
long itemsLeft = request.getStackSize();
for (int i = 0, n = group.getDrawerCount(); i < n; i++) {
int slot = (order != null) ? order[i] : i;
if (!group.isDrawerEnabled(slot))
continue;
if (group instanceof ISmartGroup) {
for (int slot : ((ISmartGroup) group).enumerateDrawersForExtraction(request.getItemStack(), true)) {
if (itemsLeft == 0)
break;
IDrawer drawer = group.getDrawer(slot);
if (drawer.canItemBeExtracted(request.getItemStack())) {
IDrawer drawer = group.getDrawer(slot);
int itemCount = drawer.getStoredItemCount();
if (itemsLeft > itemCount) {
if (mode == Actionable.MODULATE)
@@ -136,6 +149,33 @@ public class DrawerMEInventory implements IMEInventory<IAEItemStack>
}
}
}
else {
int[] order = null;
if (group instanceof IPriorityGroup)
order = ((IPriorityGroup) group).getAccessibleDrawerSlots();
for (int i = 0, n = group.getDrawerCount(); i < n; i++) {
int slot = (order != null) ? order[i] : i;
if (!group.isDrawerEnabled(slot))
continue;
IDrawer drawer = group.getDrawer(slot);
if (drawer.canItemBeExtracted(request.getItemStack())) {
int itemCount = drawer.getStoredItemCount();
if (itemsLeft > itemCount) {
if (mode == Actionable.MODULATE)
drawer.setStoredItemCount(0);
itemsLeft -= itemCount;
} else {
if (mode == Actionable.MODULATE)
drawer.setStoredItemCount(itemCount - (int) itemsLeft);
itemsLeft = 0;
break;
}
}
}
}
if (itemsLeft < request.getStackSize()) {
ItemStack fulfillment = request.getItemStack().copy();
@@ -1,6 +1,7 @@
package com.jaquadro.minecraft.storagedrawers.integration.refinedrelocation;
import com.jaquadro.minecraft.storagedrawers.StorageDrawers;
import com.jaquadro.minecraft.storagedrawers.api.pack.BlockType;
import com.jaquadro.minecraft.storagedrawers.block.BlockDrawers;
import com.jaquadro.minecraft.storagedrawers.block.tile.TileEntityDrawersStandard;
import com.jaquadro.minecraft.storagedrawers.integration.RefinedRelocation;
@@ -54,6 +55,11 @@ public class BlockSortingDrawers extends BlockDrawers
return true;
}
@Override
public BlockType retrimType () {
return BlockType.DrawersSorting;
}
@Override
public TileSortingDrawersStandard createNewTileEntity (World world, int meta) {
return new TileSortingDrawersStandard();
@@ -0,0 +1,40 @@
package com.jaquadro.minecraft.storagedrawers.integration.thermalfoundation;
import com.jaquadro.minecraft.storagedrawers.api.security.ISecurityProvider;
import com.jaquadro.minecraft.storagedrawers.api.storage.attribute.IProtectable;
import com.jaquadro.minecraft.storagedrawers.integration.ThermalFoundation;
import com.jaquadro.minecraft.storagedrawers.security.DefaultSecurityProvider;
import com.mojang.authlib.GameProfile;
import net.minecraft.server.MinecraftServer;
public class CoFHSecurityProvider implements ISecurityProvider
{
ThermalFoundation foundation;
private DefaultSecurityProvider defaultProvider = new DefaultSecurityProvider();
public CoFHSecurityProvider (ThermalFoundation foundation) {
this.foundation = foundation;
}
@Override
public String getProviderID () {
return "cofh";
}
@Override
public boolean hasOwnership (GameProfile profile, IProtectable target) {
return defaultProvider.hasOwnership(profile, target);
}
@Override
public boolean hasAccess (GameProfile profile, IProtectable target) {
if (target.getOwner() == null)
return true;
GameProfile ownerProfile = MinecraftServer.getServer().func_152358_ax().func_152652_a(target.getOwner());
if (ownerProfile == null)
return false;
return foundation.playerHasAccess(profile.getName(), ownerProfile);
}
}
@@ -0,0 +1,97 @@
package com.jaquadro.minecraft.storagedrawers.item;
import com.google.common.collect.Multimap;
import com.jaquadro.minecraft.storagedrawers.StorageDrawers;
import com.jaquadro.minecraft.storagedrawers.core.ModCreativeTabs;
import com.jaquadro.minecraft.storagedrawers.integration.IntegrationRegistry;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.SharedMonsterAttributes;
import net.minecraft.entity.ai.attributes.AttributeModifier;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.IIcon;
import net.minecraft.util.MathHelper;
import net.minecraft.util.StatCollector;
import java.util.List;
public class ItemPersonalKey extends Item
{
public static final String[] iconNames = new String[] { "default", "cofh" };
@SideOnly(Side.CLIENT)
private IIcon[] icons;
public ItemPersonalKey (String name) {
setUnlocalizedName(name);
setCreativeTab(ModCreativeTabs.tabStorageDrawers);
setHasSubtypes(true);
setMaxDamage(0);
}
@Override
@SideOnly(Side.CLIENT)
public IIcon getIconFromDamage (int meta) {
return icons[MathHelper.clamp_int(meta, 0, iconNames.length - 1)];
}
@Override
public String getUnlocalizedName (ItemStack itemStack) {
int meta = MathHelper.clamp_int(itemStack.getItemDamage(), 0, iconNames.length - 1);
if (iconNames[meta] == null)
return super.getUnlocalizedName();
return super.getUnlocalizedName() + "." + iconNames[meta];
}
@Override
@SideOnly(Side.CLIENT)
public void addInformation (ItemStack itemStack, EntityPlayer player, List list, boolean par4) {
String name = getUnlocalizedName(itemStack);
list.add(StatCollector.translateToLocalFormatted(name + ".description"));
}
@SideOnly(Side.CLIENT)
public boolean isFull3D()
{
return true;
}
@Override
public Multimap getAttributeModifiers (ItemStack item) {
Multimap multimap = super.getAttributeModifiers(item);
multimap.put(SharedMonsterAttributes.attackDamage.getAttributeUnlocalizedName(), new AttributeModifier(field_111210_e, "Weapon modifier", (double)2, 0));
return multimap;
}
@Override
@SideOnly(Side.CLIENT)
public void getSubItems (Item item, CreativeTabs creativeTabs, List list) {
list.add(new ItemStack(item, 1, 0));
if (StorageDrawers.config.cache.enableThermalFoundationIntegration && IntegrationRegistry.instance().isModLoaded("ThermalFoundation"))
list.add(new ItemStack(item, 1, 1));
}
@Override
@SideOnly(Side.CLIENT)
public void registerIcons (IIconRegister register) {
icons = new IIcon[iconNames.length];
for (int i = 0, n = iconNames.length; i < n; i++) {
if (iconNames[i] != null)
icons[i] = register.registerIcon(StorageDrawers.MOD_ID + ":drawer_key_personal_" + iconNames[i]);
}
}
public String getSecurityProviderKey (int meta) {
switch (meta) {
case 0: return null;
case 1: return "cofh";
default: return null;
}
}
}
@@ -1,8 +1,10 @@
package com.jaquadro.minecraft.storagedrawers.item;
import com.jaquadro.minecraft.storagedrawers.StorageDrawers;
import com.jaquadro.minecraft.storagedrawers.api.storage.attribute.IProtectable;
import com.jaquadro.minecraft.storagedrawers.api.storage.attribute.ISealable;
import com.jaquadro.minecraft.storagedrawers.core.ModCreativeTabs;
import com.jaquadro.minecraft.storagedrawers.security.SecurityManager;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.entity.player.EntityPlayer;
@@ -37,6 +39,11 @@ public class ItemTape extends Item
return false;
TileEntity tile = world.getTileEntity(x, y, z);
if (tile instanceof IProtectable) {
if (!SecurityManager.hasOwnership(player.getGameProfile(), (IProtectable)tile))
return false;
}
if (tile instanceof ISealable) {
ISealable tileseal = (ISealable) tile;
if (tileseal.isSealed())
@@ -1,8 +1,11 @@
package com.jaquadro.minecraft.storagedrawers.item;
import com.jaquadro.minecraft.storagedrawers.block.BlockDrawers;
import net.minecraft.block.Block;
import net.minecraft.block.BlockWood;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemMultiTexture;
import net.minecraft.world.World;
public class ItemTrim extends ItemMultiTexture
{
@@ -13,4 +16,13 @@ public class ItemTrim extends ItemMultiTexture
protected ItemTrim (Block block, String[] names) {
super(block, block, names);
}
@Override
public boolean doesSneakBypassUse (World world, int x, int y, int z, EntityPlayer player) {
Block block = world.getBlock(x, y, z);
if (block instanceof BlockDrawers && ((BlockDrawers) block).retrimType() != null)
return true;
return false;
}
}
@@ -0,0 +1,26 @@
package com.jaquadro.minecraft.storagedrawers.security;
import com.jaquadro.minecraft.storagedrawers.api.security.ISecurityProvider;
import com.jaquadro.minecraft.storagedrawers.api.storage.attribute.IProtectable;
import com.mojang.authlib.GameProfile;
public class DefaultSecurityProvider implements ISecurityProvider
{
@Override
public String getProviderID () {
return null;
}
@Override
public boolean hasOwnership (GameProfile profile, IProtectable target) {
if (target == null || profile == null)
return false;
return target.getOwner() == null || target.getOwner().equals(profile.getId());
}
@Override
public boolean hasAccess (GameProfile profile, IProtectable target) {
return hasOwnership(profile, target);
}
}
@@ -0,0 +1,32 @@
package com.jaquadro.minecraft.storagedrawers.security;
import com.jaquadro.minecraft.storagedrawers.api.security.ISecurityProvider;
import com.jaquadro.minecraft.storagedrawers.api.storage.attribute.IProtectable;
import com.mojang.authlib.GameProfile;
public class SecurityManager
{
private static ISecurityProvider defaultProvider = new DefaultSecurityProvider();
public static boolean hasOwnership (GameProfile profile, IProtectable target) {
if (target == null || profile == null)
return false;
ISecurityProvider provider = target.getSecurityProvider();
if (provider == null)
provider = defaultProvider;
return provider.hasOwnership(profile, target);
}
public static boolean hasAccess (GameProfile profile, IProtectable target) {
if (target == null || profile == null)
return false;
ISecurityProvider provider = target.getSecurityProvider();
if (provider == null)
provider = defaultProvider;
return provider.hasAccess(profile, target);
}
}
@@ -0,0 +1,19 @@
package com.jaquadro.minecraft.storagedrawers.security;
import com.jaquadro.minecraft.storagedrawers.api.security.ISecurityProvider;
import java.util.HashMap;
import java.util.Map;
public class SecurityRegistry
{
private Map<String, ISecurityProvider> registry = new HashMap<String, ISecurityProvider>();
public void registerProvider (ISecurityProvider provider) {
registry.put(provider.getProviderID(), provider);
}
public ISecurityProvider getProvider (String name) {
return registry.get(name);
}
}
@@ -0,0 +1,63 @@
package com.jaquadro.minecraft.storagedrawers.util;
import net.minecraft.item.Item;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class ItemMetaListRegistry<E>
{
private ItemMetaRegistry<List<E>> registry;
private boolean compactTopLevel;
public ItemMetaListRegistry () {
this(false);
}
public ItemMetaListRegistry (boolean compactTopLevel) {
this.registry = new ItemMetaRegistry<List<E>>(compactTopLevel);
this.compactTopLevel = compactTopLevel;
}
public void register (Item item, int meta, E entry) {
List<E> list = registry.getEntry(item, meta);
if (list == null) {
list = new ArrayList<E>();
registry.register(item, meta, list);
}
list.add(entry);
}
public List<E> getEntries (Item item, int meta) {
return registry.getEntry(item, meta);
}
public void remove (Item item, int meta) {
registry.remove(item, meta);
}
public void clear (Item item, int meta) {
List<E> list = registry.getEntry(item, meta);
if (list != null)
list.clear();
}
public void clear (Item item) {
for (Map.Entry<Integer, List<E>> map : registry.entrySet(item))
map.getValue().clear();
}
public void clear () {
for (Map.Entry<Item, Map<Integer, List<E>>> map : registry.entrySet()) {
for (List<E> list : map.getValue().values())
list.clear();
}
}
public Set<Map.Entry<Item, Map<Integer, List<E>>>> entrySet () {
return registry.entrySet();
}
}
@@ -0,0 +1,83 @@
package com.jaquadro.minecraft.storagedrawers.util;
import net.minecraft.item.Item;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class ItemMetaRegistry<E>
{
private Map<Item, Map<Integer, E>> registry;
private boolean compactTopLevel;
public ItemMetaRegistry () {
registry = new HashMap<Item, Map<Integer, E>>();
}
public ItemMetaRegistry (boolean compactTopLevel) {
this();
this.compactTopLevel = compactTopLevel;
}
public void register (Item item, int meta, E entry) {
Map<Integer, E> metamap = registry.get(item);
if (metamap == null) {
metamap = new HashMap<Integer, E>();
registry.put(item, metamap);
}
metamap.put(meta, entry);
}
public E getEntry (Item item, int meta) {
Map<Integer, E> metamap = registry.get(item);
if (metamap == null)
return null;
return metamap.get(meta);
}
public void remove (Item item, int meta) {
Map<Integer, E> metamap = registry.get(item);
if (metamap == null)
return;
metamap.remove(meta);
if (compactTopLevel && metamap.isEmpty())
registry.remove(item);
}
public void clear (Item item) {
Map<Integer, E> metamap = registry.get(item);
if (metamap == null)
return;
metamap.clear();
if (compactTopLevel)
registry.remove(item);
}
public void clear () {
if (compactTopLevel)
registry.clear();
else {
for (Item item : registry.keySet())
clear(item);
}
}
public Set<Map.Entry<Item, Map<Integer, E>>> entrySet () {
return registry.entrySet();
}
public Set<Map.Entry<Integer, E>> entrySet (Item item) {
Map<Integer, E> metamap = registry.get(item);
if (metamap == null) {
metamap = new HashMap<Integer, E>();
registry.put(item, metamap);
}
return metamap.entrySet();
}
}
@@ -0,0 +1,133 @@
package com.jaquadro.minecraft.storagedrawers.util;
import com.google.common.base.Objects;
import cpw.mods.fml.common.registry.GameData;
import cpw.mods.fml.common.registry.GameRegistry;
import net.minecraft.block.Block;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraftforge.oredict.OreDictionary;
public final class UniqueMetaIdentifier
{
public final String modId;
public final String name;
public final int meta;
private GameRegistry.UniqueIdentifier cachedUID;
public UniqueMetaIdentifier (String modId, String name) {
this.modId = modId;
this.name = name;
this.meta = OreDictionary.WILDCARD_VALUE;
}
public UniqueMetaIdentifier (String modId, String name, int meta) {
this.modId = modId;
this.name = name;
this.meta = meta;
}
public UniqueMetaIdentifier (String qualifiedName, int meta) {
String[] parts = qualifiedName.split(":");
this.modId = parts[0];
this.name = parts[1];
this.meta = meta;
}
public UniqueMetaIdentifier (String compoundName) {
String[] parts1 = compoundName.split(";");
String[] parts2 = parts1[0].split(":");
this.modId = parts2[0];
if (parts2.length >= 2)
this.name = parts2[1];
else
this.name = "";
if (parts1.length >= 2)
this.meta = Integer.parseInt(parts1[1]);
else if (parts2.length > 2)
this.meta = Integer.parseInt(parts2[parts2.length - 1]);
else
this.meta = OreDictionary.WILDCARD_VALUE;
}
public UniqueMetaIdentifier (String compoundName, char separator) {
String[] parts1 = compoundName.split("[ ]*" + separator + "[ ]*");
String[] parts2 = parts1[0].split(":");
this.modId = parts2[0];
if (parts2.length >= 2)
this.name = parts2[1];
else
this.name = "";
if (parts1.length >= 2)
this.meta = Integer.parseInt(parts1[1]);
else
this.meta = OreDictionary.WILDCARD_VALUE;
}
public GameRegistry.UniqueIdentifier getUniqueIdentifier () {
if (cachedUID == null)
cachedUID = new GameRegistry.UniqueIdentifier(modId + ":" + name);
return cachedUID;
}
public Block getBlock () {
return GameRegistry.findBlock(modId, name);
}
public Item getItem () {
return GameRegistry.findItem(modId, name);
}
@Override
public boolean equals (Object obj) {
if (obj == null)
return false;
if (obj.getClass() != getClass())
return false;
final UniqueMetaIdentifier other = (UniqueMetaIdentifier) obj;
return Objects.equal(modId, other.modId)
&& Objects.equal(name, other.name)
&& meta == other.meta;
}
@Override
public int hashCode () {
return Objects.hashCode(modId, name) ^ (meta * 37);
}
@Override
public String toString () {
return String.format("%s:%s;%d", modId, name, meta);
}
public static UniqueMetaIdentifier createFor (ItemStack itemStack) {
if (itemStack.getItem() == null)
return null;
String name = GameData.getItemRegistry().getNameForObject(itemStack.getItem());
return new UniqueMetaIdentifier(name, itemStack.getItemDamage());
}
public static UniqueMetaIdentifier createFor (Block block, int meta) {
if (block == null)
return null;
String name = GameData.getBlockRegistry().getNameForObject(block);
return new UniqueMetaIdentifier(name, meta);
}
public static UniqueMetaIdentifier createFor (Block block) {
if (block == null)
return null;
String name = GameData.getBlockRegistry().getNameForObject(block);
return new UniqueMetaIdentifier(name);
}
}
@@ -0,0 +1,55 @@
package com.jaquadro.minecraft.storagedrawers.util;
import net.minecraftforge.oredict.OreDictionary;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class UniqueMetaRegistry<E>
{
private Map<UniqueMetaIdentifier, E> registry;
public UniqueMetaRegistry () {
registry = new HashMap<UniqueMetaIdentifier, E>();
}
public void register (UniqueMetaIdentifier id, E entry) {
registry.put(id, entry);
}
public E getEntry (UniqueMetaIdentifier id) {
if (id == null)
return null;
if (registry.containsKey(id))
return registry.get(id);
if (id.meta != OreDictionary.WILDCARD_VALUE) {
id = new UniqueMetaIdentifier(id.modId, id.name);
if (registry.containsKey(id))
return registry.get(id);
if (!id.name.isEmpty()) {
id = new UniqueMetaIdentifier(id.modId);
if (registry.containsKey(id))
return registry.get(id);
}
}
return null;
}
public void remove (UniqueMetaIdentifier id) {
if (id != null)
registry.remove(id);
}
public Set<Map.Entry<UniqueMetaIdentifier, E>> entrySet () {
return registry.entrySet();
}
public void clear () {
registry.clear();
}
}