Model loading changes and a few more block fixes

This commit is contained in:
Thinkofname 2016-03-29 14:52:07 +01:00
parent af33935f47
commit 81dd2adc42
2 changed files with 18 additions and 28 deletions

View File

@ -83,7 +83,7 @@ impl Factory {
pub fn get_state_model<R: Rng, W: Write>(models: &Arc<RwLock<Factory>>, plugin: &str, name: &str, variant: &str, rng: &mut R,
snapshot: &world::Snapshot, x: i32, y: i32, z: i32, buf: &mut W) -> usize {
let key = Key(plugin.to_owned(), name.to_owned());
let mut missing = false;
let mut missing_variant = false;
{
let m = models.read().unwrap();
if let Some(model) = m.models.get(&key) {
@ -91,10 +91,11 @@ impl Factory {
let model = var.choose_model(rng);
return model.render(&*m, snapshot, x, y, z, buf);
}
missing = true;
missing_variant = true;
}
}
if !missing {
if !missing_variant {
// Whole model not loaded, try and load
let mut m = models.write().unwrap();
if !m.models.contains_key(&key) && !m.load_model(plugin, name) {
error!("Error loading model {}:{}", plugin, name);
@ -104,10 +105,12 @@ impl Factory {
let model = var.choose_model(rng);
return model.render(&*m, snapshot, x, y, z, buf);
}
missing_variant = true;
}
}
let ret = Factory::get_state_model(models, "steven", "missing_block", "normal", rng, snapshot, x, y, z, buf);
{
if !missing_variant {
// Still no model, replace with placeholder
let mut m = models.write().unwrap();
let model = m.models.get(&Key("steven".to_owned(), "missing_block".to_owned())).unwrap().clone();
m.models.insert(key, model);
@ -118,7 +121,10 @@ impl Factory {
fn load_model(&mut self, plugin: &str, name: &str) -> bool {
let file = match self.resources.read().unwrap().open(plugin, &format!("blockstates/{}.json", name)) {
Some(val) => val,
None => return false,
None => {
error!("Error missing block state for {}:{}", plugin, name);
return false;
},
};
let mdl: serde_json::Value = try_log!(serde_json::from_reader(file));
@ -135,8 +141,8 @@ impl Factory {
model.variants.insert(k.clone(), vars);
}
}
if let Some(multipart) = mdl.find("multipart").and_then(|v| v.as_array()) {
warn!("Found unhandled multipart {:?}", multipart);
if let Some(_multipart) = mdl.find("multipart").and_then(|v| v.as_array()) {
warn!("Found unhandled multipart for {}:{}", plugin, name);
}
self.models.insert(Key(plugin.to_owned(), name.to_owned()), model);

View File

@ -787,7 +787,7 @@ define_blocks! {
force_shade: false,
transparent: false,
},
model { ("minecraft", "stick_piston" ) },
model { ("minecraft", "sticky_piston" ) },
variant format!("extended={},facing={}", extended, facing.as_string()),
}
Web {
@ -1290,7 +1290,6 @@ define_blocks! {
transparent: false,
},
model { ("minecraft", "redstone_wire" ) },
variant format!("north={},south={},east={},west={},power={}", north.as_string(), south.as_string(), east.as_string(), west.as_string(), power),
}
DiamondOre {
props {},
@ -1830,7 +1829,6 @@ define_blocks! {
transparent: false,
},
model { ("minecraft", "cactus" ) },
variant format!("age={}", age),
}
Clay {
props {},
@ -1856,7 +1854,6 @@ define_blocks! {
transparent: false,
},
model { ("minecraft", "reeds" ) },
variant format!("age={}", age),
}
Jukebox {
props {
@ -1889,7 +1886,6 @@ define_blocks! {
transparent: false,
},
model { ("minecraft", "fence" ) },
variant format!("north={},south={},east={},west={}", north, south, east, west),
}
Pumpkin {
props {
@ -2264,7 +2260,6 @@ define_blocks! {
transparent: false,
},
model { ("minecraft", "iron_bars" ) },
variant format!("north={},south={},east={},west={}", north, south, east, west),
}
GlassPane {
props {},
@ -2490,7 +2485,6 @@ define_blocks! {
transparent: false,
},
model { ("minecraft", "nether_brick_fence" ) },
variant format!("north={},south={},east={},west={}", north, south, east, west),
}
NetherBrickStairs {
props {
@ -3016,7 +3010,6 @@ define_blocks! {
transparent: false,
},
model { ("minecraft", "cobblestone_wall" ) },
variant format!("north={},south={},east={},west={},up={},variant={}", north, south, east, west, up, variant.data()),
}
FlowerPot {
props {
@ -3453,14 +3446,11 @@ define_blocks! {
RailShape::AscendingNorth,
RailShape::AscendingSouth,
RailShape::AscendingEast,
RailShape::AscendingWest,
RailShape::NorthEast,
RailShape::NorthWest,
RailShape::SouthEast,
RailShape::SouthWest
RailShape::AscendingWest
],
powered: bool = [false, true],
},
data Some(shape.data()),
data Some(shape.data() | (if powered { 0x8 } else { 0x0 })),
material Material {
renderable: true,
never_cull: false,
@ -3469,7 +3459,7 @@ define_blocks! {
transparent: false,
},
model { ("minecraft", "activator_rail" ) },
variant format!("shape={}", shape.as_string()),
variant format!("powered={},shape={}", powered, shape.as_string()),
}
Dropper {
props {
@ -4140,7 +4130,6 @@ define_blocks! {
transparent: false,
},
model { ("minecraft", "spruce_fence" ) },
variant format!("north={},south={},east={},west={}", north, south, east, west),
}
BirchFence {
props {
@ -4158,7 +4147,6 @@ define_blocks! {
transparent: false,
},
model { ("minecraft", "birch_fence" ) },
variant format!("north={},south={},east={},west={}", north, south, east, west),
}
JungleFence {
props {
@ -4176,7 +4164,6 @@ define_blocks! {
transparent: false,
},
model { ("minecraft", "jungle_fence" ) },
variant format!("north={},south={},east={},west={}", north, south, east, west),
}
DarkOakFence {
props {
@ -4194,7 +4181,6 @@ define_blocks! {
transparent: false,
},
model { ("minecraft", "dark_oak_fence" ) },
variant format!("north={},south={},east={},west={}", north, south, east, west),
}
AcaciaFence {
props {
@ -4212,7 +4198,6 @@ define_blocks! {
transparent: false,
},
model { ("minecraft", "acacia_fence" ) },
variant format!("north={},south={},east={},west={}", north, south, east, west),
}
SpruceDoor {
props {
@ -4404,7 +4389,6 @@ define_blocks! {
transparent: false,
},
model { ("minecraft", "chorus_plant" ) },
variant format!("north={},south={},east={},west={},up={},down={}", north, south, east, west, up, down),
}
ChorusFlower {
props {