🅱️alls

This commit is contained in:
Boblet 2025-06-10 15:32:47 +02:00
parent f03dca7470
commit 6bfca4e1fe
37 changed files with 162 additions and 220 deletions

View File

@ -1,81 +1,13 @@
## Added
* Two new anti-material rifle variants
* .50 BMG demolisher rounds are finally usable
* Added a special ammo type exclusive to one of the variants
* Starmetal .50 BMG now returns
* Overall better armor piercing stats than DU
* Not compatible with the M2, only usable in amat rifles
* Reworked chemical plant
* No longer needs template items for everything, comes with a convenient recipe selector GUI
* Three item and three fluids for in and outputs
* Slots are locked to the ingredients they accept, allowing for better performance and shift click support
* Item IO now works like most other machines instead of using chutes
* If the center block right above the chemplant is not air, it will render with a frame, making chemplant stacking actually nice to look at
* Now has a more convenient 3x3 footprint
* Features 12 access ports, more than enough for full coverage of the entire machine's IO
* Has an optional slot for template items separate from the recipe selector (i.e. secret recipes) (doesn't work yet since we don't have secret recipe :P)
* Ports are now standardized, no longer are fluids connected to ports that look like copper contacts
* Can't use upgrades just yet
## Changed
* Added Ukrainian localization
* The RBMK console's grid can now be rotated using a screwdriver
* Tool abilities have changed
* Right-clicking while holding ALT now opens a configuration window
* The configuration window allows creation of tool presets
* Area and block abilities can now be toggled independently from each other. For example, the vein miner ability can be combined with silk touch
* Clicking on the same ability allows switching between levels
* Updated textures for the armor and gun modification tables
* Ported the fire extinguisher to the SEDNA gun system, eliminating the final remaining ItemGunBase gun
* Water extinguishers can now wash away foam blocks
* Obliterated Fabsol's vodka
* Tier 4 heart piece is now called "heart of darkness"
* Thermal sights now render dead mobs in black
* Guns now have unique scope overlays instead of reusing the .44 scope for everything
* The new chemplant has slightly altered recipes
* Very basic mixing recipes (e.g. coolant) have been removed, it's now required to use the mixer
* Water to hydrogen peroxide is now 1,000 : 1,000 (instead of 1,000 : 800)
* Sulfuric acid's peroxide requirement has been adjusted accordingly
* Nitric acid has an alternate recipe using air and water, however it takes 4x as long and has a base consumption of 2kHE/t
* Desh now only takes 5 seconds to produce instead of 15
* Laminate now only takes 50mB of either fluid per recipe and processes much quicker
* Ducrete now uses U238 in the form of ferrouranium, decreasing U238 needed, and no longer requires gravel at all
* All recipes for nuclear fuel production now have a higher base consumption
* Base consumption in general has been tweaked for many later-game recipes. Many recipes however still use the old 100HE/t rate
* Cordite now uses sawdust instead of wood planks and sugar
* Kevlar is now made from aromatics, nitric acid and chlorine (or phosgene in 528 mode)
* Electrolysis using the chemplant has been removed. Hydrogen can be made using water and coal (or coke), and oxygen can be distilled from intake air
* Solid nuclear waste can also be vitrified now
* Thorium salt reprocessing now only has a 50% chance to produce a U233 nugget and a 25% chance to produce nuclear waste, making it less absurdly powerful and easier to deal with the waste
* Glyphid meat processing is now less autistic
* Making rusty steel now only takes 2 seconds per recipe
* Perfluoromethyl can now also be made in the chemical plant (technically, the process isn't just simple mixing after all)
* Recipe changes are still subject to balancing
* Removed niter to nitric acid liquefaction recipe
* Updated N2 model
* Glow in the dark paint not included (yet)
* Wooden scaffolds now have a slightly smaller hitbox and are climbable
* Hanging chains and vines can now be climbed by holding space
* Hopefully fixed the strand caster being weird for good
* Removed angry metal drop from meteorites (use the assembler recipe)
* The automatic buzzsaw can now handle crops
* The automatic buzzsaw will no longer clip through walls when extending
* The automatic buzzsaw can be turned off using a screwdriver
* Template folders now support page turning via scrolling
* Named crates will now show their names in the GUI as well as as a tooltip
* Vanilla anvils no longer increase experience costs when renaming an item
* Fans now have diminishing force, old behavior can be restored with the hand drill
* Opening the tool ability configuration menu is now its own keybind instead of using the copy tool's alt keybind + right click
* Cycling though tool abilities is now a custom keybind (still right click by default)
* Removed legacy hardron cooler
* Removed 20hz transformers
* High-octane diesel is now called high-cetane diesel
## Fixed
* Conveyor ejectors should now correctly place items onto the back of splitters instead of on the output belts
* Fixed strand caster fluid gauges going out of bounds
* Fixed arc welder and soldering station not changing buffer size based on upgrade, preventing use of higher overdrive tiers
* Fixed non-standard template folder recipes not using the correct icon
* Fixed jetpack flight time not resetting when equipped like armor, causing kicks on servers that don't have flying cheats allowed
* Fixed missing energy damage category localization
* Fixed server crash caused by tool abilities
* Fixed chunkloading entities not releasing their loading tickets properly
* Potentially fixed a dupe issue related to tool abilities
* Fixed certain sky features not being as bright as they should be
* Fixed detailed hitboxes behaving weird
* Fixed issue where empty crates would retain irrelevant NBT data, rendering them unstackable with freshly crafted crates
* Fixed new chemical plant ports not initializing their proxies properly
* Fixed chunkloading entities immediately throwing away their loader ticket
* Fixed builder jetpack not resetting flight time properly
* Fixed new chemplant's ferric schrabidate recipe
* Fixed single reload guns reloading multiple rounds at once when having multiple valid ammo stacks

View File

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

View File

@ -734,7 +734,6 @@ public class ModBlocks {
public static Block hadron_analysis_glass;
public static Block hadron_access;
public static Block hadron_core;
public static Block hadron_cooler;
public static Block pa_source;
public static Block pa_beamline;
@ -854,9 +853,7 @@ public class ModBlocks {
public static Block barrel_antimatter;
public static Block machine_transformer;
public static Block machine_transformer_20;
public static Block machine_transformer_dnt;
public static Block machine_transformer_dnt_20;
public static Block machine_solar_boiler;
public static Block solar_mirror;
@ -1855,7 +1852,6 @@ public class ModBlocks {
hadron_analysis_glass = new BlockNTMGlass(0, RefStrings.MODID + ":hadron_analysis_glass", Material.iron, true).setStepSound(Block.soundTypeMetal).setBlockName("hadron_analysis_glass").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":hadron_analysis_glass");
hadron_access = new BlockHadronAccess(Material.iron).setStepSound(Block.soundTypeMetal).setBlockName("hadron_access").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":hadron_access");
hadron_core = new BlockHadronCore(Material.iron).setStepSound(Block.soundTypeMetal).setBlockName("hadron_core").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":hadron_core");
hadron_cooler = new BlockHadronCooler(Material.iron).setBlockName("hadron_cooler").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F);
pa_source = new BlockPASource().setStepSound(Block.soundTypeMetal).setBlockName("pa_source").setHardness(5.0F).setResistance(10.0F);
pa_beamline = new BlockPABeamline().setStepSound(Block.soundTypeMetal).setBlockName("pa_beamline").setHardness(5.0F).setResistance(10.0F);
@ -1985,8 +1981,6 @@ public class ModBlocks {
machine_transformer = new MachineTransformer(Material.iron, 10000L, 1).setBlockName("machine_transformer").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":machine_transformer_iron");
machine_transformer_dnt = new MachineTransformer(Material.iron, 1000000000000000L, 1).setBlockName("machine_transformer_dnt").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":machine_transformer");
machine_transformer_20 = new MachineTransformer(Material.iron, 10000L, 20).setBlockName("machine_transformer_20").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":machine_transformer_iron");
machine_transformer_dnt_20 = new MachineTransformer(Material.iron, 1000000000000000L, 20).setBlockName("machine_transformer_dnt_20").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":machine_transformer");
machine_satlinker = new MachineSatLinker(Material.iron).setBlockName("machine_satlinker").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.missileTab).setBlockTextureName(RefStrings.MODID + ":machine_satlinker_side");
machine_keyforge = new MachineKeyForge(Material.iron).setBlockName("machine_keyforge").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.consumableTab).setBlockTextureName(RefStrings.MODID + ":machine_keyforge_side");
@ -3137,7 +3131,6 @@ public class ModBlocks {
GameRegistry.registerBlock(hadron_analysis_glass, hadron_analysis_glass.getUnlocalizedName());
GameRegistry.registerBlock(hadron_access, hadron_access.getUnlocalizedName());
GameRegistry.registerBlock(hadron_core, hadron_core.getUnlocalizedName());
register(hadron_cooler);
register(pa_source);
register(pa_beamline);
@ -3261,9 +3254,7 @@ public class ModBlocks {
register(capacitor_tantalium);
register(capacitor_schrabidate);
GameRegistry.registerBlock(machine_transformer, machine_transformer.getUnlocalizedName());
GameRegistry.registerBlock(machine_transformer_20, machine_transformer_20.getUnlocalizedName());
GameRegistry.registerBlock(machine_transformer_dnt, machine_transformer_dnt.getUnlocalizedName());
GameRegistry.registerBlock(machine_transformer_dnt_20, machine_transformer_dnt_20.getUnlocalizedName());
GameRegistry.registerBlock(machine_converter_he_rf, machine_converter_he_rf.getUnlocalizedName());
GameRegistry.registerBlock(machine_converter_rf_he, machine_converter_rf_he.getUnlocalizedName());
GameRegistry.registerBlock(machine_electric_furnace_off, machine_electric_furnace_off.getUnlocalizedName());

View File

@ -2,8 +2,9 @@ package com.hbm.blocks.machine;
import net.minecraft.block.material.Material;
public class BlockCMFlux extends BlockPillar{
public BlockCMFlux(Material mat, String top) {
super(mat, top);
}
public class BlockCMFlux extends BlockPillar {
public BlockCMFlux(Material mat, String top) {
super(mat, top);
}
}

View File

@ -2,8 +2,9 @@ package com.hbm.blocks.machine;
import net.minecraft.block.material.Material;
public class BlockCMHeat extends BlockPillar{
public BlockCMHeat(Material mat, String top) {
super(mat, top);
}
public class BlockCMHeat extends BlockPillar {
public BlockCMHeat(Material mat, String top) {
super(mat, top);
}
}

View File

@ -1,6 +1,7 @@
package com.hbm.blocks.machine;
import com.hbm.blocks.BlockDummyable;
import com.hbm.tileentity.TileEntityProxyCombo;
import com.hbm.tileentity.machine.TileEntityMachineChemicalPlant;
import net.minecraft.block.material.Material;
@ -18,6 +19,7 @@ public class MachineChemicalPlant extends BlockDummyable {
@Override
public TileEntity createNewTileEntity(World world, int meta) {
if(meta >= 12) return new TileEntityMachineChemicalPlant();
if(meta >= 6) return new TileEntityProxyCombo().inventory().power().fluid();
return null;
}

View File

@ -2,39 +2,31 @@ package com.hbm.blocks.machine;
import com.hbm.blocks.ModBlocks;
import com.hbm.lib.RefStrings;
import com.hbm.tileentity.machine.TileEntityMachineTransformer;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.block.BlockContainer;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.IIcon;
import net.minecraft.world.World;
public class MachineTransformer extends BlockContainer {
long buffer;
int delay;
public class MachineTransformer extends Block {
@SideOnly(Side.CLIENT)
private IIcon iconTop;
public MachineTransformer(Material p_i45394_1_, long b, int d) {
super(p_i45394_1_);
buffer = b;
delay = d;
}
@Override
@SideOnly(Side.CLIENT)
public void registerBlockIcons(IIconRegister iconRegister) {
if(this == ModBlocks.machine_transformer || this == ModBlocks.machine_transformer_20) {
if(this == ModBlocks.machine_transformer) {
this.iconTop = iconRegister.registerIcon(RefStrings.MODID + ":machine_transformer_top_iron");
this.blockIcon = iconRegister.registerIcon(RefStrings.MODID + ":machine_transformer_iron");
}
if(this == ModBlocks.machine_transformer_dnt || this == ModBlocks.machine_transformer_dnt_20) {
if(this == ModBlocks.machine_transformer_dnt) {
this.iconTop = iconRegister.registerIcon(RefStrings.MODID + ":machine_transformer_top");
this.blockIcon = iconRegister.registerIcon(RefStrings.MODID + ":machine_transformer");
}
@ -45,9 +37,4 @@ public class MachineTransformer extends BlockContainer {
public IIcon getIcon(int side, int metadata) {
return side == 1 ? this.iconTop : (side == 0 ? this.iconTop : this.blockIcon);
}
@Override
public TileEntity createNewTileEntity(World p_149915_1_, int p_149915_2_) {
return new TileEntityMachineTransformer();
}
}

View File

@ -1,5 +1,6 @@
package com.hbm.entity.item;
import com.google.common.collect.ImmutableSet;
import com.hbm.entity.logic.IChunkLoader;
import com.hbm.inventory.FluidStack;
import com.hbm.inventory.fluid.FluidType;
@ -193,7 +194,11 @@ public class EntityDeliveryDrone extends EntityDroneBase implements IInventory,
@Override
protected void loadNeighboringChunks() {
if(!worldObj.isRemote && loaderTicket != null) {
clearChunkLoader();
for(ChunkCoordIntPair chunk : ImmutableSet.copyOf(loaderTicket.getChunkList())) {
ForgeChunkManager.unforceChunk(loaderTicket, chunk);
}
// This is the lowest padding that worked with my drone waypoint path. if they stop getting loaded crank up paddingSize
for (ChunkCoordIntPair chunk : ChunkShapeHelper.getChunksAlongLineSegment((int) this.posX, (int) this.posZ, (int) (this.posX + this.motionX), (int) (this.posZ + this.motionZ), 4)){
ForgeChunkManager.forceChunk(loaderTicket, chunk);
@ -210,6 +215,7 @@ public class EntityDeliveryDrone extends EntityDroneBase implements IInventory,
public void clearChunkLoader() {
if(!worldObj.isRemote && loaderTicket != null) {
ForgeChunkManager.releaseTicket(loaderTicket);
this.loaderTicket = null;
}
}

View File

@ -46,6 +46,7 @@ public abstract class EntityExplosionChunkloading extends Entity implements IChu
public void clearChunkLoader() {
if(!worldObj.isRemote && loaderTicket != null && loadedChunk != null) {
ForgeChunkManager.releaseTicket(loaderTicket);
this.loaderTicket = null;
}
}
}

View File

@ -3,6 +3,7 @@ package com.hbm.entity.logic;
import java.util.ArrayList;
import java.util.List;
import com.google.common.collect.ImmutableSet;
import com.hbm.explosion.vanillant.ExplosionVNT;
import com.hbm.lib.ModDamageSource;
import com.hbm.main.MainRegistry;
@ -188,12 +189,15 @@ public abstract class EntityPlaneBase extends Entity implements IChunkLoader {
public void clearChunkLoader() {
if(!worldObj.isRemote && loaderTicket != null) {
ForgeChunkManager.releaseTicket(loaderTicket);
this.loaderTicket = null;
}
}
public void loadNeighboringChunks(int newChunkX, int newChunkZ) {
if(!worldObj.isRemote && loaderTicket != null) {
clearChunkLoader();
for(ChunkCoordIntPair chunk : ImmutableSet.copyOf(loaderTicket.getChunkList())) {
ForgeChunkManager.unforceChunk(loaderTicket, chunk);
}
loadedChunks.clear();
loadedChunks.add(new ChunkCoordIntPair(newChunkX, newChunkZ));
for(ChunkCoordIntPair chunk : loadedChunks) ForgeChunkManager.forceChunk(loaderTicket, chunk);

View File

@ -3,6 +3,7 @@ package com.hbm.entity.missile;
import java.util.ArrayList;
import java.util.List;
import com.google.common.collect.ImmutableSet;
import com.hbm.entity.logic.IChunkLoader;
import com.hbm.entity.projectile.EntityThrowableInterp;
import com.hbm.explosion.ExplosionLarge;
@ -202,7 +203,9 @@ public class EntityMissileAntiBallistic extends EntityThrowableInterp implements
public void loadNeighboringChunks(int newChunkX, int newChunkZ) {
if(!worldObj.isRemote && loaderTicket != null) {
clearChunkLoader();
for(ChunkCoordIntPair chunk : ImmutableSet.copyOf(loaderTicket.getChunkList())) {
ForgeChunkManager.unforceChunk(loaderTicket, chunk);
}
loadedChunks.clear();
for(int i = -1; i <= 1; i++) for(int j = -1; j <= 1; j++) loadedChunks.add(new ChunkCoordIntPair(newChunkX + i, newChunkZ + j));
@ -222,6 +225,7 @@ public class EntityMissileAntiBallistic extends EntityThrowableInterp implements
public void clearChunkLoader() {
if(!worldObj.isRemote && loaderTicket != null) {
ForgeChunkManager.releaseTicket(loaderTicket);
this.loaderTicket = null;
}
}

View File

@ -3,6 +3,7 @@ package com.hbm.entity.missile;
import java.util.ArrayList;
import java.util.List;
import com.google.common.collect.ImmutableSet;
import com.hbm.entity.logic.IChunkLoader;
import com.hbm.entity.projectile.EntityThrowableInterp;
import com.hbm.explosion.ExplosionLarge;
@ -328,7 +329,9 @@ public abstract class EntityMissileBaseNT extends EntityThrowableInterp implemen
public void loadNeighboringChunks(int newChunkX, int newChunkZ) {
if(!worldObj.isRemote && loaderTicket != null) {
clearChunkLoader();
for(ChunkCoordIntPair chunk : ImmutableSet.copyOf(loaderTicket.getChunkList())) {
ForgeChunkManager.unforceChunk(loaderTicket, chunk);
}
loadedChunks.clear();
loadedChunks.add(new ChunkCoordIntPair(newChunkX, newChunkZ));
@ -349,6 +352,7 @@ public abstract class EntityMissileBaseNT extends EntityThrowableInterp implemen
public void clearChunkLoader() {
if(!worldObj.isRemote && loaderTicket != null) {
ForgeChunkManager.releaseTicket(loaderTicket);
this.loaderTicket = null;
}
}

View File

@ -3,6 +3,7 @@ package com.hbm.entity.projectile;
import java.util.ArrayList;
import java.util.List;
import com.google.common.collect.ImmutableSet;
import com.hbm.entity.logic.IChunkLoader;
import com.hbm.entity.projectile.rocketbehavior.IRocketSteeringBehavior;
import com.hbm.entity.projectile.rocketbehavior.IRocketTargetingBehavior;
@ -159,7 +160,9 @@ public class EntityArtilleryRocket extends EntityThrowableInterp implements IChu
public void loadNeighboringChunks(int newChunkX, int newChunkZ) {
if(!worldObj.isRemote && loaderTicket != null) {
clearChunkLoader();
for(ChunkCoordIntPair chunk : ImmutableSet.copyOf(loaderTicket.getChunkList())) {
ForgeChunkManager.unforceChunk(loaderTicket, chunk);
}
loadedChunks.clear();
loadedChunks.add(new ChunkCoordIntPair(newChunkX, newChunkZ));
@ -179,6 +182,7 @@ public class EntityArtilleryRocket extends EntityThrowableInterp implements IChu
public void clearChunkLoader() {
if(!worldObj.isRemote && loaderTicket != null) {
ForgeChunkManager.releaseTicket(loaderTicket);
this.loaderTicket = null;
}
}

View File

@ -3,6 +3,7 @@ package com.hbm.entity.projectile;
import java.util.ArrayList;
import java.util.List;
import com.google.common.collect.ImmutableSet;
import com.hbm.entity.logic.IChunkLoader;
import com.hbm.items.weapon.ItemAmmoArty;
import com.hbm.items.weapon.ItemAmmoArty.ArtilleryShell;
@ -194,7 +195,9 @@ public class EntityArtilleryShell extends EntityThrowableNT implements IChunkLoa
public void loadNeighboringChunks(int newChunkX, int newChunkZ) {
if(!worldObj.isRemote && loaderTicket != null) {
clearChunkLoader();
for(ChunkCoordIntPair chunk : ImmutableSet.copyOf(loaderTicket.getChunkList())) {
ForgeChunkManager.unforceChunk(loaderTicket, chunk);
}
loadedChunks.clear();
loadedChunks.add(new ChunkCoordIntPair(newChunkX, newChunkZ));
@ -214,6 +217,7 @@ public class EntityArtilleryShell extends EntityThrowableNT implements IChunkLoa
public void clearChunkLoader() {
if(!worldObj.isRemote && loaderTicket != null) {
ForgeChunkManager.releaseTicket(loaderTicket);
this.loaderTicket = null;
}
}

View File

@ -3,6 +3,7 @@ package com.hbm.entity.projectile;
import java.util.ArrayList;
import java.util.List;
import com.google.common.collect.ImmutableSet;
import com.hbm.entity.logic.IChunkLoader;
import com.hbm.items.weapon.sedna.BulletConfig;
import com.hbm.main.MainRegistry;
@ -61,13 +62,17 @@ public class EntityBulletBaseMK4CL extends EntityBulletBaseMK4 implements IChunk
public void clearChunkLoader() {
if(!worldObj.isRemote && loaderTicket != null) {
ForgeChunkManager.releaseTicket(loaderTicket);
this.loaderTicket = null;
}
}
public void loadNeighboringChunks(int newChunkX, int newChunkZ) {
if(!worldObj.isRemote && loaderTicket != null) {
clearChunkLoader();
for(ChunkCoordIntPair chunk : ImmutableSet.copyOf(loaderTicket.getChunkList())) {
ForgeChunkManager.unforceChunk(loaderTicket, chunk);
}
loadedChunks.clear();
loadedChunks.add(new ChunkCoordIntPair(newChunkX, newChunkZ));

View File

@ -335,14 +335,14 @@ public class ExplosionNukeRayParallelized implements IExplosionRay {
adder.add(damageAmount);
}
public float getDamage(int bitIndex) {
/*public float getDamage(int bitIndex) {
DoubleAdder adder = damageMap.get(bitIndex);
return adder == null ? 0f : (float) adder.sum();
}
}*/
public void clearDamage(int bitIndex) {
/*public void clearDamage(int bitIndex) {
damageMap.remove(bitIndex);
}
}*/
public Set<Map.Entry<Integer, DoubleAdder>> entrySet() {
return damageMap.entrySet();

View File

@ -1,6 +1,7 @@
package com.hbm.handler;
import com.hbm.inventory.gui.GUICalculator;
import com.hbm.items.IKeybindReceiver;
import cpw.mods.fml.common.FMLCommonHandler;
import org.lwjgl.input.Keyboard;
@ -14,8 +15,9 @@ import cpw.mods.fml.client.registry.ClientRegistry;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import cpw.mods.fml.common.gameevent.InputEvent.KeyInputEvent;
import cpw.mods.fml.common.gameevent.InputEvent.MouseInputEvent;
import net.minecraft.client.Minecraft;
import net.minecraft.client.settings.KeyBinding;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
public class HbmKeybinds {
@ -28,6 +30,8 @@ public class HbmKeybinds {
public static KeyBinding dashKey = new KeyBinding(category + ".dash", Keyboard.KEY_LSHIFT, category);
public static KeyBinding trainKey = new KeyBinding(category + ".trainInv", Keyboard.KEY_R, category);
public static KeyBinding abilityCycle = new KeyBinding(category + ".ability", -99, category);
public static KeyBinding abilityAlt = new KeyBinding(category + ".abilityAlt", Keyboard.KEY_LMENU, category);
public static KeyBinding copyToolAlt = new KeyBinding(category + ".copyToolAlt", Keyboard.KEY_LMENU, category);
public static KeyBinding copyToolCtrl = new KeyBinding(category + ".copyToolCtrl", Keyboard.KEY_LCONTROL, category);
@ -60,6 +64,7 @@ public class HbmKeybinds {
ClientRegistry.registerKeyBinding(craneLeftKey);
ClientRegistry.registerKeyBinding(craneRightKey);
ClientRegistry.registerKeyBinding(craneLoadKey);
ClientRegistry.registerKeyBinding(abilityAlt);
ClientRegistry.registerKeyBinding(copyToolAlt);
ClientRegistry.registerKeyBinding(copyToolCtrl);
}
@ -81,12 +86,13 @@ public class HbmKeybinds {
@SubscribeEvent
public void keyEvent(KeyInputEvent event) {
EntityPlayer player = MainRegistry.proxy.me();
if (calculatorKey.getIsKeyPressed()) { // handle the calculator client-side only
Minecraft.getMinecraft().thePlayer.closeScreen();
player.closeScreen();
FMLCommonHandler.instance().showGuiScreen(new GUICalculator());
}
HbmPlayerProps props = HbmPlayerProps.getData(MainRegistry.proxy.me());
HbmPlayerProps props = HbmPlayerProps.getData(player);
for(EnumKeybind key : EnumKeybind.values()) {
boolean last = props.getKeyPressed(key);
@ -95,10 +101,20 @@ public class HbmKeybinds {
if(last != current) {
PacketDispatcher.wrapper.sendToServer(new KeybindPacket(key, current));
props.setKeyPressed(key, current);
onPressedClient(player, key, current);
}
}
}
public static void onPressedClient(EntityPlayer player, EnumKeybind key, boolean state) {
// ITEM HANDLING
ItemStack held = player.getHeldItem();
if(held != null && held.getItem() instanceof IKeybindReceiver) {
IKeybindReceiver rec = (IKeybindReceiver) held.getItem();
if(rec.canHandleKeybind(player, held, key)) rec.handleKeybindClient(player, held, key, state);
}
}
public static enum EnumKeybind {
JETPACK,
TOGGLE_JETPACK,
@ -111,6 +127,8 @@ public class HbmKeybinds {
CRANE_LEFT,
CRANE_RIGHT,
CRANE_LOAD,
ABILITY_CYCLE,
ABILITY_ALT,
TOOL_ALT,
TOOL_CTRL,
GUN_PRIMARY,

View File

@ -217,6 +217,7 @@ public class ChemicalPlantRecipes extends GenericRecipes<GenericRecipe> {
.outputFluids(new FluidStack(Fluids.SCHRABIDIC, 16000)));
this.register(new GenericRecipe("chem.schrabidate").setup(150, 5_000)
.inputItems(new OreDictStack(IRON.dust()))
.inputFluids(new FluidStack(Fluids.SCHRABIDIC, 250))
.outputItems(new ItemStack(ModItems.powder_schrabidate)));

View File

@ -9,4 +9,5 @@ public interface IKeybindReceiver {
public boolean canHandleKeybind(EntityPlayer player, ItemStack stack, EnumKeybind keybind);
public void handleKeybind(EntityPlayer player, ItemStack stack, EnumKeybind keybind, boolean state);
public default void handleKeybindClient(EntityPlayer player, ItemStack stack, EnumKeybind keybind, boolean state) { }
}

View File

@ -71,8 +71,9 @@ public class JetpackBreak extends JetpackFueledBase {
world.playSoundEffect(player.posX, player.posY, player.posZ, "hbm:weapon.flamethrowerShoot", 0.25F, 1.5F);
this.useUpFuel(player, stack, 10);
ArmorUtil.resetFlightTime(player);
}
ArmorUtil.resetFlightTime(player);
}
}

View File

@ -13,9 +13,9 @@ import com.google.common.collect.Multimap;
import com.google.common.collect.Sets;
import com.hbm.inventory.gui.GUIScreenToolAbility;
import com.hbm.items.IItemControlReceiver;
import com.hbm.handler.HbmKeybinds;
import com.hbm.items.IKeybindReceiver;
import com.hbm.handler.HbmKeybinds.EnumKeybind;
import com.hbm.blocks.ModBlocks;
import com.hbm.extprop.HbmPlayerProps;
import com.hbm.handler.ability.AvailableAbilities;
import com.hbm.handler.ability.IBaseAbility;
import com.hbm.handler.ability.IToolAreaAbility;
@ -54,7 +54,7 @@ import net.minecraftforge.common.ForgeHooks;
import net.minecraftforge.common.IShearable;
import net.minecraftforge.event.world.BlockEvent;
public class ItemToolAbility extends ItemTool implements IDepthRockTool, IGUIProvider, IItemControlReceiver {
public class ItemToolAbility extends ItemTool implements IDepthRockTool, IGUIProvider, IItemControlReceiver, IKeybindReceiver {
protected boolean isShears = false;
protected EnumToolType toolType;
@ -251,37 +251,6 @@ public class ItemToolAbility extends ItemTool implements IDepthRockTool, IGUIPro
}
}
public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) {
if(!canOperate(stack))
return super.onItemRightClick(stack, world, player);
if(HbmPlayerProps.getData(player).getKeyPressed(HbmKeybinds.EnumKeybind.TOOL_ALT)) {
if(world.isRemote) player.openGui(MainRegistry.instance, 0, world, 0, 0, 0);
return stack;
}
Configuration config = getConfiguration(stack);
if(config.presets.size() < 2 || world.isRemote)
return super.onItemRightClick(stack, world, player);
if(player.isSneaking()) {
config.currentPreset = 0;
} else {
config.currentPreset = (config.currentPreset + 1) % config.presets.size();
}
setConfiguration(stack, config);
PacketDispatcher.wrapper.sendTo(new PlayerInformPacket(config.getActivePreset().getMessage(), MainRegistry.proxy.ID_TOOLABILITY), (EntityPlayerMP) player);
world.playSoundAtEntity(player, "random.orb", 0.25F, config.getActivePreset().isNone() ? 0.75F : 1.25F);
return stack;
}
public void breakExtraBlock(World world, int x, int y, int z, EntityPlayer playerEntity, int refX, int refY, int refZ) {
if(world.isAirBlock(x, y, z))
@ -521,4 +490,38 @@ public class ItemToolAbility extends ItemTool implements IDepthRockTool, IGUIPro
public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) {
return new GUIScreenToolAbility(this.availableAbilities);
}
@Override
public boolean canHandleKeybind(EntityPlayer player, ItemStack stack, EnumKeybind keybind) {
if(player.worldObj.isRemote) return keybind == EnumKeybind.ABILITY_ALT;
return keybind == EnumKeybind.ABILITY_CYCLE;
}
@Override
public void handleKeybind(EntityPlayer player, ItemStack stack, EnumKeybind keybind, boolean state) {
if(keybind == EnumKeybind.ABILITY_CYCLE && state) {
World world = player.worldObj;
if(!canOperate(stack)) return;
Configuration config = getConfiguration(stack);
if(config.presets.size() < 2 || world.isRemote) return;
if(player.isSneaking()) {
config.currentPreset = 0;
} else {
config.currentPreset = (config.currentPreset + 1) % config.presets.size();
}
setConfiguration(stack, config);
PacketDispatcher.wrapper.sendTo(new PlayerInformPacket(config.getActivePreset().getMessage(), MainRegistry.proxy.ID_TOOLABILITY), (EntityPlayerMP) player);
world.playSoundAtEntity(player, "random.orb", 0.25F, config.getActivePreset().isNone() ? 0.75F : 1.25F);
}
}
@Override
public void handleKeybindClient(EntityPlayer player, ItemStack stack, EnumKeybind keybind, boolean state) {
if(state) player.openGui(MainRegistry.instance, 0, player.worldObj, 0, 0, 0);
}
}

View File

@ -98,6 +98,8 @@ public abstract class MagazineSingleTypeBase implements IMagazine<BulletConfig>
for(int i = 0; i < inventory.getSizeInventory(); i++) {
ItemStack slot = inventory.getStackInSlot(i);
if(loadLimit <= 0) return;
if(slot != null) {
//mag is empty, assume next best type
@ -110,6 +112,7 @@ public abstract class MagazineSingleTypeBase implements IMagazine<BulletConfig>
int toLoad = BobMathUtil.min(wantsToLoad, slot.stackSize, loadLimit);
this.setAmount(stack, Math.min(toLoad * config.ammoReloadCount, this.capacity));
inventory.decrStackSize(i, toLoad);
loadLimit -= toLoad;
break;
}
}
@ -124,6 +127,7 @@ public abstract class MagazineSingleTypeBase implements IMagazine<BulletConfig>
int toLoad = BobMathUtil.min(wantsToLoad, slot.stackSize, loadLimit);
this.setAmount(stack, Math.min((toLoad * config.ammoReloadCount) + alreadyLoaded, this.capacity));
inventory.decrStackSize(i, toLoad);
loadLimit -= toLoad;
}
}
@ -146,6 +150,7 @@ public abstract class MagazineSingleTypeBase implements IMagazine<BulletConfig>
int toLoad = BobMathUtil.min(wantsToLoad, infBag ? 9_999 : bagslot.stackSize, loadLimit);
this.setAmount(stack, Math.min(toLoad * config.ammoReloadCount, this.capacity));
if(!infBag) bag.decrStackSize(j, toLoad);
loadLimit -= toLoad;
break;
}
}
@ -160,6 +165,7 @@ public abstract class MagazineSingleTypeBase implements IMagazine<BulletConfig>
int toLoad = BobMathUtil.min(wantsToLoad, infBag ? 9_999 : bagslot.stackSize, loadLimit);
this.setAmount(stack, Math.min((toLoad * config.ammoReloadCount) + alreadyLoaded, this.capacity));
if(!infBag) bag.decrStackSize(j, toLoad);
loadLimit -= toLoad;
}
}
}

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 (5356)";
public static final String VERSION = "1.0.27 BETA (5357)";
//HBM's Beta Naming Convention:
//V T (X)
//V -> next release version

View File

@ -2081,8 +2081,10 @@ public class ClientProxy extends ServerProxy {
case CRANE_LEFT: return HbmKeybinds.craneLeftKey.getIsKeyPressed();
case CRANE_RIGHT: return HbmKeybinds.craneRightKey.getIsKeyPressed();
case CRANE_LOAD: return HbmKeybinds.craneLoadKey.getIsKeyPressed();
case TOOL_ALT: return HbmKeybinds.copyToolAlt.getIsKeyPressed();
case TOOL_CTRL: return HbmKeybinds.copyToolCtrl.getIsKeyPressed();
case ABILITY_CYCLE: return HbmKeybinds.abilityCycle.getIsKeyPressed();
case ABILITY_ALT: return HbmKeybinds.abilityAlt.getIsKeyPressed();
case TOOL_ALT: return HbmKeybinds.copyToolAlt.getIsKeyPressed();
case TOOL_CTRL: return HbmKeybinds.copyToolCtrl.getIsKeyPressed();
case GUN_PRIMARY: return HbmKeybinds.gunPrimaryKey.getIsKeyPressed();
case GUN_SECONDARY: return HbmKeybinds.gunSecondaryKey.getIsKeyPressed();
case GUN_TERTIARY: return HbmKeybinds.gunTertiaryKey.getIsKeyPressed();

View File

@ -1690,6 +1690,9 @@ public class MainRegistry {
ignoreMappings.add("hbm:item.test_nuke_tier2_bullet");
ignoreMappings.add("hbm:item.test_nuke_tier1_target");
ignoreMappings.add("hbm:item.test_nuke_tier2_target");
ignoreMappings.add("hbm:tile.hadron_cooler");
ignoreMappings.add("hbm:tile.machine_transformer_20");
ignoreMappings.add("hbm:tile.machine_transformer_dnt_20");
/// REMAP ///
remapItems.put("hbm:item.gadget_explosive8", ModItems.early_explosive_lenses);

View File

@ -40,7 +40,6 @@ public class KeybindPacket implements IMessage {
EntityPlayer p = ctx.getServerHandler().playerEntity;
HbmKeybindsServer.onPressedServer(p, EnumKeybind.values()[m.key], m.pressed);
return null;
}
}

View File

@ -112,7 +112,6 @@ public class TileMappings {
put(TileEntityMachineSiren.class, "tileentity_siren");
put(TileEntityMachineSPP.class, "tileentity_spp");
put(TileEntityMachineRadGen.class, "tileentity_radgen");
put(TileEntityMachineTransformer.class, "tileentity_transformer");
put(TileEntityMachineRadarNT.class, "tileentity_radar");
put(TileEntityMachineRadarLarge.class, "tileentity_radar_large");
put(TileEntityMachineRadarScreen.class, "tileentity_radar_screen");

View File

@ -400,8 +400,6 @@ public class TileEntityHadron extends TileEntityMachineBase implements IEnergyRe
int charge;
int analysis;
boolean isCheckExempt = false;
int cl0 = 0;
int cl1 = 0;
boolean expired = false;
boolean cloned = false;
@ -436,8 +434,6 @@ public class TileEntityHadron extends TileEntityMachineBase implements IEnergyRe
p.charge = charge;
p.analysis = analysis;
p.isCheckExempt = isCheckExempt;
p.cl0 = cl0;
p.cl1 = cl1;
p.expired = expired;
p.plugs = new ArrayList<TileEntityHadronPower>(plugs);
p.cloned = true;
@ -476,27 +472,9 @@ public class TileEntityHadron extends TileEntityMachineBase implements IEnergyRe
if(charge < 0)
expire(this, EnumHadronState.ERROR_NO_CHARGE);
if(cl0 > 0) cl0--;
if(cl1 > 0) cl1--;
}
public void incrementCharge(int coilVal) {
//not the best code ever made but it works, dammit
if(cl1 > 0) {
double mult = 2D - (cl1 - 15D) * (cl1 - 15D) / 225D;
mult = Math.max(mult, 0.1D);
coilVal *= mult;
} else if(cl0 > 0) {
if(cl0 > 10) {
coilVal *= 0.75;
} else {
coilVal *= 1.10;
}
}
this.momentum += coilVal;
}
@ -618,11 +596,6 @@ public class TileEntityHadron extends TileEntityMachineBase implements IEnergyRe
} else {
p.charge -= coilVal;
totalValue += coilVal;
if(block == ModBlocks.hadron_cooler) {
if(meta == 0) p.cl0 += 10;
if(meta == 1) p.cl1 += 5;
}
}
continue;
@ -842,9 +815,6 @@ public class TileEntityHadron extends TileEntityMachineBase implements IEnergyRe
public boolean isValidCoil(Block b) {
if(coilValue(b) > 0) return true;
if(b == ModBlocks.hadron_cooler) return true;
return false;
}
@ -862,8 +832,7 @@ public class TileEntityHadron extends TileEntityMachineBase implements IEnergyRe
b instanceof BlockHadronCoil ||
b == ModBlocks.hadron_plating_glass ||
b == ModBlocks.hadron_analysis_glass ||
b == ModBlocks.hadron_access ||
b == ModBlocks.hadron_cooler;
b == ModBlocks.hadron_access;
}
public boolean isAnalysis(Block b) {

View File

@ -1,6 +0,0 @@
package com.hbm.tileentity.machine;
import net.minecraft.tileentity.TileEntity;
public class TileEntityMachineTransformer extends TileEntity {
}

View File

@ -882,7 +882,7 @@ public class BunkerComponents {
fillWithMetadataBlocks(world, box, 1, 1, 1, 1, 1, 5, ModBlocks.concrete_smooth_stairs, stairMetaW | 4);
fillWithBlocks(world, box, 1, 1, 6, 1, 3, 6, ModBlocks.concrete_pillar);
fillWithMetadataBlocks(world, box, 1, 3, 1, 1, 3, 5, ModBlocks.concrete_smooth_stairs, stairMetaW);
placeBlockAtCurrentPosition(world, ModBlocks.machine_transformer_20, 0, 1, 2, 1, box);
placeBlockAtCurrentPosition(world, ModBlocks.machine_transformer, 0, 1, 2, 1, box);
placeBlockAtCurrentPosition(world, ModBlocks.cable_diode, decoMetaN, 1, 2, 2, box);
placeBlockAtCurrentPosition(world, ModBlocks.machine_battery, decoMetaE, 1, 2, 3, box);
placeBlockAtCurrentPosition(world, ModBlocks.deco_red_copper, 0, 1, 2, 4, box);

View File

@ -707,6 +707,8 @@ hazard.particleFine=Feinstaub
hazard.sand=Augenreizstoffe
hbm.key=NTM Hotkeys
hbm.key.ability=Werkzeug umschalten
hbm.key.abilityAlt=Werkzeug konfigurieren
hbm.key.calculator=Taschenrechner
hbm.key.copyToolAlt=Kopierwerkzeug: Einfügen umschalten
hbm.key.copyToolCtrl=Kopierwerkzeug: Auf Rohre einfügen
@ -721,6 +723,7 @@ hbm.key.gunSecondary=Sekundärfeuer
hbm.key.gunTertitary=Zielvisier
hbm.key.toggleBack=Jetpack umschalten
hbm.key.toggleHUD=HUD umschalten
hbm.key.toggleMagnet=Magnet umschalten
hbm.key.trainInv=Zug-Inventar
hbm.key.reload=Nachladen
@ -756,8 +759,8 @@ hbmfluid.death=Osmiridiumlösung
hbmfluid.deuterium=Deuterium
hbmfluid.diesel=Diesel
hbmfluid.diesel_crack=Crackdiesel
hbmfluid.diesel_crack_reform=Hochoktan-Diesel
hbmfluid.diesel_reform=Hochoktan-Crackdiesel
hbmfluid.diesel_crack_reform=Hochcetan-Diesel
hbmfluid.diesel_reform=Hochcetan-Crackdiesel
hbmfluid.egg=Gelöstes Ei
hbmfluid.estradiol=Estradiollösung
hbmfluid.ethanol=Ethanol
@ -4161,8 +4164,8 @@ tile.factory_titanium_furnace.name=Einfache Fabrikzugriffsluke
tile.factory_titanium_hull.name=Fabrikblock
tile.fallout.name=Fallout
tile.fan.name=Ventilator
tile.fan.desc=Kann mit Redstone aktiviert werden$Bewegt Entities bis zu 10 Blöcke$Rechtsclick mit Schraubenzieher um den Ventilator umzudrehen$Klicken Sie mit der rechten Maustaste mit der Handbohrmaschine um den Modus zu wechseln
tile.fan.falloffOn=Die Lüfterleistung nimmt mit der Entfernung ab
tile.fan.desc=Kann mit Redstone aktiviert werden$Bewegt Entities bis zu 10 Blöcke$Rechtsclick mit Schraubenzieher um den Ventilator umzudrehen$Rechtsclick mit Handbohrmaschine um den Modus zu wechseln
tile.fan.falloffOn=Die Ventilatorleistung nimmt mit Entfernung ab
tile.fan.falloffOff=Konstante Lüfterleistung
tile.fence_metal.name=Maschendrahtzaun
tile.fence_metal_post.name=Maschendrahtzaun-Pfahl
@ -4262,8 +4265,6 @@ tile.hadron_coil_neodymium.name=Dichte Neodymspule
tile.hadron_coil_schrabidate.name=Dichte Schrabidatspule
tile.hadron_coil_schrabidium.name=Dichte Schrabidiumspule
tile.hadron_coil_starmetal.name=Dichte Sternenmetallspule
tile.hadron_cooler.name=Teilchenbeschleuniger-Kühlungseinheit
tile.hadron_cooler_mk2.nameTeilchenbeschleuniger-Kühlungseinheit - Das Palindrome-Spezial
tile.hadron_core.name=Teilchenbeschleuniger-Kernkomponente
tile.hadron_diode.name=Schottky-Partikeldiode
tile.hadron_plating.name=Teilchenbeschleuniger-Außenwand

View File

@ -1414,6 +1414,8 @@ hazard.particleFine=Particulates
hazard.sand=Eye Irritants
hbm.key=NTM Hotkeys
hbm.key.ability=Cycle Tool Abilities
hbm.key.abilityAlt=Configure Tool Abilities
hbm.key.calculator=Calculator
hbm.key.copyToolAlt=Copy Tool: Switch Paste
hbm.key.copyToolCtrl=Copy Tool: Paste to Pipes
@ -1428,6 +1430,7 @@ hbm.key.gunSecondary=Secondary Fire
hbm.key.gunTertitary=Gun Sights
hbm.key.toggleBack=Toggle Jetpack
hbm.key.toggleHUD=Toggle HUD
hbm.key.toggleMagnet=Toggle Magnet
hbm.key.trainInv=Train Inventory
hbm.key.reload=Reload
@ -1465,8 +1468,8 @@ hbmfluid.death=Osmiridic Solution
hbmfluid.deuterium=Deuterium
hbmfluid.diesel=Diesel
hbmfluid.diesel_crack=Cracked Diesel
hbmfluid.diesel_crack_reform=High-Octane Cracked Diesel
hbmfluid.diesel_reform=High-Octane Diesel
hbmfluid.diesel_crack_reform=High-Cetane Cracked Diesel
hbmfluid.diesel_reform=High-Cetane Diesel
hbmfluid.egg=Dissolved Egg
hbmfluid.estradiol=Estradiol Solution
hbmfluid.ethanol=Ethanol
@ -5387,10 +5390,6 @@ tile.hadron_coil_neodymium.name=Dense Neodymium Coil
tile.hadron_coil_schrabidate.name=Dense Schrabidate Coil
tile.hadron_coil_schrabidium.name=Dense Schrabidic Coil
tile.hadron_coil_starmetal.name=Dense Starmetal Coil
tile.hadron_cooler.name=Particle Accelerator Cooling Unit
tile.hadron_cooler.desc=Cooling power: 10$Overcooling threshold: 10$Cooling bonus: +10%%$Overcooling penalty: -25%%
tile.hadron_cooler_mk2.name=Particle Accelerator Cooling Unit - The Palindrome Special
tile.hadron_cooler_mk2.desc=Cooling power: 5$Efficiency function: 2-(cooling-15)²/225$Maximum penalty: -90%%
tile.hadron_core.name=Particle Accelerator Core Component
tile.hadron_diode.name=Schottky Particle Diode
tile.hadron_plating.name=Particle Accelerator Plating

Binary file not shown.

Before

Width:  |  Height:  |  Size: 284 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 331 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 319 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 307 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 325 B