From bd97a6edd51ae9536704bca7955a6a8bd40a599d Mon Sep 17 00:00:00 2001 From: Sebastian Hartte Date: Sat, 29 Oct 2016 19:44:10 +0200 Subject: [PATCH] Fixes #2525: Break particles for all attachments of a cable bus. --- .../block/networking/BlockCableBus.java | 7 +++- .../render/cablebus/CableBusBakedModel.java | 36 ++++++++++++++++--- .../models/part/cable_anchor.json | 3 +- .../models/part/cable_facade.json | 3 +- .../models/part/crafting_terminal.json | 3 +- .../models/part/display_base.json | 3 +- .../models/part/export_bus_base.json | 3 +- .../models/part/import_bus_base.json | 3 +- .../models/part/interface_base.json | 3 +- .../models/part/level_emitter_base_off.json | 3 +- .../models/part/level_emitter_base_on.json | 3 +- .../models/part/monitor_base.json | 3 +- .../models/part/p2p/p2p_tunnel_base.json | 3 +- .../models/part/quartz_fiber.json | 3 +- .../models/part/storage_bus_base.json | 3 +- .../models/part/toggle_bus_base.json | 3 +- .../models/part/transition_plane_off.json | 3 +- .../models/part/transition_plane_on.json | 3 +- 18 files changed, 69 insertions(+), 22 deletions(-) diff --git a/src/main/java/appeng/block/networking/BlockCableBus.java b/src/main/java/appeng/block/networking/BlockCableBus.java index 3f3d394a..8ea58f8e 100644 --- a/src/main/java/appeng/block/networking/BlockCableBus.java +++ b/src/main/java/appeng/block/networking/BlockCableBus.java @@ -303,7 +303,9 @@ public class BlockCableBus extends AEBaseTileBlock CableBusRenderState renderState = cb.getRenderState(); - for( TextureAtlasSprite texture : cableBusModel.getParticleTextures( renderState ) ) + List textures = cableBusModel.getParticleTextures( renderState ); + + if( !textures.isEmpty() ) { // Shamelessly inspired by ParticleManager.addBlockDestroyEffects for( int j = 0; j < 4; ++j ) @@ -312,6 +314,9 @@ public class BlockCableBus extends AEBaseTileBlock { 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 d1 = (double) pos.getY() + ( (double) k + 0.5D ) / 4.0D; double d2 = (double) pos.getZ() + ( (double) l + 0.5D ) / 4.0D; diff --git a/src/main/java/appeng/client/render/cablebus/CableBusBakedModel.java b/src/main/java/appeng/client/render/cablebus/CableBusBakedModel.java index e187b606..211d31a0 100644 --- a/src/main/java/appeng/client/render/cablebus/CableBusBakedModel.java +++ b/src/main/java/appeng/client/render/cablebus/CableBusBakedModel.java @@ -28,11 +28,13 @@ import java.util.Map; import javax.annotation.Nullable; 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.IBakedModel; import net.minecraft.client.renderer.block.model.ItemCameraTransforms; import net.minecraft.client.renderer.block.model.ItemOverrideList; import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.client.renderer.texture.TextureMap; import net.minecraft.util.BlockRenderLayer; import net.minecraft.util.EnumFacing; import net.minecraft.util.ResourceLocation; @@ -55,6 +57,8 @@ public class CableBusBakedModel implements IBakedModel private final TextureAtlasSprite particleTexture; + private final TextureMap textureMap = Minecraft.getMinecraft().getTextureMapBlocks(); + CableBusBakedModel( CableBuilder cableBuilder, FacadeBuilder facadeBuilder, Map partModels, TextureAtlasSprite particleTexture ) { this.cableBuilder = cableBuilder; @@ -255,17 +259,39 @@ public class CableBusBakedModel implements IBakedModel CableCoreType coreType = CableCoreType.fromCableType( renderState.getCableType() ); AEColor cableColor = renderState.getCableColor(); + List result = new ArrayList<>(); + 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 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 ) diff --git a/src/main/resources/assets/appliedenergistics2/models/part/cable_anchor.json b/src/main/resources/assets/appliedenergistics2/models/part/cable_anchor.json index eb757e4c..bb0f95f1 100644 --- a/src/main/resources/assets/appliedenergistics2/models/part/cable_anchor.json +++ b/src/main/resources/assets/appliedenergistics2/models/part/cable_anchor.json @@ -1,6 +1,7 @@ { "textures": { - "0": "appliedenergistics2:parts/cable_anchor" + "0": "appliedenergistics2:parts/cable_anchor", + "particle": "appliedenergistics2:parts/cable_anchor" }, "elements": [ { diff --git a/src/main/resources/assets/appliedenergistics2/models/part/cable_facade.json b/src/main/resources/assets/appliedenergistics2/models/part/cable_facade.json index 516f653b..ee95d471 100644 --- a/src/main/resources/assets/appliedenergistics2/models/part/cable_facade.json +++ b/src/main/resources/assets/appliedenergistics2/models/part/cable_facade.json @@ -1,6 +1,7 @@ { "textures": { - "0": "appliedenergistics2:parts/cable_anchor" + "0": "appliedenergistics2:parts/cable_anchor", + "particle": "appliedenergistics2:parts/cable_anchor" }, "elements": [ { diff --git a/src/main/resources/assets/appliedenergistics2/models/part/crafting_terminal.json b/src/main/resources/assets/appliedenergistics2/models/part/crafting_terminal.json index d349dfce..5b4368f0 100644 --- a/src/main/resources/assets/appliedenergistics2/models/part/crafting_terminal.json +++ b/src/main/resources/assets/appliedenergistics2/models/part/crafting_terminal.json @@ -7,7 +7,8 @@ "l1": "appliedenergistics2:parts/crafting_terminal/l1", "l2": "appliedenergistics2:parts/crafting_terminal/l2", "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": [ { diff --git a/src/main/resources/assets/appliedenergistics2/models/part/display_base.json b/src/main/resources/assets/appliedenergistics2/models/part/display_base.json index 97942545..e481a4c4 100644 --- a/src/main/resources/assets/appliedenergistics2/models/part/display_base.json +++ b/src/main/resources/assets/appliedenergistics2/models/part/display_base.json @@ -3,7 +3,8 @@ "sides": "appliedenergistics2:parts/monitor_sides", "sidesStatus": "appliedenergistics2:parts/monitor_sides_status", "back": "appliedenergistics2:parts/monitor_back", - "front": "appliedenergistics2:parts/monitor_front" + "front": "appliedenergistics2:parts/monitor_front", + "particle": "appliedenergistics2:parts/monitor_back" }, "elements": [ { diff --git a/src/main/resources/assets/appliedenergistics2/models/part/export_bus_base.json b/src/main/resources/assets/appliedenergistics2/models/part/export_bus_base.json index 705ef8be..2188c13f 100644 --- a/src/main/resources/assets/appliedenergistics2/models/part/export_bus_base.json +++ b/src/main/resources/assets/appliedenergistics2/models/part/export_bus_base.json @@ -3,7 +3,8 @@ "sides": "appliedenergistics2:parts/export_bus_sides", "sidesStatus": "appliedenergistics2:parts/monitor_sides_status", "back": "appliedenergistics2:parts/monitor_back", - "front": "appliedenergistics2:items/part/export_bus" + "front": "appliedenergistics2:items/part/export_bus", + "particle": "appliedenergistics2:parts/monitor_back" }, "elements": [ { diff --git a/src/main/resources/assets/appliedenergistics2/models/part/import_bus_base.json b/src/main/resources/assets/appliedenergistics2/models/part/import_bus_base.json index c57ace57..a80d9a19 100644 --- a/src/main/resources/assets/appliedenergistics2/models/part/import_bus_base.json +++ b/src/main/resources/assets/appliedenergistics2/models/part/import_bus_base.json @@ -3,7 +3,8 @@ "sides": "appliedenergistics2:parts/import_bus_sides", "sidesStatus": "appliedenergistics2:parts/monitor_sides_status", "back": "appliedenergistics2:parts/monitor_back", - "front": "appliedenergistics2:items/part/import_bus" + "front": "appliedenergistics2:items/part/import_bus", + "particle": "appliedenergistics2:parts/monitor_back" }, "elements": [ { diff --git a/src/main/resources/assets/appliedenergistics2/models/part/interface_base.json b/src/main/resources/assets/appliedenergistics2/models/part/interface_base.json index 425b46db..203c7dc2 100644 --- a/src/main/resources/assets/appliedenergistics2/models/part/interface_base.json +++ b/src/main/resources/assets/appliedenergistics2/models/part/interface_base.json @@ -3,7 +3,8 @@ "sides": "appliedenergistics2:parts/export_bus_sides", "sidesStatus": "appliedenergistics2:parts/monitor_sides_status", "back": "appliedenergistics2:parts/monitor_back", - "front": "appliedenergistics2:items/part/interface" + "front": "appliedenergistics2:items/part/interface", + "particle": "appliedenergistics2:parts/monitor_back" }, "elements": [ { diff --git a/src/main/resources/assets/appliedenergistics2/models/part/level_emitter_base_off.json b/src/main/resources/assets/appliedenergistics2/models/part/level_emitter_base_off.json index d8dc5ba6..bf5ab68d 100644 --- a/src/main/resources/assets/appliedenergistics2/models/part/level_emitter_base_off.json +++ b/src/main/resources/assets/appliedenergistics2/models/part/level_emitter_base_off.json @@ -1,7 +1,8 @@ { "textures": { "emitter": "appliedenergistics2:parts/level_emitter_off", - "sides": "appliedenergistics2:parts/monitor_sides" + "sides": "appliedenergistics2:parts/monitor_sides", + "particle": "appliedenergistics2:parts/level_emitter_off" }, "elements": [ { diff --git a/src/main/resources/assets/appliedenergistics2/models/part/level_emitter_base_on.json b/src/main/resources/assets/appliedenergistics2/models/part/level_emitter_base_on.json index d56a2b10..e625077b 100644 --- a/src/main/resources/assets/appliedenergistics2/models/part/level_emitter_base_on.json +++ b/src/main/resources/assets/appliedenergistics2/models/part/level_emitter_base_on.json @@ -2,7 +2,8 @@ "uvlMarker": true, "ambientocclusion": false, "textures": { - "emitter": "appliedenergistics2:parts/level_emitter_on" + "emitter": "appliedenergistics2:parts/level_emitter_on", + "particle": "appliedenergistics2:parts/level_emitter_on" }, "elements": [ { diff --git a/src/main/resources/assets/appliedenergistics2/models/part/monitor_base.json b/src/main/resources/assets/appliedenergistics2/models/part/monitor_base.json index a0f4aa0c..55cf6a07 100644 --- a/src/main/resources/assets/appliedenergistics2/models/part/monitor_base.json +++ b/src/main/resources/assets/appliedenergistics2/models/part/monitor_base.json @@ -3,7 +3,8 @@ "textures": { "sides": "appliedenergistics2:parts/monitor_sides", "back": "appliedenergistics2:parts/monitor_back", - "front": "appliedenergistics2:parts/monitor_front" + "front": "appliedenergistics2:parts/monitor_front", + "particle": "appliedenergistics2:parts/monitor_back" }, "elements": [ { diff --git a/src/main/resources/assets/appliedenergistics2/models/part/p2p/p2p_tunnel_base.json b/src/main/resources/assets/appliedenergistics2/models/part/p2p/p2p_tunnel_base.json index 9ff537b7..64177543 100644 --- a/src/main/resources/assets/appliedenergistics2/models/part/p2p/p2p_tunnel_base.json +++ b/src/main/resources/assets/appliedenergistics2/models/part/p2p/p2p_tunnel_base.json @@ -3,7 +3,8 @@ "front": "appliedenergistics2:items/part/p2p_tunnel_front", "sides": "appliedenergistics2:parts/p2p_tunnel_sides", "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": [ { diff --git a/src/main/resources/assets/appliedenergistics2/models/part/quartz_fiber.json b/src/main/resources/assets/appliedenergistics2/models/part/quartz_fiber.json index f4e1a320..9a1cd37d 100644 --- a/src/main/resources/assets/appliedenergistics2/models/part/quartz_fiber.json +++ b/src/main/resources/assets/appliedenergistics2/models/part/quartz_fiber.json @@ -1,6 +1,7 @@ { "textures": { - "fiber": "appliedenergistics2:items/part/quartz_fiber" + "fiber": "appliedenergistics2:items/part/quartz_fiber", + "particle": "appliedenergistics2:items/part/quartz_fiber" }, "elements": [ { diff --git a/src/main/resources/assets/appliedenergistics2/models/part/storage_bus_base.json b/src/main/resources/assets/appliedenergistics2/models/part/storage_bus_base.json index 5a2ffd72..52fc0745 100644 --- a/src/main/resources/assets/appliedenergistics2/models/part/storage_bus_base.json +++ b/src/main/resources/assets/appliedenergistics2/models/part/storage_bus_base.json @@ -3,7 +3,8 @@ "sides": "appliedenergistics2:parts/storage_bus_sides", "sidesStatus": "appliedenergistics2:parts/monitor_sides_status", "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": [ { diff --git a/src/main/resources/assets/appliedenergistics2/models/part/toggle_bus_base.json b/src/main/resources/assets/appliedenergistics2/models/part/toggle_bus_base.json index 295134b8..90c2768b 100644 --- a/src/main/resources/assets/appliedenergistics2/models/part/toggle_bus_base.json +++ b/src/main/resources/assets/appliedenergistics2/models/part/toggle_bus_base.json @@ -1,7 +1,8 @@ { "textures": { "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": [ { diff --git a/src/main/resources/assets/appliedenergistics2/models/part/transition_plane_off.json b/src/main/resources/assets/appliedenergistics2/models/part/transition_plane_off.json index 6e630dbe..4db29daf 100644 --- a/src/main/resources/assets/appliedenergistics2/models/part/transition_plane_off.json +++ b/src/main/resources/assets/appliedenergistics2/models/part/transition_plane_off.json @@ -2,7 +2,8 @@ "textures": { "sides": "appliedenergistics2:parts/monitor_sides_status", "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": [ { diff --git a/src/main/resources/assets/appliedenergistics2/models/part/transition_plane_on.json b/src/main/resources/assets/appliedenergistics2/models/part/transition_plane_on.json index b1b5ca2d..231b3b3b 100644 --- a/src/main/resources/assets/appliedenergistics2/models/part/transition_plane_on.json +++ b/src/main/resources/assets/appliedenergistics2/models/part/transition_plane_on.json @@ -3,7 +3,8 @@ "textures": { "sides": "appliedenergistics2:parts/monitor_sides_status", "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": [ {