Merge branch 'HbmMods:master' into master

This commit is contained in:
pheo 2025-04-30 15:31:29 +01:00 committed by GitHub
commit c2a2a99a80
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
12 changed files with 68 additions and 108 deletions

View File

@ -1,8 +1,14 @@
## Changed
* Nerfed AP and DU round damage multiplier
* Effective damage is still much higher than on gunmetal ammo due to the armor piercing effect
* Increased flamethrower turret detection range from 32 to 48 blocks
* Flamethrower turrets now use the green fire effect when using balefire fuel
* Flamethrower turret projectile damage is now capped to 20
* Balefire fuel should no longer instantly vaporize bosses
## Fixed
* Fixed a potential crash caused by cargo dropships landing on cargo docks with no satellite chip installed
* Fixed potential crash related to hazard handling for dropped items
* Fixed errors thrown when loading in old system bullet entities
* Fixed errors thrown when loading in old system bullet entities
* Fixed dupe regarding breaking transport drones
* Fixed 12 gauge flechette DT negation not being the intended value

View File

@ -214,18 +214,10 @@ public class BlockStorageCrate extends BlockContainer implements IBlockMulti, IT
int i = MathHelper.floor_double(player.rotationYaw * 4.0F / 360.0F + 0.5D) & 3;
if(i == 0) {
world.setBlockMetadataWithNotify(x, y, z, 2, 2);
}
if(i == 1) {
world.setBlockMetadataWithNotify(x, y, z, 5, 2);
}
if(i == 2) {
world.setBlockMetadataWithNotify(x, y, z, 3, 2);
}
if(i == 3) {
world.setBlockMetadataWithNotify(x, y, z, 4, 2);
}
if(i == 0) world.setBlockMetadataWithNotify(x, y, z, 2, 2);
if(i == 1) world.setBlockMetadataWithNotify(x, y, z, 5, 2);
if(i == 2) world.setBlockMetadataWithNotify(x, y, z, 3, 2);
if(i == 3) world.setBlockMetadataWithNotify(x, y, z, 4, 2);
}
@Override

View File

@ -35,6 +35,8 @@ public class EntityDeliveryDrone extends EntityDroneBase implements IInventory,
@Override
public boolean hitByEntity(Entity attacker) {
if(this.isDead) return false;
if(attacker instanceof EntityPlayer && !worldObj.isRemote) {
this.setDead();
for (ItemStack stack : slots) {

View File

@ -43,6 +43,8 @@ public class EntityRequestDrone extends EntityDroneBase {
@Override
public boolean hitByEntity(Entity attacker) {
if(this.isDead) return false;
if(attacker instanceof EntityPlayer && !worldObj.isRemote) {
this.setDead();
if(heldItem != null)

View File

@ -23,14 +23,9 @@ public abstract class ItemInventory implements IInventory {
public ItemStack[] slots;
public ItemStack target;
public boolean toMarkDirty = false;
@Override
public void markDirty() {
if(!toMarkDirty || player.getEntityWorld().isRemote)
return;
for(int i = 0; i < getSizeInventory(); ++i) {
if(getStackInSlot(i) != null && getStackInSlot(i).stackSize == 0) {
slots[i] = null;
@ -38,7 +33,6 @@ public abstract class ItemInventory implements IInventory {
}
ItemStackUtil.addStacksToNBT(target, slots); // Maintain compatibility with the containment boxes.
target.setTagCompound(checkNBT(target.getTagCompound()));
}
@ -93,9 +87,10 @@ public abstract class ItemInventory implements IInventory {
@Override
public ItemStack decrStackSize(int slot, int amount) {
ItemStack stack = getStackInSlot(slot);
if (stack != null) {
if(stack != null) {
if (stack.stackSize > amount) {
stack = stack.splitStack(amount);
markDirty();
} else {
setInventorySlotContents(slot, null);
}
@ -110,6 +105,7 @@ public abstract class ItemInventory implements IInventory {
}
slots[slot] = stack;
markDirty();
}
@Override
@ -119,36 +115,12 @@ public abstract class ItemInventory implements IInventory {
return stack;
}
@Override
public ItemStack getStackInSlot(int slot) {
return slots[slot];
}
@Override public ItemStack getStackInSlot(int slot) { return slots[slot]; }
@Override
public boolean isUseableByPlayer(EntityPlayer player) {
return true;
}
@Override public boolean isUseableByPlayer(EntityPlayer player) { return true; }
@Override public boolean isItemValidForSlot(int slot, ItemStack stack) { return true; }
@Override public int getInventoryStackLimit() { return 64; }
@Override
public boolean isItemValidForSlot(int slot, ItemStack stack) {
return true;
}
@Override
public int getInventoryStackLimit() {
return 64;
}
@Override
public void openInventory() {
player.worldObj.playSoundEffect(player.posX, player.posY, player.posZ, "hbm:block.crateOpen", 1.0F, 0.8F);
}
@Override
public void closeInventory() {
toMarkDirty = true;
markDirty();
toMarkDirty = false;
player.worldObj.playSoundEffect(player.posX, player.posY, player.posZ, "hbm:block.crateClose", 1.0F, 0.8F);
}
@Override public void openInventory() { player.worldObj.playSoundEffect(player.posX, player.posY, player.posZ, "hbm:block.crateOpen", 1.0F, 0.8F); }
@Override public void closeInventory() { player.worldObj.playSoundEffect(player.posX, player.posY, player.posZ, "hbm:block.crateClose", 1.0F, 0.8F); }
}

View File

@ -8,6 +8,7 @@ import com.hbm.items.tool.ItemKey;
import com.hbm.main.MainRegistry;
import com.hbm.tileentity.IGUIProvider;
import com.hbm.tileentity.machine.storage.*;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.block.Block;
@ -34,12 +35,10 @@ public class ItemBlockStorageCrate extends ItemBlockBase implements IGUIProvider
if(!world.isRemote && stack.stackSize == 1) {
if (stack.stackTagCompound != null && stack.stackTagCompound.hasKey("lock")) {
for (ItemStack item : player.inventory.mainInventory) {
if(item == null) // Skip if no item.
continue;
if(!(item.getItem() instanceof ItemKey)) // Skip if item isn't a key.
continue;
if(item.stackTagCompound == null) // Skip if there is no NBT (wouldn't open it anyway).
continue;
if(item == null) continue; // Skip if no item.
if(!(item.getItem() instanceof ItemKey)) continue; // Skip if item isn't a key.
if(item.stackTagCompound == null) continue; // Skip if there is no NBT (wouldn't open it anyway).
if (item.stackTagCompound.getInteger("pins") == stack.stackTagCompound.getInteger("lock")) { // Check if pins are equal (if it can open it)
TileEntityCrateBase.spawnSpiders(player, world, stack);
player.openGui(MainRegistry.instance, 0, world, 0, 0, 0);
@ -81,22 +80,19 @@ public class ItemBlockStorageCrate extends ItemBlockBase implements IGUIProvider
}
public static class InventoryCrate extends ItemInventory {
public InventoryCrate(EntityPlayer player, ItemStack crate) {
this.player = player;
this.target = crate;
slots = new ItemStack[this.getSizeInventory()];
if(crate.stackTagCompound == null)
crate.stackTagCompound = new NBTTagCompound();
else if(!player.worldObj.isRemote) {
for (int i = 0; i < this.getSizeInventory(); i++)
this.setInventorySlotContents(i, ItemStack.loadItemStackFromNBT(crate.stackTagCompound.getCompoundTag("slot" + i)));
this.slots = new ItemStack[this.getSizeInventory()];
if(target.stackTagCompound == null) {
target.stackTagCompound = new NBTTagCompound();
}
toMarkDirty = true;
this.markDirty();
toMarkDirty = false;
for(int i = 0; i < slots.length; i++)
this.slots[i] = ItemStack.loadItemStackFromNBT(target.stackTagCompound.getCompoundTag("slot" + i));
}
@Nonnull
@ -128,38 +124,36 @@ public class ItemBlockStorageCrate extends ItemBlockBase implements IGUIProvider
@Override
public void markDirty() { // I HATE THIS SO MUCH
if(player.getEntityWorld().isRemote || !toMarkDirty) { // go the fuck away
return;
}
NBTTagCompound nbt = new NBTTagCompound();
int invSize = this.getSizeInventory();
for(int i = 0; i < invSize; i++) {
ItemStack stack = this.getStackInSlot(i);
if(stack == null)
continue;
if(stack == null) continue;
NBTTagCompound slot = new NBTTagCompound();
stack.writeToNBT(slot);
nbt.setTag("slot" + i, slot);
}
if(target.stackTagCompound != null) { // yes it's a bit jank, but it wants to clear otherwise so...
if(target.stackTagCompound.hasKey("lock"))
nbt.setInteger("lock", target.stackTagCompound.getInteger("lock"));
if(target.stackTagCompound.hasKey("lockMod"))
nbt.setDouble("lockMod", target.stackTagCompound.getDouble("lockMod"));
if(target.stackTagCompound.hasKey("spiders"))
nbt.setBoolean("spiders", target.stackTagCompound.getBoolean("spiders")); // fuck you!!
/*if(target.stackTagCompound != null) { // yes it's a bit jank, but it wants to clear otherwise so...
if(target.stackTagCompound.hasKey("lock")) nbt.setInteger("lock", target.stackTagCompound.getInteger("lock"));
if(target.stackTagCompound.hasKey("lockMod")) nbt.setDouble("lockMod", target.stackTagCompound.getDouble("lockMod"));
if(target.stackTagCompound.hasKey("spiders")) nbt.setBoolean("spiders", target.stackTagCompound.getBoolean("spiders")); // fuck you!!
}*/
/*
* target and held item stacks constantly desync, not being the same reference, while still holding the same value.
* code was tested with a copy of the containment box code using the CB's GUI and container to no avail.
* hypothesis: minecraft's keybind handling has some special bullshit case for ItemBlocks, since that is the only difference in the test.
* solution (?): check equality, then just access the held stack directly. if not, pray the target reference is still accurate and use that.
*/
if(player.getHeldItem() != null && ItemStack.areItemStacksEqual(player.getHeldItem(), target)) {
player.getHeldItem().setTagCompound(checkNBT(nbt));
} else {
target.setTagCompound(checkNBT(nbt));
}
target.setTagCompound(checkNBT(nbt));
player.inventory.setInventorySlotContents(player.inventory.currentItem, target);
}
}
}

View File

@ -29,7 +29,6 @@ public class ItemLeadBox extends Item implements IGUIProvider {
@Override
public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) {
if(!world.isRemote) player.openGui(MainRegistry.instance, 0, world, 0, 0, 0);
return stack;
}
@ -60,9 +59,6 @@ public class ItemLeadBox extends Item implements IGUIProvider {
if(fromNBT != null) {
System.arraycopy(fromNBT, 0, slots, 0, slots.length);
}
toMarkDirty = true;
this.markDirty();
toMarkDirty = false;
}
@Override

View File

@ -266,9 +266,6 @@ public class ItemToolBox extends Item implements IGUIProvider {
if(fromNBT != null) {
System.arraycopy(fromNBT, 0, slots, 0, slots.length);
}
toMarkDirty = true;
this.markDirty();
toMarkDirty = false;
}
@Override

View File

@ -69,7 +69,7 @@ public class XFactory12ga {
public static BulletConfig g12_magnum;
public static BulletConfig g12_explosive;
public static BulletConfig g12_phosphorus;
public static BulletConfig g12_anthrax;
//public static BulletConfig g12_anthrax;
public static BulletConfig g12_equestrian_bj;
public static BulletConfig g12_equestrian_tkr;
@ -265,7 +265,7 @@ public class XFactory12ga {
g12_bp_slug = new BulletConfig().setItem(EnumAmmo.G12_BP_SLUG).setCasing(EnumCasingType.SHOTSHELL, 12).setBlackPowder(true).setDamage(0.75F).setSpread(0.01F).setRicochetAngle(5).setCasing(new SpentCasing(CasingType.SHOTGUN).setColor(SpentCasing.COLOR_CASE_BRASS, SpentCasing.COLOR_CASE_BRASS).setScale(0.75F).register("12GA_BP_SLUG"));
g12 = new BulletConfig().setItem(EnumAmmo.G12).setCasing(EnumCasingType.BUCKSHOT, 6).setProjectiles(8).setDamage(1F/8F).setSpread(buckshotSpread).setRicochetAngle(15).setThresholdNegation(2F).setCasing(new SpentCasing(CasingType.SHOTGUN).setColor(0xB52B2B, SpentCasing.COLOR_CASE_BRASS).setScale(0.75F).register("12GA"));
g12_slug = new BulletConfig().setItem(EnumAmmo.G12_SLUG).setCasing(EnumCasingType.BUCKSHOT, 6).setHeadshot(1.5F).setSpread(0.0F).setRicochetAngle(25).setThresholdNegation(4F).setArmorPiercing(0.15F).setCasing(new SpentCasing(CasingType.SHOTGUN).setColor(0x393939, SpentCasing.COLOR_CASE_BRASS).setScale(0.75F).register("12GA_SLUG"));
g12_flechette = new BulletConfig().setItem(EnumAmmo.G12_FLECHETTE).setCasing(EnumCasingType.BUCKSHOT, 6).setProjectiles(8).setDamage(1F/8F).setThresholdNegation(5F).setThresholdNegation(3F).setArmorPiercing(0.2F).setSpread(0.025F).setRicochetAngle(5).setCasing(new SpentCasing(CasingType.SHOTGUN).setColor(0x3C80F0, SpentCasing.COLOR_CASE_BRASS).setScale(0.75F).register("12GA_FLECHETTE"));
g12_flechette = new BulletConfig().setItem(EnumAmmo.G12_FLECHETTE).setCasing(EnumCasingType.BUCKSHOT, 6).setProjectiles(8).setDamage(1F/8F).setThresholdNegation(5F).setArmorPiercing(0.2F).setSpread(0.025F).setRicochetAngle(5).setCasing(new SpentCasing(CasingType.SHOTGUN).setColor(0x3C80F0, SpentCasing.COLOR_CASE_BRASS).setScale(0.75F).register("12GA_FLECHETTE"));
g12_magnum = new BulletConfig().setItem(EnumAmmo.G12_MAGNUM).setCasing(EnumCasingType.BUCKSHOT_ADVANCED, 6).setProjectiles(4).setDamage(2F/4F).setSpread(magnumSpread).setRicochetAngle(15).setThresholdNegation(4F).setCasing(new SpentCasing(CasingType.SHOTGUN).setColor(0x278400, SpentCasing.COLOR_CASE_12GA).setScale(0.75F).register("12GA_MAGNUM"));
g12_explosive = new BulletConfig().setItem(EnumAmmo.G12_EXPLOSIVE).setCasing(EnumCasingType.BUCKSHOT_ADVANCED, 6).setDamage(2.5F).setOnImpact(LAMBDA_STANDARD_EXPLODE).setSpread(0F).setRicochetAngle(15).setCasing(new SpentCasing(CasingType.SHOTGUN).setColor(0xDA4127, SpentCasing.COLOR_CASE_12GA).setScale(0.75F).register("12GA_EXPLOSIVE"));
g12_phosphorus = new BulletConfig().setItem(EnumAmmo.G12_PHOSPHORUS).setCasing(EnumCasingType.BUCKSHOT_ADVANCED, 6).setProjectiles(8).setDamage(1F/8F).setSpread(magnumSpread).setRicochetAngle(15).setCasing(new SpentCasing(CasingType.SHOTGUN).setColor(0x910001, SpentCasing.COLOR_CASE_12GA).setScale(0.75F).register("12GA_PHOSPHORUS"))

View File

@ -41,6 +41,7 @@ import net.minecraftforge.common.util.ForgeDirection;
public class XFactoryFlamer {
public static BulletConfig flame_nograv;
public static BulletConfig flame_nograv_bf;
public static BulletConfig flame_diesel;
public static BulletConfig flame_gas;
@ -120,6 +121,7 @@ public class XFactoryFlamer {
.setOnUpdate(LAMBDA_BALEFIRE).setOnRicochet(LAMBDA_LINGER_BALEFIRE);
flame_nograv = flame_diesel.clone().setGrav(0);
flame_nograv_bf = flame_balefire.clone().setGrav(0).setLife(100);
flame_topaz_diesel = flame_diesel .clone().setProjectiles(2).setSpread(0.05F).setLife(60).setGrav(0.0D);
flame_topaz_gas = flame_gas .clone().setProjectiles(2).setSpread(0.05F);

View File

@ -984,11 +984,17 @@ public class ModEventHandlerClient {
ItemDepletedFuel.class,
ItemFluidDuct.class
);
String prefix = "Gun ";
int scale = 8;
boolean ignoreNonNTM = true;
List<ItemStack> stacks = new ArrayList<ItemStack>();
for (Object reg : Item.itemRegistry) {
Item item = (Item) reg;
if(ignoreNonNTM && !Item.itemRegistry.getNameForObject(item).startsWith("hbm:")) continue;
if(ignoredItems.contains(item)) continue;
if(!(item instanceof ItemGunBaseNT) && prefix.toLowerCase(Locale.US).startsWith("gun")) continue;
if(collapsedClasses.contains(item.getClass())) {
stacks.add(new ItemStack(item));
} else {
@ -996,7 +1002,7 @@ public class ModEventHandlerClient {
}
}
FMLCommonHandler.instance().showGuiScreen(new GUIScreenWikiRender(stacks.toArray(new ItemStack[0]), "Block ", "wiki-block-renders-256", 8));
FMLCommonHandler.instance().showGuiScreen(new GUIScreenWikiRender(stacks.toArray(new ItemStack[0]), prefix, "wiki-block-renders-256", scale));
}
} else {
isRenderingItems = false;

View File

@ -5,7 +5,6 @@ import java.util.List;
import com.hbm.blocks.BlockDummyable;
import com.hbm.entity.projectile.EntityBulletBaseMK4;
import com.hbm.handler.threading.PacketThreading;
import com.hbm.inventory.fluid.FluidType;
import com.hbm.inventory.fluid.Fluids;
import com.hbm.inventory.fluid.tank.FluidTank;
@ -16,11 +15,9 @@ import com.hbm.inventory.gui.GUITurretFritz;
import com.hbm.items.ModItems;
import com.hbm.items.weapon.sedna.factory.XFactoryFlamer;
import com.hbm.items.weapon.sedna.factory.GunFactory.EnumAmmo;
import com.hbm.packet.toclient.AuxParticlePacketNT;
import api.hbm.fluid.IFluidStandardReceiver;
import com.hbm.tileentity.IFluidCopiable;
import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import io.netty.buffer.ByteBuf;
@ -71,7 +68,7 @@ public class TileEntityTurretFritz extends TileEntityTurretBaseNT implements IFl
@Override
public double getDecetorRange() {
return 32D;
return 48D;
}
@Override
@ -112,18 +109,12 @@ public class TileEntityTurretFritz extends TileEntityTurretBaseNT implements IFl
vec.rotateAroundZ((float) -this.rotationPitch);
vec.rotateAroundY((float) -(this.rotationYaw + Math.PI * 0.5));
EntityBulletBaseMK4 proj = new EntityBulletBaseMK4(worldObj, XFactoryFlamer.flame_nograv, (float) (trait.getHeatEnergy() / 500_000F), 0.05F, (float) rotationYaw, (float) rotationPitch);
float damage = Math.min((float) (trait.getHeatEnergy() / 500_000F), 20F);
EntityBulletBaseMK4 proj = new EntityBulletBaseMK4(worldObj, tank.getTankType() == Fluids.BALEFIRE ? XFactoryFlamer.flame_nograv_bf : XFactoryFlamer.flame_nograv, damage, 0.05F, (float) rotationYaw, (float) rotationPitch);
proj.setPositionAndRotation(pos.xCoord + vec.xCoord, pos.yCoord + vec.yCoord, pos.zCoord + vec.zCoord, proj.rotationYaw, proj.rotationPitch);
worldObj.spawnEntityInWorld(proj);
worldObj.playSoundEffect(xCoord, yCoord, zCoord, "hbm:weapon.flamethrowerShoot", 2F, 1F + worldObj.rand.nextFloat() * 0.5F);
NBTTagCompound data = new NBTTagCompound();
data.setString("type", "vanillaburst");
data.setString("mode", "flame");
data.setInteger("count", 2);
data.setDouble("motion", 0.025D);
PacketThreading.createAllAroundThreadedPacket(new AuxParticlePacketNT(data, pos.xCoord + vec.xCoord, pos.yCoord + vec.yCoord, pos.zCoord + vec.zCoord), new TargetPoint(worldObj.provider.dimensionId, xCoord, yCoord, zCoord, 50));
}
}