Fixes #2525: Break particles for all attachments of a cable bus.

This commit is contained in:
Sebastian Hartte
2016-10-29 19:44:10 +02:00
parent 6b90c70755
commit bd97a6edd5
18 changed files with 69 additions and 22 deletions
@@ -303,7 +303,9 @@ public class BlockCableBus extends AEBaseTileBlock
CableBusRenderState renderState = cb.getRenderState(); CableBusRenderState renderState = cb.getRenderState();
for( TextureAtlasSprite texture : cableBusModel.getParticleTextures( renderState ) ) List<TextureAtlasSprite> textures = cableBusModel.getParticleTextures( renderState );
if( !textures.isEmpty() )
{ {
// Shamelessly inspired by ParticleManager.addBlockDestroyEffects // Shamelessly inspired by ParticleManager.addBlockDestroyEffects
for( int j = 0; j < 4; ++j ) for( int j = 0; j < 4; ++j )
@@ -312,6 +314,9 @@ public class BlockCableBus extends AEBaseTileBlock
{ {
for( int l = 0; l < 4; ++l ) for( int l = 0; l < 4; ++l )
{ {
// Randomly select one of the textures if the cable bus has more than just one possibility here
TextureAtlasSprite texture = Platform.pickRandom( textures );
double d0 = (double) pos.getX() + ( (double) j + 0.5D ) / 4.0D; double d0 = (double) pos.getX() + ( (double) j + 0.5D ) / 4.0D;
double d1 = (double) pos.getY() + ( (double) k + 0.5D ) / 4.0D; double d1 = (double) pos.getY() + ( (double) k + 0.5D ) / 4.0D;
double d2 = (double) pos.getZ() + ( (double) l + 0.5D ) / 4.0D; double d2 = (double) pos.getZ() + ( (double) l + 0.5D ) / 4.0D;
@@ -28,11 +28,13 @@ import java.util.Map;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import net.minecraft.block.state.IBlockState; import net.minecraft.block.state.IBlockState;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.block.model.BakedQuad; import net.minecraft.client.renderer.block.model.BakedQuad;
import net.minecraft.client.renderer.block.model.IBakedModel; import net.minecraft.client.renderer.block.model.IBakedModel;
import net.minecraft.client.renderer.block.model.ItemCameraTransforms; import net.minecraft.client.renderer.block.model.ItemCameraTransforms;
import net.minecraft.client.renderer.block.model.ItemOverrideList; import net.minecraft.client.renderer.block.model.ItemOverrideList;
import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.client.renderer.texture.TextureMap;
import net.minecraft.util.BlockRenderLayer; import net.minecraft.util.BlockRenderLayer;
import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumFacing;
import net.minecraft.util.ResourceLocation; import net.minecraft.util.ResourceLocation;
@@ -55,6 +57,8 @@ public class CableBusBakedModel implements IBakedModel
private final TextureAtlasSprite particleTexture; private final TextureAtlasSprite particleTexture;
private final TextureMap textureMap = Minecraft.getMinecraft().getTextureMapBlocks();
CableBusBakedModel( CableBuilder cableBuilder, FacadeBuilder facadeBuilder, Map<ResourceLocation, IBakedModel> partModels, TextureAtlasSprite particleTexture ) CableBusBakedModel( CableBuilder cableBuilder, FacadeBuilder facadeBuilder, Map<ResourceLocation, IBakedModel> partModels, TextureAtlasSprite particleTexture )
{ {
this.cableBuilder = cableBuilder; this.cableBuilder = cableBuilder;
@@ -255,17 +259,39 @@ public class CableBusBakedModel implements IBakedModel
CableCoreType coreType = CableCoreType.fromCableType( renderState.getCableType() ); CableCoreType coreType = CableCoreType.fromCableType( renderState.getCableType() );
AEColor cableColor = renderState.getCableColor(); AEColor cableColor = renderState.getCableColor();
List<TextureAtlasSprite> result = new ArrayList<>();
if( coreType != null ) if( coreType != null )
{ {
return Collections.singletonList( cableBuilder.getCoreTexture( coreType, cableColor ) ); result.add( cableBuilder.getCoreTexture( coreType, cableColor ) );
} }
else
// If no core is present, just use the first part that comes into play
for( EnumFacing side : renderState.getAttachments().keySet() )
{ {
return Collections.emptyList(); List<ResourceLocation> models = renderState.getAttachments().get( side );
for( ResourceLocation model : models )
{
IBakedModel bakedModel = partModels.get( model );
if( bakedModel == null )
{
throw new IllegalStateException( "Trying to use an unregistered part model: " + model );
}
TextureAtlasSprite particleTexture = bakedModel.getParticleTexture();
// If a part sub-model has no particle texture (indicated by it being the missing texture), don't add it,
// so we don't get ugly missing texture break particles.
if ( textureMap.getMissingSprite() != particleTexture )
{
result.add( particleTexture );
}
}
} }
// TODO: Add break particles even for the attachments, not just the cable return result;
} }
private static CableBusRenderState getRenderingState( IBlockState state ) private static CableBusRenderState getRenderingState( IBlockState state )
@@ -1,6 +1,7 @@
{ {
"textures": { "textures": {
"0": "appliedenergistics2:parts/cable_anchor" "0": "appliedenergistics2:parts/cable_anchor",
"particle": "appliedenergistics2:parts/cable_anchor"
}, },
"elements": [ "elements": [
{ {
@@ -1,6 +1,7 @@
{ {
"textures": { "textures": {
"0": "appliedenergistics2:parts/cable_anchor" "0": "appliedenergistics2:parts/cable_anchor",
"particle": "appliedenergistics2:parts/cable_anchor"
}, },
"elements": [ "elements": [
{ {
@@ -7,7 +7,8 @@
"l1": "appliedenergistics2:parts/crafting_terminal/l1", "l1": "appliedenergistics2:parts/crafting_terminal/l1",
"l2": "appliedenergistics2:parts/crafting_terminal/l2", "l2": "appliedenergistics2:parts/crafting_terminal/l2",
"SidesStatus": "appliedenergistics2:parts/crafting_terminal/sidesstatus", "SidesStatus": "appliedenergistics2:parts/crafting_terminal/sidesstatus",
"Backlights": "appliedenergistics2:parts/crafting_terminal/backlights" "Backlights": "appliedenergistics2:parts/crafting_terminal/backlights",
"particle": "appliedenergistics2:parts/crafting_terminal/back"
}, },
"elements": [ "elements": [
{ {
@@ -3,7 +3,8 @@
"sides": "appliedenergistics2:parts/monitor_sides", "sides": "appliedenergistics2:parts/monitor_sides",
"sidesStatus": "appliedenergistics2:parts/monitor_sides_status", "sidesStatus": "appliedenergistics2:parts/monitor_sides_status",
"back": "appliedenergistics2:parts/monitor_back", "back": "appliedenergistics2:parts/monitor_back",
"front": "appliedenergistics2:parts/monitor_front" "front": "appliedenergistics2:parts/monitor_front",
"particle": "appliedenergistics2:parts/monitor_back"
}, },
"elements": [ "elements": [
{ {
@@ -3,7 +3,8 @@
"sides": "appliedenergistics2:parts/export_bus_sides", "sides": "appliedenergistics2:parts/export_bus_sides",
"sidesStatus": "appliedenergistics2:parts/monitor_sides_status", "sidesStatus": "appliedenergistics2:parts/monitor_sides_status",
"back": "appliedenergistics2:parts/monitor_back", "back": "appliedenergistics2:parts/monitor_back",
"front": "appliedenergistics2:items/part/export_bus" "front": "appliedenergistics2:items/part/export_bus",
"particle": "appliedenergistics2:parts/monitor_back"
}, },
"elements": [ "elements": [
{ {
@@ -3,7 +3,8 @@
"sides": "appliedenergistics2:parts/import_bus_sides", "sides": "appliedenergistics2:parts/import_bus_sides",
"sidesStatus": "appliedenergistics2:parts/monitor_sides_status", "sidesStatus": "appliedenergistics2:parts/monitor_sides_status",
"back": "appliedenergistics2:parts/monitor_back", "back": "appliedenergistics2:parts/monitor_back",
"front": "appliedenergistics2:items/part/import_bus" "front": "appliedenergistics2:items/part/import_bus",
"particle": "appliedenergistics2:parts/monitor_back"
}, },
"elements": [ "elements": [
{ {
@@ -3,7 +3,8 @@
"sides": "appliedenergistics2:parts/export_bus_sides", "sides": "appliedenergistics2:parts/export_bus_sides",
"sidesStatus": "appliedenergistics2:parts/monitor_sides_status", "sidesStatus": "appliedenergistics2:parts/monitor_sides_status",
"back": "appliedenergistics2:parts/monitor_back", "back": "appliedenergistics2:parts/monitor_back",
"front": "appliedenergistics2:items/part/interface" "front": "appliedenergistics2:items/part/interface",
"particle": "appliedenergistics2:parts/monitor_back"
}, },
"elements": [ "elements": [
{ {
@@ -1,7 +1,8 @@
{ {
"textures": { "textures": {
"emitter": "appliedenergistics2:parts/level_emitter_off", "emitter": "appliedenergistics2:parts/level_emitter_off",
"sides": "appliedenergistics2:parts/monitor_sides" "sides": "appliedenergistics2:parts/monitor_sides",
"particle": "appliedenergistics2:parts/level_emitter_off"
}, },
"elements": [ "elements": [
{ {
@@ -2,7 +2,8 @@
"uvlMarker": true, "uvlMarker": true,
"ambientocclusion": false, "ambientocclusion": false,
"textures": { "textures": {
"emitter": "appliedenergistics2:parts/level_emitter_on" "emitter": "appliedenergistics2:parts/level_emitter_on",
"particle": "appliedenergistics2:parts/level_emitter_on"
}, },
"elements": [ "elements": [
{ {
@@ -3,7 +3,8 @@
"textures": { "textures": {
"sides": "appliedenergistics2:parts/monitor_sides", "sides": "appliedenergistics2:parts/monitor_sides",
"back": "appliedenergistics2:parts/monitor_back", "back": "appliedenergistics2:parts/monitor_back",
"front": "appliedenergistics2:parts/monitor_front" "front": "appliedenergistics2:parts/monitor_front",
"particle": "appliedenergistics2:parts/monitor_back"
}, },
"elements": [ "elements": [
{ {
@@ -3,7 +3,8 @@
"front": "appliedenergistics2:items/part/p2p_tunnel_front", "front": "appliedenergistics2:items/part/p2p_tunnel_front",
"sides": "appliedenergistics2:parts/p2p_tunnel_sides", "sides": "appliedenergistics2:parts/p2p_tunnel_sides",
"back": "appliedenergistics2:items/part/p2p_tunnel_back", "back": "appliedenergistics2:items/part/p2p_tunnel_back",
"back2": "appliedenergistics2:items/part/p2p_tunnel_back2" "back2": "appliedenergistics2:items/part/p2p_tunnel_back2",
"particle": "appliedenergistics2:items/part/p2p_tunnel_back"
}, },
"elements": [ "elements": [
{ {
@@ -1,6 +1,7 @@
{ {
"textures": { "textures": {
"fiber": "appliedenergistics2:items/part/quartz_fiber" "fiber": "appliedenergistics2:items/part/quartz_fiber",
"particle": "appliedenergistics2:items/part/quartz_fiber"
}, },
"elements": [ "elements": [
{ {
@@ -3,7 +3,8 @@
"sides": "appliedenergistics2:parts/storage_bus_sides", "sides": "appliedenergistics2:parts/storage_bus_sides",
"sidesStatus": "appliedenergistics2:parts/monitor_sides_status", "sidesStatus": "appliedenergistics2:parts/monitor_sides_status",
"back": "appliedenergistics2:parts/storage_bus_back", "back": "appliedenergistics2:parts/storage_bus_back",
"front": "appliedenergistics2:items/part/storage_bus" "front": "appliedenergistics2:items/part/storage_bus",
"particle": "appliedenergistics2:parts/storage_bus_back"
}, },
"elements": [ "elements": [
{ {
@@ -1,7 +1,8 @@
{ {
"textures": { "textures": {
"bus": "appliedenergistics2:items/part/toggle_bus", "bus": "appliedenergistics2:items/part/toggle_bus",
"sides": "appliedenergistics2:parts/monitor_sides_status" "sides": "appliedenergistics2:parts/monitor_sides_status",
"particle": "appliedenergistics2:items/part/toggle_bus"
}, },
"elements": [ "elements": [
{ {
@@ -2,7 +2,8 @@
"textures": { "textures": {
"sides": "appliedenergistics2:parts/monitor_sides_status", "sides": "appliedenergistics2:parts/monitor_sides_status",
"back": "appliedenergistics2:parts/transition_plane_back", "back": "appliedenergistics2:parts/transition_plane_back",
"indicator": "appliedenergistics2:parts/monitor_sides_status_off" "indicator": "appliedenergistics2:parts/monitor_sides_status_off",
"particle": "appliedenergistics2:parts/transition_plane_back"
}, },
"elements": [ "elements": [
{ {
@@ -3,7 +3,8 @@
"textures": { "textures": {
"sides": "appliedenergistics2:parts/monitor_sides_status", "sides": "appliedenergistics2:parts/monitor_sides_status",
"back": "appliedenergistics2:parts/transition_plane_back", "back": "appliedenergistics2:parts/transition_plane_back",
"indicator": "appliedenergistics2:parts/monitor_sides_status_on" "indicator": "appliedenergistics2:parts/monitor_sides_status_on",
"particle": "appliedenergistics2:parts/transition_plane_back"
}, },
"elements": [ "elements": [
{ {