diff --git a/client/src/main/java/client/renderer/blockmodel/ModelBakery.java b/client/src/main/java/client/renderer/blockmodel/ModelBakery.java index 626421c3..d86e3c24 100755 --- a/client/src/main/java/client/renderer/blockmodel/ModelBakery.java +++ b/client/src/main/java/client/renderer/blockmodel/ModelBakery.java @@ -21,7 +21,6 @@ import common.item.Item; import common.model.ModelRotation; import common.util.Facing; import common.util.Pair; -import common.util.BaseMapping; import common.world.State; public abstract class ModelBakery @@ -46,14 +45,14 @@ public abstract class ModelBakery } } - public static BaseMapping setupModelRegistry(TextureMap textureMap, + public static Map setupModelRegistry(TextureMap textureMap, Map map) { final Map sprites = Maps.newHashMap(); Map models = Maps.newLinkedHashMap(); List variants = Lists.newArrayList(); FaceBakery faceBakery = new FaceBakery(); - BaseMapping bakedRegistry = new BaseMapping(); + Map bakedRegistry = Maps.newHashMap(); List itemLocations = Lists.newArrayList(); models.put(MISSING, (ModelBlock)new ModelBlock(null).add().all()); variants.add(MISSING); @@ -172,7 +171,7 @@ public abstract class ModelBakery if (modelblock != null) { - bakedRegistry.putObject(modelresourcelocation, bakeModel(sprites, faceBakery, textureMap.getMissingSprite(), + bakedRegistry.put(modelresourcelocation, bakeModel(sprites, faceBakery, textureMap.getMissingSprite(), modelblock, modelblock.getRotation(), modelblock.isUvLocked())); } else @@ -189,11 +188,11 @@ public abstract class ModelBakery { if (modelblock1.getParent() == MODEL_ENTITY) { - bakedRegistry.putObject(entry, new BuiltInModel(modelblock1.getTransform())); + bakedRegistry.put(entry, new BuiltInModel(modelblock1.getTransform())); } else { - bakedRegistry.putObject(entry, bakeModel(sprites, faceBakery, textureMap.getMissingSprite(), + bakedRegistry.put(entry, bakeModel(sprites, faceBakery, textureMap.getMissingSprite(), modelblock1, ModelRotation.X0_Y0, false)); } } diff --git a/client/src/main/java/client/renderer/blockmodel/ModelManager.java b/client/src/main/java/client/renderer/blockmodel/ModelManager.java index 08b10b43..d372f2b1 100755 --- a/client/src/main/java/client/renderer/blockmodel/ModelManager.java +++ b/client/src/main/java/client/renderer/blockmodel/ModelManager.java @@ -11,7 +11,6 @@ import common.block.Block; import common.collect.Maps; import common.init.BlockRegistry; import common.properties.Property; -import common.util.BaseMapping; import common.world.State; public class ModelManager @@ -21,7 +20,7 @@ public class ModelManager private final Map mappers = Maps.newIdentityHashMap(); private final Set builtin = Collections.newSetFromMap(Maps.newIdentityHashMap()); - private BaseMapping modelRegistry; + private Map modelRegistry; private IBakedModel defaultModel; public ModelManager(TextureMap textures) @@ -43,7 +42,7 @@ public class ModelManager public void onReload() { this.modelRegistry = ModelBakery.setupModelRegistry(this.texMap, this.getMap()); - this.defaultModel = this.modelRegistry.getObject(ModelBakery.MISSING); + this.defaultModel = this.modelRegistry.get(ModelBakery.MISSING); this.reloadModels(); } @@ -55,7 +54,7 @@ public class ModelManager } else { - IBakedModel ibakedmodel = this.modelRegistry.getObject(modelLocation); + IBakedModel ibakedmodel = this.modelRegistry.get(modelLocation); return ibakedmodel == null ? this.defaultModel : ibakedmodel; } } diff --git a/common/src/main/java/common/init/BlockRegistry.java b/common/src/main/java/common/init/BlockRegistry.java index e608d0f8..7a874e9b 100755 --- a/common/src/main/java/common/init/BlockRegistry.java +++ b/common/src/main/java/common/init/BlockRegistry.java @@ -132,13 +132,13 @@ import common.item.CheatTab; import common.log.Log; import common.model.TextureAnimation; import common.util.ObjectIntIdentityMap; -import common.util.DefaultedMapping; +import common.util.Mapping; import common.util.Util; import common.world.State; public abstract class BlockRegistry { private static final String AIR_ID = "air"; - public static final DefaultedMapping REGISTRY = new DefaultedMapping(AIR_ID); + public static final Mapping REGISTRY = new Mapping(AIR_ID); public static final ObjectIntIdentityMap STATEMAP = new ObjectIntIdentityMap(); private static int nextBlockId = 1; @@ -204,7 +204,7 @@ public abstract class BlockRegistry { static void register() { REGISTRY.register(0, BlockRegistry.AIR_ID, (new BlockAir()).setDisplay("Luft")); registerBlocks(); - REGISTRY.validateKey(); + REGISTRY.finish(); for(Block block : REGISTRY) { if(block != Blocks.air diff --git a/common/src/main/java/common/init/ItemRegistry.java b/common/src/main/java/common/init/ItemRegistry.java index d16df7d8..a0c71eae 100755 --- a/common/src/main/java/common/init/ItemRegistry.java +++ b/common/src/main/java/common/init/ItemRegistry.java @@ -551,6 +551,8 @@ public abstract class ItemRegistry { // Log.info("Block " + BlockRegistry.getNameFromBlock(block) + " hat kein Item"); } + REGISTRY.finish(); + Log.SYSTEM.debug("%d Gegenstände registriert", nextItemId); } } diff --git a/common/src/main/java/common/util/BaseMapping.java b/common/src/main/java/common/util/BaseMapping.java deleted file mode 100755 index 4b47f083..00000000 --- a/common/src/main/java/common/util/BaseMapping.java +++ /dev/null @@ -1,40 +0,0 @@ -package common.util; - -import java.util.Collections; -import java.util.Iterator; -import java.util.Map; -import java.util.Set; - -import common.collect.Maps; - -public class BaseMapping implements Iterable { - protected final Map mapping = this.createUnderlyingMap(); - - protected Map createUnderlyingMap() { - return Maps.newHashMap(); - } - - public V getObject(K name) { - return this.mapping.get(name); - } - - public void putObject(K key, V value) { - if(key == null) - throw new NullPointerException("Schlüssel ist null"); - if(value == null) - throw new NullPointerException("Wert ist null"); - this.mapping.put(key, value); - } - - public Set getKeys() { - return Collections.unmodifiableSet(this.mapping.keySet()); - } - - public boolean containsKey(K key) { - return this.mapping.containsKey(key); - } - - public Iterator iterator() { - return this.mapping.values().iterator(); - } -} diff --git a/common/src/main/java/common/util/DefaultedMapping.java b/common/src/main/java/common/util/DefaultedMapping.java deleted file mode 100755 index 3e8b5c74..00000000 --- a/common/src/main/java/common/util/DefaultedMapping.java +++ /dev/null @@ -1,40 +0,0 @@ -package common.util; - -public class DefaultedMapping extends Mapping { - private final K defaultKey; - - private V defaultValue; - - public DefaultedMapping(K def) { - this.defaultKey = def; - } - - public void register(int id, K key, V value) { - if(this.defaultKey.equals(key)) - this.defaultValue = value; - super.register(id, key, value); - } - - public void validateKey() { - if(this.defaultValue == null) - throw new NullPointerException("Standard-Wert ist null"); - } - - public V getObject(K name) { - V v = super.getObject(name); - return v == null ? this.defaultValue : v; - } - - public V getObjectExact(K name) { - return super.getObject(name); - } - - public V getObjectById(int id) { - V v = super.getObjectById(id); - return v == null ? this.defaultValue : v; - } - - public V getObjectExact(int id) { - return super.getObjectById(id); - } -} diff --git a/common/src/main/java/common/util/Mapping.java b/common/src/main/java/common/util/Mapping.java index bf396491..c3f8c5fb 100755 --- a/common/src/main/java/common/util/Mapping.java +++ b/common/src/main/java/common/util/Mapping.java @@ -1,36 +1,66 @@ package common.util; +import java.util.Collections; import java.util.Iterator; import java.util.Map; +import java.util.Set; import common.collect.BiMap; import common.collect.HashBiMap; -public class Mapping extends BaseMapping implements IObjectIntIterable { - protected final ObjectIntIdentityMap idmap = new ObjectIntIdentityMap(); - protected final Map namemap; +public class Mapping implements Iterable, IObjectIntIterable { + private final Map mapping = HashBiMap.create(); + private final ObjectIntIdentityMap idmap = new ObjectIntIdentityMap(); + private final Map namemap; + private final K defaultKey; + + private V defaultValue; + private boolean registered; + + public Mapping(K def) { + this.namemap = ((BiMap)this.mapping).inverse(); + this.defaultKey = def; + } public Mapping() { - this.namemap = ((BiMap)this.mapping).inverse(); + this(null); } public void register(int id, K key, V value) { + if(this.registered) + throw new IllegalStateException("Es können keine neuen Werte registriert werden"); + if(key == null) + throw new NullPointerException("Schlüssel ist null"); + if(value == null) + throw new NullPointerException("Wert ist null"); if(this.mapping.containsKey(key)) throw new IllegalArgumentException( "Schlüssel " + String.valueOf(key) + " ist bereits mit ID " + this.idmap.get(this.mapping.get(key)) + " registriert"); if(this.idmap.getByValue(id) != null) throw new IllegalArgumentException("ID " + id + " ist bereits mit Name " + this.namemap.get(this.idmap.getByValue(id)) + " registriert"); - this.idmap.put(value, id); - this.putObject(key, value); + this.mapping.put(key, value); + if(key.equals(this.defaultKey)) + this.defaultValue = value; } - protected Map createUnderlyingMap() { - return HashBiMap.create(); + public void finish() { + if(this.defaultKey != null && this.defaultValue == null) + throw new NullPointerException("Standard-Wert zu Standard-Schlüssel ist null"); + this.registered = true; + } + + public Set getKeys() { + return Collections.unmodifiableSet(this.mapping.keySet()); } public V getObject(K name) { - return super.getObject(name); + V v = this.mapping.get(name); + return v == null ? this.defaultValue : v; + } + + public V getObjectExact(K name) { + return this.mapping.get(name); } public K getNameForObject(V value) { @@ -38,7 +68,7 @@ public class Mapping extends BaseMapping implements IObjectIntIterab } public boolean containsKey(K key) { - return super.containsKey(key); + return this.mapping.containsKey(key); } public int getIDForObject(V value) { @@ -46,6 +76,11 @@ public class Mapping extends BaseMapping implements IObjectIntIterab } public V getObjectById(int id) { + V v = this.idmap.getByValue(id); + return v == null ? this.defaultValue : v; + } + + public V getObjectExact(int id) { return this.idmap.getByValue(id); }