use of com.microsoft.Malmo.Schemas.NoteTypes in project malmo by Microsoft.
the class BlockDrawingHelper method setBlockState.
public void setBlockState(World w, BlockPos pos, XMLBlockState state) {
if (!state.isValid())
return;
// Do some depressingly necessary specific stuff here for different block types:
if (state.getBlock() instanceof BlockRailBase && state.variant != null) {
// Caller has specified a variant - is it a shape variant?
try {
ShapeTypes shape = ShapeTypes.fromValue(state.variant.getValue());
if (shape != null) {
// Yes, user has requested a particular shape.
// Minecraft won't honour this - and, worse, it may get altered by neighbouring pieces that are added later.
// So we don't bother trying to get this right now - we add it as a state check, and set it correctly
// after drawing has finished.
StateCheck sc = new StateCheck();
sc.pos = pos;
sc.desiredState = state.state;
sc.propertiesToCheck = new ArrayList<IProperty>();
sc.propertiesToCheck.add(((BlockRailBase) state.getBlock()).getShapeProperty());
this.checkList.add(sc);
}
} catch (IllegalArgumentException e) {
// Wasn't a shape variation. Ignore.
}
}
// Actually set the block state into the world:
w.setBlockState(pos, state.state);
// And now do the necessary post-placement processing:
if (state.type == BlockType.MOB_SPAWNER) {
TileEntity te = w.getTileEntity(pos);
if (// Ought to be!
te != null && te instanceof TileEntityMobSpawner) {
// Attempt to use the variation to control what type of mob this spawns:
try {
EntityTypes entvar = EntityTypes.fromValue(state.variant.getValue());
((TileEntityMobSpawner) te).getSpawnerBaseLogic().setEntityId(new ResourceLocation(entvar.value()));
} catch (Exception e) {
// Do nothing - user has requested a non-entity variant.
}
}
}
if (state.type == BlockType.NOTEBLOCK) {
TileEntity te = w.getTileEntity(pos);
if (te != null && te instanceof TileEntityNote && state.variant != null) {
try {
NoteTypes note = NoteTypes.fromValue(state.variant.getValue());
if (note != null) {
// User has requested a particular note.
((TileEntityNote) te).note = (byte) note.ordinal();
}
} catch (IllegalArgumentException e) {
// Wasn't a note variation. Ignore.
}
}
}
}
Aggregations