mirror of
https://github.com/HbmMods/Hbm-s-Nuclear-Tech-GIT.git
synced 2026-01-25 10:32:49 +00:00
commit
097907820b
@ -6,11 +6,7 @@ import com.hbm.blocks.ModBlocks;
|
|||||||
import com.hbm.config.ServerConfig;
|
import com.hbm.config.ServerConfig;
|
||||||
import com.hbm.explosion.ExplosionLarge;
|
import com.hbm.explosion.ExplosionLarge;
|
||||||
import com.hbm.explosion.vanillant.ExplosionVNT;
|
import com.hbm.explosion.vanillant.ExplosionVNT;
|
||||||
import com.hbm.explosion.vanillant.standard.BlockAllocatorStandard;
|
import com.hbm.explosion.vanillant.standard.*;
|
||||||
import com.hbm.explosion.vanillant.standard.BlockProcessorStandard;
|
|
||||||
import com.hbm.explosion.vanillant.standard.EntityProcessorCrossSmooth;
|
|
||||||
import com.hbm.explosion.vanillant.standard.ExplosionEffectWeapon;
|
|
||||||
import com.hbm.explosion.vanillant.standard.PlayerProcessorStandard;
|
|
||||||
import com.hbm.interfaces.IBomb;
|
import com.hbm.interfaces.IBomb;
|
||||||
import com.hbm.items.ModItems;
|
import com.hbm.items.ModItems;
|
||||||
import com.hbm.items.weapon.sedna.factory.XFactoryCatapult;
|
import com.hbm.items.weapon.sedna.factory.XFactoryCatapult;
|
||||||
@ -179,7 +175,7 @@ public class Landmine extends BlockContainer implements IBomb {
|
|||||||
ExplosionLarge.spawnShrapnels(world, x + 0.5, y + 0.5, z + 0.5, 5);
|
ExplosionLarge.spawnShrapnels(world, x + 0.5, y + 0.5, z + 0.5, 5);
|
||||||
} else if(this == ModBlocks.mine_naval) {
|
} else if(this == ModBlocks.mine_naval) {
|
||||||
ExplosionVNT vnt = new ExplosionVNT(world, x + 5, y + 5, z + 5, 25F);
|
ExplosionVNT vnt = new ExplosionVNT(world, x + 5, y + 5, z + 5, 25F);
|
||||||
vnt.setBlockAllocator(new BlockAllocatorStandard(64));
|
vnt.setBlockAllocator(new BlockAllocatorWater(32));
|
||||||
vnt.setBlockProcessor(new BlockProcessorStandard());
|
vnt.setBlockProcessor(new BlockProcessorStandard());
|
||||||
vnt.setEntityProcessor(new EntityProcessorCrossSmooth(0.5, ServerConfig.MINE_NAVAL_DAMAGE.get()).setupPiercing(5F, 0.2F));
|
vnt.setEntityProcessor(new EntityProcessorCrossSmooth(0.5, ServerConfig.MINE_NAVAL_DAMAGE.get()).setupPiercing(5F, 0.2F));
|
||||||
vnt.setPlayerProcessor(new PlayerProcessorStandard());
|
vnt.setPlayerProcessor(new PlayerProcessorStandard());
|
||||||
|
|||||||
@ -0,0 +1,78 @@
|
|||||||
|
package com.hbm.explosion.vanillant.standard;
|
||||||
|
|
||||||
|
import java.util.HashSet;
|
||||||
|
|
||||||
|
import com.hbm.explosion.vanillant.ExplosionVNT;
|
||||||
|
import com.hbm.explosion.vanillant.interfaces.IBlockAllocator;
|
||||||
|
|
||||||
|
import net.minecraft.block.Block;
|
||||||
|
import net.minecraft.block.material.Material;
|
||||||
|
import net.minecraft.util.MathHelper;
|
||||||
|
import net.minecraft.world.ChunkPosition;
|
||||||
|
import net.minecraft.world.World;
|
||||||
|
|
||||||
|
public class BlockAllocatorWater implements IBlockAllocator {
|
||||||
|
|
||||||
|
protected int resolution;
|
||||||
|
|
||||||
|
public BlockAllocatorWater(int resolution) {
|
||||||
|
this.resolution = resolution;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public HashSet<ChunkPosition> allocate(ExplosionVNT explosion, World world, double x, double y, double z, float size) {
|
||||||
|
HashSet<ChunkPosition> affectedBlocks = new HashSet<>();
|
||||||
|
|
||||||
|
for (int i = 0; i < this.resolution; ++i) {
|
||||||
|
for (int j = 0; j < this.resolution; ++j) {
|
||||||
|
for (int k = 0; k < this.resolution; ++k) {
|
||||||
|
if (i == 0 || i == this.resolution - 1 || j == 0 || j == this.resolution - 1 || k == 0 || k == this.resolution - 1) {
|
||||||
|
double d0 = (float) i / ((float) this.resolution - 1.0F) * 2.0F - 1.0F;
|
||||||
|
double d1 = (float) j / ((float) this.resolution - 1.0F) * 2.0F - 1.0F;
|
||||||
|
double d2 = (float) k / ((float) this.resolution - 1.0F) * 2.0F - 1.0F;
|
||||||
|
double d3 = Math.sqrt(d0 * d0 + d1 * d1 + d2 * d2);
|
||||||
|
|
||||||
|
d0 /= d3;
|
||||||
|
d1 /= d3;
|
||||||
|
d2 /= d3;
|
||||||
|
|
||||||
|
float powerRemaining = size * (0.7F + world.rand.nextFloat() * 0.6F);
|
||||||
|
double currentX = x;
|
||||||
|
double currentY = y;
|
||||||
|
double currentZ = z;
|
||||||
|
|
||||||
|
for (float stepSize = 0.3F; powerRemaining > 0.0F; powerRemaining -= stepSize * 0.75F) {
|
||||||
|
int blockX = MathHelper.floor_double(currentX);
|
||||||
|
int blockY = MathHelper.floor_double(currentY);
|
||||||
|
int blockZ = MathHelper.floor_double(currentZ);
|
||||||
|
|
||||||
|
Block block = world.getBlock(blockX, blockY, blockZ);
|
||||||
|
Material material = block.getMaterial();
|
||||||
|
|
||||||
|
// im braindead and copy code 🧃🐱👤
|
||||||
|
if (material != Material.air && !material.isLiquid()) {
|
||||||
|
float blockResistance = explosion.exploder != null ?
|
||||||
|
explosion.exploder.func_145772_a(explosion.compat, world, blockX, blockY, blockZ, block) :
|
||||||
|
block.getExplosionResistance(null, world, blockX, blockY, blockZ, x, y, z);
|
||||||
|
powerRemaining -= (blockResistance + 0.3F) * stepSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (powerRemaining > 0.0F &&
|
||||||
|
(explosion.exploder == null || explosion.exploder.func_145774_a(explosion.compat, world, blockX, blockY, blockZ, block, powerRemaining)) &&
|
||||||
|
!material.isLiquid()) {
|
||||||
|
affectedBlocks.add(new ChunkPosition(blockX, blockY, blockZ));
|
||||||
|
}
|
||||||
|
|
||||||
|
currentX += d0 * (double) stepSize;
|
||||||
|
currentY += d1 * (double) stepSize;
|
||||||
|
currentZ += d2 * (double) stepSize;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return affectedBlocks;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -509,6 +509,20 @@ public class ItemRenderLibrary {
|
|||||||
GL11.glEnable(GL11.GL_CULL_FACE);
|
GL11.glEnable(GL11.GL_CULL_FACE);
|
||||||
}});
|
}});
|
||||||
|
|
||||||
|
renderers.put(Item.getItemFromBlock(ModBlocks.mine_naval), new ItemRenderBase() {
|
||||||
|
public void renderInventory() {
|
||||||
|
GL11.glTranslated(0, 2, -1);
|
||||||
|
GL11.glScaled(5, 5, 5);
|
||||||
|
}
|
||||||
|
public void renderCommon() {
|
||||||
|
GL11.glTranslated(0, 0, 0);
|
||||||
|
GL11.glDisable(GL11.GL_CULL_FACE);
|
||||||
|
GL11.glShadeModel(GL11.GL_SMOOTH);
|
||||||
|
bindTexture(ResourceManager.mine_naval_tex);
|
||||||
|
ResourceManager.mine_naval.renderAll();
|
||||||
|
GL11.glEnable(GL11.GL_CULL_FACE);
|
||||||
|
}});
|
||||||
|
|
||||||
renderers.put(Item.getItemFromBlock(ModBlocks.mine_fat), new ItemRenderBase() {
|
renderers.put(Item.getItemFromBlock(ModBlocks.mine_fat), new ItemRenderBase() {
|
||||||
public void renderInventory() {
|
public void renderInventory() {
|
||||||
GL11.glTranslated(0, -1, 0);
|
GL11.glTranslated(0, -1, 0);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user