From 308fcf71f8fcd25c45fe94dca8e3651eb839436a Mon Sep 17 00:00:00 2001 From: Boblet Date: Fri, 17 Apr 2026 14:54:08 +0200 Subject: [PATCH] chop chop --- changelog | 6 +- src/main/java/com/hbm/blocks/ModBlocks.java | 3 - .../com/hbm/blocks/generic/BlockPlasma.java | 42 ----------- .../com/hbm/explosion/ExplosionChaos.java | 22 ------ .../inventory/recipes/anvil/AnvilRecipes.java | 13 ++++ .../com/hbm/items/block/ItemBlockLore.java | 2 +- src/main/java/com/hbm/main/MainRegistry.java | 1 + .../entity/effect/RenderCloudSolinium.java | 66 ++++++++++-------- .../hbm/textures/blocks/fusion_hatch_alt.png | Bin 581 -> 0 bytes .../blocks/fusion_heater_side_base.png | Bin 265 -> 0 bytes .../assets/hbm/textures/blocks/plasma.png | Bin 4701 -> 0 bytes .../hbm/textures/blocks/plasma.png.mcmeta | 45 ------------ 12 files changed, 57 insertions(+), 143 deletions(-) delete mode 100644 src/main/java/com/hbm/blocks/generic/BlockPlasma.java delete mode 100644 src/main/resources/assets/hbm/textures/blocks/fusion_hatch_alt.png delete mode 100644 src/main/resources/assets/hbm/textures/blocks/fusion_heater_side_base.png delete mode 100644 src/main/resources/assets/hbm/textures/blocks/plasma.png delete mode 100644 src/main/resources/assets/hbm/textures/blocks/plasma.png.mcmeta diff --git a/changelog b/changelog index b98eaa7aa..0cd64c5ff 100644 --- a/changelog +++ b/changelog @@ -11,7 +11,11 @@ * EMP grenades now destroy machines in a small radius like an EMP missile would * Grenades are no longer affected by nuclear blasts or other grenade explosions * Players no longer receive the starting guide book on first spawn since it's now very outdated -* All redstone-over-radio panels now have QMAW integration +* All RoR panels now have QMAW integration +* Legacy plasma heater and plasma heater hatches which are still found in crashed space ships can now be dismantled into steel pipes, copper pipes and analog circuits +* Removed legacy plasma block +* RoR panels now have OpenComputers integration, allowing otherwise fixed parameters like gauge thresholds, channels, and button commands to be adjusted on the fly +* Solinium blasts now use the new higher poly sphere model and frame interpolation, making the expansion smoother ## Fixed * Fixed the grenade crafting handler not checking if a shell/filling combination is even valid, allowing weird combos diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index 4cd964c56..73ef2a6d8 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -866,7 +866,6 @@ public class ModBlocks { @Deprecated public static Block fusion_heater; @Deprecated public static Block fusion_hatch; - @Deprecated public static Block plasma; // only actually used by the old plasma grenade, will die with the grenade rework @Deprecated public static Block iter; @Deprecated public static Block plasma_heater; @@ -1984,7 +1983,6 @@ public class ModBlocks { fusion_heater = new BlockPillar(Material.iron, RefStrings.MODID + ":fusion_heater_top").setBlockName("fusion_heater").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":fusion_heater_side"); fusion_hatch = new FusionHatch(Material.iron).setBlockName("fusion_hatch").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":fusion_hatch"); - plasma = new BlockPlasma(Material.iron).setBlockName("plasma").setHardness(5.0F).setResistance(6000.0F).setLightLevel(1.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":plasma"); iter = new MachineITER().setBlockName("iter").setHardness(5.0F).setResistance(60.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":iter"); plasma_heater = new MachinePlasmaHeater().setBlockName("plasma_heater").setHardness(5.0F).setResistance(60.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":plasma_heater"); @@ -3345,7 +3343,6 @@ public class ModBlocks { //Multiblock Generators GameRegistry.registerBlock(fusion_heater, fusion_heater.getUnlocalizedName()); GameRegistry.registerBlock(fusion_hatch, fusion_hatch.getUnlocalizedName()); - GameRegistry.registerBlock(plasma, ItemBlockLore.class, plasma.getUnlocalizedName()); GameRegistry.registerBlock(iter, iter.getUnlocalizedName()); GameRegistry.registerBlock(plasma_heater, plasma_heater.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/blocks/generic/BlockPlasma.java b/src/main/java/com/hbm/blocks/generic/BlockPlasma.java deleted file mode 100644 index b47f52d90..000000000 --- a/src/main/java/com/hbm/blocks/generic/BlockPlasma.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.hbm.blocks.generic; - -import java.util.Random; - -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.entity.Entity; -import net.minecraft.init.Blocks; -import net.minecraft.item.Item; -import net.minecraft.util.AxisAlignedBB; -import net.minecraft.world.World; - -@Deprecated -public class BlockPlasma extends Block { - - public BlockPlasma(Material p_i45394_1_) { - super(p_i45394_1_); - this.setTickRandomly(true); - } - - @Override - public void updateTick(World world, int x, int y, int z, Random rand) { - if(world.getGameRules().getGameRuleBooleanValue("doFireTick")) - world.setBlock(x, y, z, Blocks.air); - } - - @Override - public AxisAlignedBB getCollisionBoundingBoxFromPool(World p_149668_1_, int p_149668_2_, int p_149668_3_, int p_149668_4_) { - return null; - } - - @Override - public void onEntityCollidedWithBlock(World p_149670_1_, int p_149670_2_, int p_149670_3_, int p_149670_4_, Entity p_149670_5_) { - p_149670_5_.setFire(10); - p_149670_5_.setInWeb(); - } - - @Override public boolean isOpaqueCube() { return false; } - @Override public Item getItemDropped(int p_149650_1_, Random p_149650_2_, int p_149650_3_) { return null; } - @Override public boolean renderAsNormalBlock() { return false; } - -} diff --git a/src/main/java/com/hbm/explosion/ExplosionChaos.java b/src/main/java/com/hbm/explosion/ExplosionChaos.java index 95c1e9f7f..49ae5c0b1 100644 --- a/src/main/java/com/hbm/explosion/ExplosionChaos.java +++ b/src/main/java/com/hbm/explosion/ExplosionChaos.java @@ -501,28 +501,6 @@ public class ExplosionChaos { //TODO: destroy this entire class radius = (int) f; } - public static void plasma(World world, int x, int y, int z, int radius) { - int r = radius; - int r2 = r * r; - int r22 = r2 / 2; - for (int xx = -r; xx < r; xx++) { - int X = xx + x; - int XX = xx * xx; - for (int yy = -r; yy < r; yy++) { - int Y = yy + y; - int YY = XX + yy * yy; - for (int zz = -r; zz < r; zz++) { - int Z = zz + z; - int ZZ = YY + zz * zz; - if (ZZ < r22 + world.rand.nextInt(r22 / 2)) { - if(world.getBlock(X, Y, Z) != ModBlocks.statue_elb_f) - world.setBlock(X, Y, Z, ModBlocks.plasma); - } - } - } - } - } - public static void levelDown(World world, int x, int y, int z, int radius) { if(!world.isRemote) diff --git a/src/main/java/com/hbm/inventory/recipes/anvil/AnvilRecipes.java b/src/main/java/com/hbm/inventory/recipes/anvil/AnvilRecipes.java index e3bb7c440..476b4a456 100644 --- a/src/main/java/com/hbm/inventory/recipes/anvil/AnvilRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/anvil/AnvilRecipes.java @@ -1026,6 +1026,19 @@ public class AnvilRecipes extends SerializableRecipe { new AnvilOutput(new ItemStack(Items.bone, 1), 0.75F), new AnvilOutput(new ItemStack(Items.experience_bottle, 1), 0.5F) }).setTier(1)); + + constructionRecipes.add(new AnvilConstructionRecipe( + new ComparableStack(ModBlocks.fusion_heater), new AnvilOutput[] { + new AnvilOutput(new ItemStack(ModItems.pipe, 4, Mats.MAT_STEEL.id)), + new AnvilOutput(new ItemStack(ModItems.pipe, 2, Mats.MAT_COPPER.id)), + new AnvilOutput(new ItemStack(ModItems.circuit, 1, EnumCircuitType.ANALOG.ordinal()), 0.5F) + }).setTier(1)); + constructionRecipes.add(new AnvilConstructionRecipe( + new ComparableStack(ModBlocks.fusion_hatch), new AnvilOutput[] { + new AnvilOutput(new ItemStack(ModItems.pipe, 4, Mats.MAT_STEEL.id)), + new AnvilOutput(new ItemStack(ModItems.pipe, 4, Mats.MAT_COPPER.id)), + new AnvilOutput(new ItemStack(ModItems.circuit, 1, EnumCircuitType.ANALOG.ordinal()), 0.75F) + }).setTier(1)); } public static List getSmithing() { diff --git a/src/main/java/com/hbm/items/block/ItemBlockLore.java b/src/main/java/com/hbm/items/block/ItemBlockLore.java index 13bd6b2e4..9d6d7f43f 100644 --- a/src/main/java/com/hbm/items/block/ItemBlockLore.java +++ b/src/main/java/com/hbm/items/block/ItemBlockLore.java @@ -59,7 +59,7 @@ public class ItemBlockLore extends ItemBlockBase { if(this.field_150939_a == ModBlocks.gravel_diamond) return EnumRarity.rare; - if(this.field_150939_a == ModBlocks.block_euphemium || this.field_150939_a == ModBlocks.block_euphemium_cluster || this.field_150939_a == ModBlocks.plasma) + if(this.field_150939_a == ModBlocks.block_euphemium || this.field_150939_a == ModBlocks.block_euphemium_cluster) return EnumRarity.epic; return EnumRarity.common; diff --git a/src/main/java/com/hbm/main/MainRegistry.java b/src/main/java/com/hbm/main/MainRegistry.java index 8b6c3ccb8..f84196a1a 100644 --- a/src/main/java/com/hbm/main/MainRegistry.java +++ b/src/main/java/com/hbm/main/MainRegistry.java @@ -1569,6 +1569,7 @@ public class MainRegistry { ignoreMappings.add("hbm:item.grenade_if_null"); ignoreMappings.add("hbm:item.grenade_kit"); ignoreMappings.add("hbm:item.nuclear_waste_pearl"); + ignoreMappings.add("hbm:tile.plasma"); /// REMAP /// remapItems.put("hbm:item.gadget_explosive8", ModItems.early_explosive_lenses); diff --git a/src/main/java/com/hbm/render/entity/effect/RenderCloudSolinium.java b/src/main/java/com/hbm/render/entity/effect/RenderCloudSolinium.java index 4c077afbc..43c96ceb7 100644 --- a/src/main/java/com/hbm/render/entity/effect/RenderCloudSolinium.java +++ b/src/main/java/com/hbm/render/entity/effect/RenderCloudSolinium.java @@ -3,44 +3,52 @@ package com.hbm.render.entity.effect; import org.lwjgl.opengl.GL11; import com.hbm.entity.effect.EntityCloudSolinium; -import com.hbm.lib.RefStrings; +import com.hbm.main.ResourceManager; +import com.hbm.util.ColorUtil; import net.minecraft.client.renderer.entity.Render; import net.minecraft.entity.Entity; import net.minecraft.util.ResourceLocation; -import net.minecraftforge.client.model.AdvancedModelLoader; -import net.minecraftforge.client.model.IModelCustom; public class RenderCloudSolinium extends Render { - private static final ResourceLocation objTesterModelRL = new ResourceLocation(/*"/assets/" + */RefStrings.MODID, "models/Sphere.obj"); - private IModelCustom blastModel; - private ResourceLocation blastTexture; - public float scale = 0; - public float ring = 0; - - public RenderCloudSolinium() { - blastModel = AdvancedModelLoader.loadModel(objTesterModelRL); - blastTexture = new ResourceLocation(RefStrings.MODID, "textures/models/BlastSolinium.png"); - scale = 0; - } - @Override - public void doRender(Entity p_76986_1_, double p_76986_2_, double p_76986_4_, double p_76986_6_, float p_76986_8_, float p_76986_9_) { - render((EntityCloudSolinium)p_76986_1_, p_76986_2_, p_76986_4_, p_76986_6_, p_76986_8_, p_76986_9_); - } - - public void render(EntityCloudSolinium cloud, double p_76986_2_, double p_76986_4_, double p_76986_6_, float p_76986_8_, float p_76986_9_) { + public void doRender(Entity entity, double x, double y, double z, float f0, float interp) { GL11.glPushMatrix(); - GL11.glTranslatef((float)p_76986_2_, (float)p_76986_4_, (float)p_76986_6_); - GL11.glDisable(GL11.GL_LIGHTING); - GL11.glDisable(GL11.GL_CULL_FACE); - - GL11.glScalef(cloud.age, cloud.age, cloud.age); - - bindTexture(blastTexture); - blastModel.renderAll(); - GL11.glPopMatrix(); + GL11.glTranslated(x, y, z); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_CULL_FACE); + GL11.glShadeModel(GL11.GL_SMOOTH); + GL11.glDisable(GL11.GL_TEXTURE_2D); + + int color = 0x27FFDA; + + EntityCloudSolinium cloud = (EntityCloudSolinium) entity; + float scale = cloud.age + interp; + GL11.glScalef(scale, scale, scale); + + GL11.glColor3f(ColorUtil.fr(color), ColorUtil.fg(color), ColorUtil.fb(color)); + ResourceManager.sphere_new.renderAll(); + + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE); + GL11.glColor4f(ColorUtil.fr(color), ColorUtil.fg(color), ColorUtil.fb(color), 0.125F); + + GL11.glEnable(GL11.GL_CULL_FACE); + + double outerScale = 1.025; + for(int i = 0; i < 3; i++) { + GL11.glScaled(outerScale, outerScale, outerScale); + ResourceManager.sphere_new.renderAll(); + } + + GL11.glColor4f(1F, 1F, 1F, 1F); + + GL11.glDisable(GL11.GL_BLEND); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_TEXTURE_2D); + GL11.glShadeModel(GL11.GL_FLAT); + GL11.glPopMatrix(); } @Override diff --git a/src/main/resources/assets/hbm/textures/blocks/fusion_hatch_alt.png b/src/main/resources/assets/hbm/textures/blocks/fusion_hatch_alt.png deleted file mode 100644 index e11433175a8c7e0fbd35fa471b5ae50878d64f94..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 581 zcmV-L0=oT)P)e|dR9M94W~ttID-)|$)9%Y!=WoI`6(N{QRsTby$!rMSAfqN*xF z2q>jWgHnq7`+ER-y&m@M?TzE(W0X?VbXSb)=L4SS%Je=cuX*r4-*s{rZ(14u^yg2qCauukqfKQlhSFrqd}R!u$I>tJMmC z&1S>r=O??}Zm)uKuBgy74X3B4q?9;2J1Z*8X0!5g(=?o%oN#n>g!dksb7s5UVy#7M zjdSjw+KWiZB7*Jpdc+v%x{i;Jj~@UrMgUSu7-MkGv0AN&F)|zu_au%+BWAN1qtS@T zWKs-cjA66c8~_dm1KPHwZCe(L1vaI`cDrT0UXyeF(eOR~c4E#MdvS3AfOC$n>v(v0 zI4Cs6;JrVP@A2`G>2%8Z`8jqnnUon{Utd`+ml$J8v53%h9U_8K3avHPTAHSzu4~lY z-CZ6G28CU%^+9orv6$xTOesZ-aj!zZ-^Y7T&bcuCUn6D|k T=;}N600000NkvXXu0mjfBjpQ8 diff --git a/src/main/resources/assets/hbm/textures/blocks/fusion_heater_side_base.png b/src/main/resources/assets/hbm/textures/blocks/fusion_heater_side_base.png deleted file mode 100644 index fe0b6412cf7e7b4dde2d00c4bffdd62576ee9574..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 265 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#VfKaSXBO ztqt}TYf<3w{`?^B&VQG6D^?rK+?Qm=wdJgP&(<(EmT&h?_%JY>+^p8w;gFW}o|oZ- zj|+@$R$Uv*%rH7-aINo?V-qW!sZt`ma zDz$gr{J5UgL@})6>}!@u5_t>7JkqAV|Mr62ZjD)p^{w>l4>slhoWpqU$tLU2C+}}* z2w(G$m}y;c{)g6&TbHX!ICn34x9IQP=I51t>3=)rmb6{T@n}+sJN{!WV_byjE1+K( NJYD@<);T3K0RTugZXN&t diff --git a/src/main/resources/assets/hbm/textures/blocks/plasma.png b/src/main/resources/assets/hbm/textures/blocks/plasma.png deleted file mode 100644 index 5042b3489336915e2d1b4c0b9613fa03677d6c1e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4701 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