This commit is contained in:
Bob 2024-06-18 20:45:16 +02:00
parent dda1025fe2
commit a016dd906a
14 changed files with 77 additions and 144 deletions

View File

@ -1,24 +1,10 @@
## Added
* PRISM
* A new 3D radiation system which makes use of block explosion resistance to determine spreading
* Unlike the 1.12.2 "pocket" system, radiation isn't perfectly sealed, blocks in a 16x16x16 area are simply summed up and used as a divisor
* Using enough high-resistance blocks (or a ton of lesser resistant blocks), radiation can still be effectively blocked (either thick concrete walls or a mountain)
* Radiation is still (sub) chunk based, so the radiation on both sides of a wall in the middle of a chunk will still be the same, the wall will however affect spreading to neighboring chunks
* For TPT players: radiation can be compared to pressure, where pressure also uses 4x4 pixel regions and is affected by pixels within those regions
## Changed
* Centrifuges and refineries now use analog circuits
* Updated the cyclotron, the GUI is now much cleaner and it uses water as coolant (produces LPS) instead of regular coolant
* Due to some people's inability to put a square peg into a square hole rather than a round one, it is now impossible to manually click soldering station ingredients into the wrong slot (you could have just shift-clicked, you know?)
* Slightly simplified a few crafting recipes, steel tanks and steel shells take the same role so the steel tanks were dropped from a few recipes
* Changed PRISM's resistance function to work more like armor resistance instead of a straight divider
* Capped PRISM's resistance value per block to 100 (bit over concrete)
* Removed the unused rare metal ores, freeing up 5 block IDs
* Changed the .75 bolt recipes
## Fixed
* Fixed hopper IO ignoring the stack limit on arc furnaces under certain circumstances
* Fixed the watz powerplant not dropping as many HSS bolts as it should
* Fixed grates crashing servers when placed using shift click onto blocks
* Many machines now use the much more efficient byte buffer for sending information to the client which heavily reduces lag (NBT packing is a major contributor to TPS lg)
* Fixed issue where the power system would constantly disconnect when multiple dimensions are loaded
* Fixed the rare sideways-rendering tank not using the correct UV
* Fixed incorrect resource path for the hot blood tank, causing a missing texture
* Fixed welded CMB plates being unobtainable
* Fixed the ICF pellet maker not being able to eject the output
* Fixed PRISM crashing instantly
* Fixed PRISM's resistance check being on backwards
* Fixed PRISM's resistance check omitting the wrong layers

View File

@ -1,6 +1,6 @@
mod_version=1.0.27
# Empty build number makes a release type
mod_build_number=4998
mod_build_number=5000
credits=HbMinecraft,\
\ rodolphito (explosion algorithms),\

View File

@ -61,11 +61,6 @@ public class ModBlocks {
public static Block ore_schrabidium;
public static Block ore_beryllium;
public static Block ore_australium;
public static Block ore_weidanium;
public static Block ore_reiium;
public static Block ore_unobtainium;
public static Block ore_daffergon;
public static Block ore_verticium;
public static Block ore_rare;
public static Block ore_cobalt;
public static Block ore_cinnebar;
@ -1327,11 +1322,6 @@ public class ModBlocks {
basalt_tiles = new BlockGeneric(Material.rock).setBlockName("basalt_tiles").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":basalt_tiles");
ore_australium = new BlockGeneric(Material.rock).setBlockName("ore_australium").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":ore_australium");
ore_weidanium = new BlockGeneric(Material.rock).setBlockName("ore_weidanium").setCreativeTab(null).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":ore_weidanium");
ore_reiium = new BlockGeneric(Material.rock).setBlockName("ore_reiium").setCreativeTab(null).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":ore_reiium");
ore_unobtainium = new BlockGeneric(Material.rock).setBlockName("ore_unobtainium").setCreativeTab(null).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":ore_unobtainium");
ore_daffergon = new BlockGeneric(Material.rock).setBlockName("ore_daffergon").setCreativeTab(null).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":ore_daffergon");
ore_verticium = new BlockGeneric(Material.rock).setBlockName("ore_verticium").setCreativeTab(null).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":ore_verticium");
ore_rare = new BlockOre(Material.rock).setBlockName("ore_rare").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":ore_rare");
ore_cobalt = new BlockOre(Material.rock).setBlockName("ore_cobalt").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":ore_cobalt");
ore_cinnebar = new BlockOre(Material.rock).setBlockName("ore_cinnebar").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":ore_cinnebar");
@ -2394,11 +2384,6 @@ public class ModBlocks {
//Rare Minerals
GameRegistry.registerBlock(ore_australium, ItemOreBlock.class, ore_australium.getUnlocalizedName());
GameRegistry.registerBlock(ore_weidanium, ItemOreBlock.class, ore_weidanium.getUnlocalizedName());
GameRegistry.registerBlock(ore_reiium, ItemOreBlock.class, ore_reiium.getUnlocalizedName());
GameRegistry.registerBlock(ore_unobtainium, ItemOreBlock.class, ore_unobtainium.getUnlocalizedName());
GameRegistry.registerBlock(ore_daffergon, ItemOreBlock.class, ore_daffergon.getUnlocalizedName());
GameRegistry.registerBlock(ore_verticium, ItemOreBlock.class, ore_verticium.getUnlocalizedName());
GameRegistry.registerBlock(ore_rare, ItemOreBlock.class, ore_rare.getUnlocalizedName());
GameRegistry.registerBlock(ore_cobalt, ore_cobalt.getUnlocalizedName());
GameRegistry.registerBlock(ore_cinnebar, ore_cinnebar.getUnlocalizedName());

View File

@ -3,7 +3,6 @@ package com.hbm.blocks.generic;
import com.hbm.blocks.IStepTickReceiver;
import com.hbm.blocks.ITooltipProvider;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumChatFormatting;
@ -14,28 +13,27 @@ import java.util.List;
public class BlockSpeedyStairs extends BlockGenericStairs implements IStepTickReceiver, ITooltipProvider {
double speed;
double speed;
public BlockSpeedyStairs(Block block, int meta, double speed) {
super(block, meta);
this.speed = speed;
}
public BlockSpeedyStairs(Block block, int meta, double speed) {
super(block, meta);
this.speed = speed;
}
@Override
public void onPlayerStep(World world, int x, int y, int z, EntityPlayer player) {
@Override
public void onPlayerStep(World world, int x, int y, int z, EntityPlayer player) {
if(!world.isRemote)
return;
if(!world.isRemote)
return;
if(player.moveForward != 0 || player.moveStrafing != 0) {
player.motionX *= speed;
player.motionZ *= speed;
}
}
if(player.moveForward != 0 || player.moveStrafing != 0) {
player.motionX *= speed;
player.motionZ *= speed;
}
}
@Override
public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) {
list.add(EnumChatFormatting.BLUE + "Increases speed by " + (MathHelper.floor_double((speed - 1) * 100)) + "%");
}
@Override
public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) {
list.add(EnumChatFormatting.BLUE + "Increases speed by " + (MathHelper.floor_double((speed - 1) * 100)) + "%");
}
}

View File

@ -142,15 +142,17 @@ public class ChunkRadiationHandlerPRISM extends ChunkRadiationHandler {
RadPerWorld radWorld = perWorld.get(event.world);
if(radWorld != null) {
SubChunk[] chunk = radWorld.radiation.get(event.getChunk().getChunkCoordIntPair());
for(int i = 0; i < 16; i++) {
SubChunk sub = chunk[i];
if(sub != null) {
float rad = sub.radiation;
event.getData().setFloat(NBT_KEY_CHUNK_RADIATION + i, rad);
for(int j = 0; j < 16; j++) event.getData().setFloat(NBT_KEY_CHUNK_RESISTANCE + "x_" + j + "_" + i, sub.xResist[j]);
for(int j = 0; j < 16; j++) event.getData().setFloat(NBT_KEY_CHUNK_RESISTANCE + "y_" + j + "_" + i, sub.yResist[j]);
for(int j = 0; j < 16; j++) event.getData().setFloat(NBT_KEY_CHUNK_RESISTANCE + "z_" + j + "_" + i, sub.zResist[j]);
event.getData().setBoolean(NBT_KEY_CHUNK_EXISTS + i, true);
if(chunk != null) {
for(int i = 0; i < 16; i++) {
SubChunk sub = chunk[i];
if(sub != null) {
float rad = sub.radiation;
event.getData().setFloat(NBT_KEY_CHUNK_RADIATION + i, rad);
for(int j = 0; j < 16; j++) event.getData().setFloat(NBT_KEY_CHUNK_RESISTANCE + "x_" + j + "_" + i, sub.xResist[j]);
for(int j = 0; j < 16; j++) event.getData().setFloat(NBT_KEY_CHUNK_RESISTANCE + "y_" + j + "_" + i, sub.yResist[j]);
for(int j = 0; j < 16; j++) event.getData().setFloat(NBT_KEY_CHUNK_RESISTANCE + "z_" + j + "_" + i, sub.zResist[j]);
event.getData().setBoolean(NBT_KEY_CHUNK_EXISTS + i, true);
}
}
}
}
@ -162,11 +164,13 @@ public class ChunkRadiationHandlerPRISM extends ChunkRadiationHandler {
if(!event.world.isRemote) {
RadPerWorld radWorld = perWorld.get(event.world);
if(radWorld != null) {
radWorld.radiation.remove(event.getChunk());
radWorld.radiation.remove(event.getChunk().getChunkCoordIntPair());
}
}
}
public static final HashMap<ChunkCoordIntPair, SubChunk[]> newAdditions = new HashMap();
@Override
public void updateSystem() {
@ -239,6 +243,9 @@ public class ChunkRadiationHandlerPRISM extends ChunkRadiationHandler {
}
}
system.radiation.putAll(newAdditions);
newAdditions.clear();
/*
//reap chunks with no radiation at all
system.radiation.entrySet().removeIf(x -> getTotalChunkRadiation(x.getValue()) <= 0F);
@ -266,7 +273,7 @@ public class ChunkRadiationHandlerPRISM extends ChunkRadiationHandler {
SubChunk[] newChunk = map.get(newPos);
if(newChunk == null) {
newChunk = new SubChunk[16];
map.put(newPos, newChunk);
newAdditions.put(newPos, newChunk);
}
if(newChunk[y] == null) newChunk[y] = new SubChunk().rebuild(world, newPos.chunkXPos << 4, y << 4, newPos.chunkZPos << 4);
SubChunk to = newChunk[y];
@ -276,8 +283,8 @@ public class ChunkRadiationHandlerPRISM extends ChunkRadiationHandler {
private static float spreadRadiationTo(SubChunk from, SubChunk to, float amount, ForgeDirection movement) {
float resistance = from.getResistanceValue(movement.getOpposite()) + to.getResistanceValue(movement);
resistance /= 1_000F;
float toMove = Math.min(amount / Math.max(resistance, 1F), amount);
double fun = Math.pow(Math.E, -resistance / 10_000D);
float toMove = (float) Math.min(amount * fun, amount);
to.radiation += toMove;
return toMove;
}
@ -334,7 +341,7 @@ public class ChunkRadiationHandlerPRISM extends ChunkRadiationHandler {
Block b = subChunk.getBlockByExtId(iX, iY, iZ);
if(b.getMaterial() == Material.air) continue;
float resistance = b.getExplosionResistance(null, world, tX + iX, tY + iY, tZ + iZ, x, y, z);
float resistance = Math.min(b.getExplosionResistance(null, world, tX + iX, tY + iY, tZ + iZ, x, y, z), 100);
if(iX == sX) xResist[iX] += resistance;
if(iY == sY) yResist[iY] += resistance;
if(iZ == sZ) zResist[iZ] += resistance;
@ -370,7 +377,7 @@ public class ChunkRadiationHandlerPRISM extends ChunkRadiationHandler {
Block b = subChunk.getBlockByExtId(iX, iY, iZ);
if(b.getMaterial() == Material.air) continue;
float resistance = b.getExplosionResistance(null, world, tX + iX, tY + iY, tZ + iZ, x, y, z);
float resistance = Math.min(b.getExplosionResistance(null, world, tX + iX, tY + iY, tZ + iZ, x, y, z), 100);
xResist[iX] += resistance;
yResist[iY] += resistance;
zResist[iZ] += resistance;
@ -385,18 +392,18 @@ public class ChunkRadiationHandlerPRISM extends ChunkRadiationHandler {
}
public float getResistanceValue(ForgeDirection movement) {
if(movement == Library.POS_X) return getResistanceFromArray(xResist, false);
if(movement == Library.NEG_X) return getResistanceFromArray(xResist, true);
if(movement == Library.POS_Y) return getResistanceFromArray(yResist, false);
if(movement == Library.NEG_Y) return getResistanceFromArray(yResist, true);
if(movement == Library.POS_Z) return getResistanceFromArray(zResist, false);
if(movement == Library.NEG_Z) return getResistanceFromArray(zResist, true);
if(movement == Library.POS_X) return getResistanceFromArray(xResist, true);
if(movement == Library.NEG_X) return getResistanceFromArray(xResist, false);
if(movement == Library.POS_Y) return getResistanceFromArray(yResist, true);
if(movement == Library.NEG_Y) return getResistanceFromArray(yResist, false);
if(movement == Library.POS_Z) return getResistanceFromArray(zResist, true);
if(movement == Library.NEG_Z) return getResistanceFromArray(zResist, false);
return 0;
}
private float getResistanceFromArray(float[] resist, boolean reverse) {
float res = 0F;
for(int i = 0; i < 15; i++) {
for(int i = 1; i < 16; i++) {
int index = reverse ? 15 - i : i;
res += resist[index] / 15F * i;
}

View File

@ -445,11 +445,11 @@ public class OreDictManager {
* RARE METALS
*/
AUSTRALIUM .nugget(nugget_australium) .billet(billet_australium) .ingot(ingot_australium) .dust(powder_australium) .block(block_australium) .ore(ore_australium);
REIIUM .nugget(nugget_reiium) .ingot(ingot_reiium) .dust(powder_reiium) .block(block_reiium) .ore(ore_reiium);
WEIDANIUM .nugget(nugget_weidanium) .ingot(ingot_weidanium) .dust(powder_weidanium) .block(block_weidanium) .ore(ore_weidanium);
UNOBTAINIUM .nugget(nugget_unobtainium) .ingot(ingot_unobtainium) .dust(powder_unobtainium) .block(block_unobtainium) .ore(ore_unobtainium);
VERTICIUM .nugget(nugget_verticium) .ingot(ingot_verticium) .dust(powder_verticium) .block(block_verticium) .ore(ore_verticium);
DAFFERGON .nugget(nugget_daffergon) .ingot(ingot_daffergon) .dust(powder_daffergon) .block(block_daffergon) .ore(ore_daffergon);
REIIUM .nugget(nugget_reiium) .ingot(ingot_reiium) .dust(powder_reiium) .block(block_reiium);
WEIDANIUM .nugget(nugget_weidanium) .ingot(ingot_weidanium) .dust(powder_weidanium) .block(block_weidanium);
UNOBTAINIUM .nugget(nugget_unobtainium) .ingot(ingot_unobtainium) .dust(powder_unobtainium) .block(block_unobtainium);
VERTICIUM .nugget(nugget_verticium) .ingot(ingot_verticium) .dust(powder_verticium) .block(block_verticium);
DAFFERGON .nugget(nugget_daffergon) .ingot(ingot_daffergon) .dust(powder_daffergon) .block(block_daffergon);
/*
* RARE EARTHS

View File

@ -1,10 +1,7 @@
package com.hbm.inventory.container;
import com.hbm.inventory.FluidContainerRegistry;
import com.hbm.inventory.SlotCraftingOutput;
import com.hbm.inventory.SlotTakeOnly;
import com.hbm.inventory.SlotUpgrade;
import com.hbm.inventory.fluid.Fluids;
import com.hbm.items.ModItems;
import com.hbm.items.machine.ItemMachineUpgrade;
import com.hbm.tileentity.machine.TileEntityMachineCyclotron;

View File

@ -4,13 +4,10 @@ import org.lwjgl.opengl.GL11;
import com.hbm.inventory.container.ContainerMachineCyclotron;
import com.hbm.lib.RefStrings;
import com.hbm.packet.AuxButtonPacket;
import com.hbm.packet.PacketDispatcher;
import com.hbm.tileentity.machine.TileEntityMachineCyclotron;
import com.hbm.util.I18nUtil;
import net.minecraft.client.Minecraft;
import net.minecraft.client.audio.PositionedSoundRecord;
import net.minecraft.client.resources.I18n;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.util.ResourceLocation;

View File

@ -510,30 +510,26 @@ public class AssemblerRecipes extends SerializableRecipe {
}, 200);
makeRecipe(new ComparableStack(ModItems.ammo_75bolt, 2, ItemAmmoEnums.Ammo75Bolt.STOCK.ordinal()), new AStack[] {
new OreDictStack(STEEL.plate(), 2),
new OreDictStack(CU.plate(), 1),
new ComparableStack(ModItems.casing_50, 5),
new OreDictStack(STEEL.plate(), 4),
new OreDictStack(ANY_PLASTICEXPLOSIVE.ingot(), 2),
new OreDictStack(ANY_HARDPLASTIC.ingot(), 2),
new ComparableStack(ModItems.cordite, 3),
new OreDictStack(U238.ingot(), 1)
}, 60);
makeRecipe(new ComparableStack(ModItems.ammo_75bolt, 2, ItemAmmoEnums.Ammo75Bolt.INCENDIARY.ordinal()), new AStack[] {
new OreDictStack(STEEL.plate(), 2),
new OreDictStack(CU.plate(), 1),
new ComparableStack(ModItems.casing_50, 5),
new OreDictStack(ANY_PLASTICEXPLOSIVE.ingot(), 3),
new OreDictStack(STEEL.plate(), 4),
new OreDictStack(ANY_PLASTICEXPLOSIVE.ingot(), 2),
new OreDictStack(ANY_HARDPLASTIC.ingot(), 2),
new ComparableStack(ModItems.cordite, 3),
new OreDictStack(P_WHITE.ingot(), 3)
}, 60);
makeRecipe(new ComparableStack(ModItems.ammo_75bolt, 2, ItemAmmoEnums.Ammo75Bolt.HE.ordinal()), new AStack[] {
new OreDictStack(STEEL.plate(), 2),
new OreDictStack(CU.plate(), 1),
new ComparableStack(ModItems.casing_50, 5),
new OreDictStack(ANY_HIGHEXPLOSIVE.ingot(), 5),
new ComparableStack(ModItems.cordite, 5),
new OreDictStack(REDSTONE.dust(), 3)
new OreDictStack(STEEL.plate(), 4),
new OreDictStack(ANY_PLASTICEXPLOSIVE.ingot(), 2),
new OreDictStack(ANY_HARDPLASTIC.ingot(), 5),
new ComparableStack(ModItems.cordite, 5)
}, 60);
makeRecipe(new ComparableStack(ModItems.spawn_worm, 1), new AStack[] {

View File

@ -30,36 +30,6 @@ public class ItemOreBlock extends ItemBlock {
list.add("Deposit location: X:-400; Z:-400");
list.add("Estimated quantity: 490");
}
if(this.field_150939_a == ModBlocks.ore_weidanium) {
list.add("Weidanium ore");
list.add("Deposit location: X:0; Z:300");
list.add("Estimated quantity: 2800");
}
if(this.field_150939_a == ModBlocks.ore_reiium) {
list.add("Reiium ore");
list.add("Deposit location: X:0; Z:0");
list.add("Estimated quantity: 2800");
}
if(this.field_150939_a == ModBlocks.ore_unobtainium) {
list.add("Unobtainium ore");
list.add("Deposit location: X:200; Z:200");
list.add("Estimated quantity: 12480");
}
if(this.field_150939_a == ModBlocks.ore_daffergon) {
list.add("Daffergon ore");
list.add("Deposit location: X:400; Z:-200");
list.add("Estimated quantity: 14980");
}
if(this.field_150939_a == ModBlocks.ore_verticium) {
list.add("Verticium ore");
list.add("Deposit location: X:-300; Z:200");
list.add("Estimated quantity: 4680");
}
}
}

View File

@ -3,7 +3,7 @@ package com.hbm.lib;
public class RefStrings {
public static final String MODID = "hbm";
public static final String NAME = "Hbm's Nuclear Tech Mod";
public static final String VERSION = "1.0.27 BETA (4998)";
public static final String VERSION = "1.0.27 BETA (5000)";
//HBM's Beta Naming Convention:
//V T (X)
//V -> next release version

View File

@ -1332,6 +1332,11 @@ public class MainRegistry {
ignoreMappings.add("hbm:item.arc_electrode_desh");
ignoreMappings.add("hbm:tile.sand_gold");
ignoreMappings.add("hbm:tile.sand_gold198");
ignoreMappings.add("hbm:tile.ore_weidanium");
ignoreMappings.add("hbm:tile.ore_reiium");
ignoreMappings.add("hbm:tile.ore_unobtainium");
ignoreMappings.add("hbm:tile.ore_daffergon");
ignoreMappings.add("hbm:tile.ore_verticium");
/// REMAP ///
remapItems.put("hbm:item.gadget_explosive8", ModItems.early_explosive_lenses);

View File

@ -6,12 +6,9 @@ import java.util.Random;
import com.hbm.blocks.BlockDummyable;
import com.hbm.blocks.ModBlocks;
import com.hbm.handler.MultiblockHandlerXR;
import com.hbm.inventory.RecipesCommon.ComparableStack;
import com.hbm.inventory.UpgradeManager;
import com.hbm.inventory.container.ContainerMachineAssembler;
import com.hbm.inventory.gui.GUIMachineAssembler;
import com.hbm.inventory.recipes.AssemblerRecipes;
import com.hbm.items.machine.ItemAssemblyTemplate;
import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType;
import com.hbm.main.MainRegistry;
import com.hbm.sound.AudioWrapper;
@ -106,11 +103,11 @@ public class TileEntityMachineAssembler extends TileEntityMachineAssemblerBase i
speed /= (overLevel + 1);
consumption *= (overLevel + 1);
int rec = -1;
/*int rec = -1;
if(AssemblerRecipes.getOutputFromTempate(slots[4]) != null) {
ComparableStack comp = ItemAssemblyTemplate.readType(slots[4]);
rec = AssemblerRecipes.recipeList.indexOf(comp);
}
}*/
this.networkPackNT(150);
} else {

View File

@ -4,15 +4,10 @@ import java.util.List;
import java.util.Map.Entry;
import com.hbm.blocks.ModBlocks;
import com.hbm.explosion.ExplosionLarge;
import com.hbm.explosion.ExplosionThermo;
import com.hbm.interfaces.IFluidAcceptor;
import com.hbm.interfaces.IFluidSource;
import com.hbm.inventory.UpgradeManager;
import com.hbm.inventory.RecipesCommon.AStack;
import com.hbm.inventory.RecipesCommon.ComparableStack;
import com.hbm.inventory.container.ContainerMachineCyclotron;
import com.hbm.inventory.fluid.FluidType;
import com.hbm.inventory.fluid.Fluids;
import com.hbm.inventory.fluid.tank.FluidTank;
import com.hbm.inventory.gui.GUIMachineCyclotron;