the malicious gigglefish from the silly dimension

This commit is contained in:
Bob 2024-03-04 21:08:31 +01:00
parent 23e58c7e1d
commit 08812a700e
24 changed files with 344 additions and 89 deletions

View File

@ -1,7 +1,6 @@
##Added
* CRTs and toasters
* Decorative blocks that will spawn in upcoming dungeons
* Snow globes
* Sentry turret "Edwin"
* A broken down version of the sentry turret with infinite power and ammo
* Will be found in the new silo structure

View File

@ -1544,7 +1544,7 @@ public class ModBlocks {
deco_loot = new BlockLoot().setBlockName("deco_loot").setCreativeTab(null).setHardness(0.0F).setResistance(0.0F).setBlockTextureName(RefStrings.MODID + ":block_steel");
pedestal = new BlockPedestal().setBlockName("pedestal").setCreativeTab(null).setHardness(2.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":pedestal_top");
bobblehead = new BlockBobble().setBlockName("bobblehead").setCreativeTab(MainRegistry.blockTab).setHardness(0.0F).setResistance(0.0F).setBlockTextureName(RefStrings.MODID + ":block_steel");
snowglobe = new BlockSnowglobe().setBlockName("snowglobe").setCreativeTab(MainRegistry.blockTab).setHardness(0.0F).setResistance(0.0F).setBlockTextureName(RefStrings.MODID + ":glass_boron");
snowglobe = new BlockSnowglobe().setBlockName("snowglobe").setCreativeTab(null).setHardness(0.0F).setResistance(0.0F).setBlockTextureName(RefStrings.MODID + ":glass_boron");
hazmat = new BlockGeneric(Material.cloth).setBlockName("hazmat").setStepSound(Block.soundTypeCloth).setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(60.0F).setBlockTextureName(RefStrings.MODID + ":hazmat");
gravel_obsidian = new BlockFalling(Material.iron).setBlockName("gravel_obsidian").setCreativeTab(MainRegistry.blockTab).setStepSound(Block.soundTypeGravel).setHardness(5.0F).setResistance(240.0F).setBlockTextureName(RefStrings.MODID + ":gravel_obsidian");

View File

@ -1,12 +1,16 @@
package com.hbm.blocks.bomb;
import java.util.Random;
import com.hbm.blocks.BlockDummyable;
import com.hbm.blocks.ModBlocks;
import com.hbm.interfaces.IBomb;
import com.hbm.tileentity.bomb.TileEntityLaunchPadRusted;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.world.World;
@ -28,6 +32,11 @@ public class LaunchPadRusted extends BlockDummyable implements IBomb {
if(meta >= 12) return new TileEntityLaunchPadRusted();
return null;
}
@Override
public Item getItemDropped(int i, Random rand, int j) {
return null;
}
@Override
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) {

View File

@ -109,6 +109,7 @@ public class EntityMappings {
addEntity(EntityMinecartTest.class, "entity_minecart_test", 1000);
addEntity(EntitySparkBeam.class, "entity_spark_beam", 1000);
addEntity(EntityMissileDoomsday.class, "entity_missile_doomsday", 1000);
addEntity(EntityMissileDoomsdayRusted.class, "entity_missile_doomsday_rusted", 1000);
addEntity(EntityTSmokeFX.class, "entity_t_smoke_fx", 1000);
addEntity(EntityNukeExplosionMK3.class, "entity_nuke_mk3", 1000);
addEntity(EntityVortex.class, "entity_vortex", 250);

View File

@ -1,54 +0,0 @@
package com.hbm.entity.missile;
import java.util.List;
import com.hbm.config.BombConfig;
import com.hbm.entity.effect.EntityNukeTorex;
import com.hbm.entity.logic.EntityNukeExplosionMK5;
import com.hbm.items.ModItems;
import net.minecraft.item.ItemStack;
import net.minecraft.util.Vec3;
import net.minecraft.world.World;
public class EntityMissileDoomsday extends EntityMissileBaseNT {
public EntityMissileDoomsday(World world) {
super(world);
}
public EntityMissileDoomsday(World world, float x, float y, float z, int a, int b) {
super(world, x, y, z, a, b);
}
@Override
public void onImpact() {
this.worldObj.spawnEntityInWorld(EntityNukeExplosionMK5.statFac(worldObj, BombConfig.missileRadius * 2, posX, posY, posZ).moreFallout(100));
EntityNukeTorex.statFac(worldObj, posX, posY, posZ, BombConfig.missileRadius * 2);
}
@Override
protected void spawnContrail() {
byte rot = this.dataWatcher.getWatchableObjectByte(3);
Vec3 thrust = Vec3.createVectorHelper(0, 0, 1);
switch(rot) {
case 2: thrust.rotateAroundY((float) -Math.PI / 2F); break;
case 4: thrust.rotateAroundY((float) -Math.PI); break;
case 3: thrust.rotateAroundY((float) -Math.PI / 2F * 3F); break;
}
thrust.rotateAroundY((this.rotationYaw + 90) * (float) Math.PI / 180F);
thrust.rotateAroundX(this.rotationPitch * (float) Math.PI / 180F);
thrust.rotateAroundY(-(this.rotationYaw + 90) * (float) Math.PI / 180F);
this.spawnContraolWithOffset(thrust.xCoord, thrust.yCoord, thrust.zCoord);
this.spawnContraolWithOffset(0, 0, 0);
this.spawnContraolWithOffset(-thrust.xCoord, -thrust.zCoord, -thrust.zCoord);
}
@Override public List<ItemStack> getDebris() { return null; }
@Override public ItemStack getDebrisRareDrop() { return null; }
@Override public String getUnlocalizedName() { return "radar.target.doomsday"; }
@Override public ItemStack getMissileItemForInfo() { return new ItemStack(ModItems.missile_doomsday); }
}

View File

@ -103,4 +103,27 @@ public abstract class EntityMissileTier4 extends EntityMissileBaseNT {
@Override public ItemStack getDebrisRareDrop() { return new ItemStack(ModItems.warhead_volcano); }
@Override public ItemStack getMissileItemForInfo() { return new ItemStack(ModItems.missile_volcano); }
}
public static class EntityMissileDoomsday extends EntityMissileTier4 {
public EntityMissileDoomsday(World world) { super(world); }
public EntityMissileDoomsday(World world, float x, float y, float z, int a, int b) { super(world, x, y, z, a, b); }
@Override public void onImpact() {
this.worldObj.spawnEntityInWorld(EntityNukeExplosionMK5.statFac(worldObj, BombConfig.missileRadius * 2, posX, posY, posZ).moreFallout(100));
EntityNukeTorex.statFac(worldObj, posX, posY, posZ, BombConfig.missileRadius * 2);
}
@Override public List<ItemStack> getDebris() { return null; }
@Override public ItemStack getDebrisRareDrop() { return null; }
@Override public String getUnlocalizedName() { return "radar.target.doomsday"; }
@Override public ItemStack getMissileItemForInfo() { return new ItemStack(ModItems.missile_doomsday); }
}
public static class EntityMissileDoomsdayRusted extends EntityMissileDoomsday {
public EntityMissileDoomsdayRusted(World world) { super(world); }
public EntityMissileDoomsdayRusted(World world, float x, float y, float z, int a, int b) { super(world, x, y, z, a, b); }
@Override public void onImpact() {
this.worldObj.spawnEntityInWorld(EntityNukeExplosionMK5.statFac(worldObj, BombConfig.missileRadius, posX, posY, posZ).moreFallout(100));
EntityNukeTorex.statFac(worldObj, posX, posY, posZ, BombConfig.missileRadius);
}
@Override public ItemStack getMissileItemForInfo() { return new ItemStack(ModItems.missile_doomsday_rusted); }
}
}

View File

@ -1,7 +1,10 @@
package com.hbm.inventory.container;
import com.hbm.inventory.SlotCraftingOutput;
import com.hbm.items.ModItems;
import com.hbm.tileentity.bomb.TileEntityLaunchPadRusted;
import api.hbm.item.IDesignatorItem;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.inventory.Container;
@ -13,6 +16,12 @@ public class ContainerLaunchPadRusted extends Container {
private TileEntityLaunchPadRusted launchpad;
public ContainerLaunchPadRusted(InventoryPlayer invPlayer, TileEntityLaunchPadRusted tedf) {
this.launchpad = tedf;
this.addSlotToContainer(new SlotCraftingOutput(invPlayer.player, tedf, 0, 26, 72));
this.addSlotToContainer(new Slot(tedf, 1, 116, 45));
this.addSlotToContainer(new Slot(tedf, 2, 134, 45));
this.addSlotToContainer(new Slot(tedf, 3, 26, 99));
for(int i = 0; i < 3; i++) {
for(int j = 0; j < 9; j++) {
@ -27,7 +36,44 @@ public class ContainerLaunchPadRusted extends Container {
@Override
public ItemStack transferStackInSlot(EntityPlayer player, int par2) {
return null;
ItemStack var3 = null;
Slot var4 = (Slot) this.inventorySlots.get(par2);
if(var4 != null && var4.getHasStack()) {
ItemStack var5 = var4.getStack();
var3 = var5.copy();
if(par2 <= 3) {
if(!this.mergeItemStack(var5, 4, this.inventorySlots.size(), true)) {
return null;
}
} else {
if(var3.getItem() instanceof IDesignatorItem) {
if(!this.mergeItemStack(var5, 3, 4, false)) {
return null;
}
} else if(var3.getItem() == ModItems.launch_code) {
if(!this.mergeItemStack(var5, 1, 2, false)) {
return null;
}
} else if(var3.getItem() == ModItems.launch_key) {
if(!this.mergeItemStack(var5, 2, 3, false)) {
return null;
}
} else {
return null;
}
}
if(var5.stackSize == 0) {
var4.putStack((ItemStack) null);
} else {
var4.onSlotChanged();
}
}
return var3;
}
@Override

View File

@ -1,14 +1,28 @@
package com.hbm.inventory.gui;
import org.lwjgl.opengl.GL11;
import java.util.Random;
import java.util.function.Consumer;
import org.lwjgl.opengl.GL11;
import org.lwjgl.opengl.GL12;
import com.hbm.inventory.RecipesCommon.ComparableStack;
import com.hbm.inventory.container.ContainerLaunchPadRusted;
import com.hbm.items.ModItems;
import com.hbm.lib.RefStrings;
import com.hbm.packet.NBTControlPacket;
import com.hbm.packet.PacketDispatcher;
import com.hbm.render.item.ItemRenderMissileGeneric;
import com.hbm.tileentity.bomb.TileEntityLaunchPadRusted;
import net.minecraft.client.Minecraft;
import net.minecraft.client.audio.PositionedSoundRecord;
import net.minecraft.client.renderer.RenderHelper;
import net.minecraft.client.renderer.texture.TextureManager;
import net.minecraft.client.resources.I18n;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.ResourceLocation;
public class GUILaunchPadRusted extends GuiInfoContainer {
@ -27,6 +41,20 @@ public class GUILaunchPadRusted extends GuiInfoContainer {
@Override
public void drawScreen(int mouseX, int mouseY, float f) {
super.drawScreen(mouseX, mouseY, f);
drawCustomInfoStat(mouseX, mouseY, guiLeft + 26, guiTop + 36, 16, 16, mouseX, mouseY, EnumChatFormatting.YELLOW + "Release Missile", "Missile is locked in lauch position,", "releasing may cause damage to the missile.", "Damaged missile can not be put back", "into launching position.");
}
@Override
protected void mouseClicked(int x, int y, int i) {
super.mouseClicked(x, y, i);
if(guiLeft + 26 <= x && guiLeft + 26 + 16 > x && guiTop + 36 < y && guiTop + 36 + 16 >= y) {
mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1.0F));
NBTTagCompound data = new NBTTagCompound();
data.setBoolean("release", true);
PacketDispatcher.wrapper.sendToServer(new NBTControlPacket(data, launchpad.xCoord, launchpad.yCoord, launchpad.zCoord));
}
}
@Override
@ -41,30 +69,33 @@ public class GUILaunchPadRusted extends GuiInfoContainer {
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
Minecraft.getMinecraft().getTextureManager().bindTexture(texture);
drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize);
boolean hasCodes = launchpad.slots[1] != null && launchpad.slots[1].getItem() == ModItems.launch_code;
boolean hasKey = launchpad.slots[2] != null && launchpad.slots[2].getItem() == ModItems.launch_key;
if(hasCodes) drawTexturedModalRect(guiLeft + 121, guiTop + 32, 192, 0, 6, 8);
if(hasKey) drawTexturedModalRect(guiLeft + 139, guiTop + 32, 192, 0, 6, 8);
/*if(launchpad.slots[0] != null) {
Consumer<TextureManager> renderer = ItemRenderMissileGeneric.renderers.get(new ComparableStack(launchpad.slots[0]).makeSingular());
if(hasCodes && hasKey && launchpad.missileLoaded) {
Random rand = new Random(launchpad.xCoord * 131_071 + launchpad.zCoord);
int launchCodes = rand.nextInt(100_000_000);
for(int i = 0; i < 8; i++) {
int magnitude = (int) Math.pow(10, i);
int digit = (launchCodes % (magnitude * 10)) / magnitude;
drawTexturedModalRect(guiLeft + 109 + 6 * i, guiTop + 85, 192 + 6 * digit, 8, 6, 8);
}
}
if(launchpad.missileLoaded) {
Consumer<TextureManager> renderer = ItemRenderMissileGeneric.renderers.get(new ComparableStack(ModItems.missile_doomsday_rusted).makeSingular());
if(renderer != null) {
GL11.glPushMatrix();
GL11.glTranslatef(guiLeft + 70, guiTop + 120, 100);
double scale = 1D;
if(launchpad.slots[0].getItem() instanceof ItemMissile) {
ItemMissile missile = (ItemMissile) launchpad.slots[0].getItem();
switch(missile.formFactor) {
case ABM: scale = 1.45D; break;
case MICRO: scale = 2.5D; break;
case V2: scale = 1.75D; break;
case STRONG: scale = 1.375D; break;
case HUGE: scale = 0.925D; break;
case ATLAS: scale = 0.875D; break;
case OTHER: break;
}
if(missile == ModItems.missile_stealth) scale = 1.125D;
}
double scale = 0.875D;
GL11.glRotatef(90, 0, 1, 0);
GL11.glScaled(scale, scale, scale);
GL11.glScalef(-8, -8, -8);
@ -79,6 +110,6 @@ public class GUILaunchPadRusted extends GuiInfoContainer {
GL11.glEnable(GL12.GL_RESCALE_NORMAL);
GL11.glPopMatrix();
}
}*/
}
}
}

View File

@ -1327,6 +1327,7 @@ public class ModItems {
public static Item missile_nuclear_cluster;
public static Item missile_volcano;
public static Item missile_doomsday;
public static Item missile_doomsday_rusted;
public static Item missile_taint;
public static Item missile_micro;
public static Item missile_bhole;
@ -3956,6 +3957,7 @@ public class ModItems {
missile_nuclear_cluster = new ItemMissile(MissileFormFactor.ATLAS, MissileTier.TIER4).setUnlocalizedName("missile_nuclear_cluster").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_nuclear_cluster");
missile_volcano = new ItemMissile(MissileFormFactor.ATLAS, MissileTier.TIER4).setUnlocalizedName("missile_volcano").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_volcano");
missile_doomsday = new ItemMissile(MissileFormFactor.ATLAS, MissileTier.TIER4).setUnlocalizedName("missile_doomsday").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_doomsday");
missile_doomsday_rusted = new ItemMissile(MissileFormFactor.ATLAS, MissileTier.TIER4).notLaunchable().setUnlocalizedName("missile_doomsday_rusted").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_doomsday");
missile_taint = new ItemMissile(MissileFormFactor.MICRO, MissileTier.TIER0).setUnlocalizedName("missile_taint").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_taint");
missile_micro = new ItemMissile(MissileFormFactor.MICRO, MissileTier.TIER0).setUnlocalizedName("missile_micro").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_micro");
missile_bhole = new ItemMissile(MissileFormFactor.MICRO, MissileTier.TIER0).setUnlocalizedName("missile_bhole").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_bhole");
@ -6919,6 +6921,7 @@ public class ModItems {
GameRegistry.registerItem(missile_nuclear_cluster, missile_nuclear_cluster.getUnlocalizedName());
GameRegistry.registerItem(missile_volcano, missile_volcano.getUnlocalizedName());
GameRegistry.registerItem(missile_doomsday, missile_doomsday.getUnlocalizedName());
GameRegistry.registerItem(missile_doomsday_rusted, missile_doomsday_rusted.getUnlocalizedName());
//Rockets
GameRegistry.registerItem(missile_carrier, missile_carrier.getUnlocalizedName());
GameRegistry.registerItem(missile_soyuz, missile_soyuz.getUnlocalizedName());

View File

@ -14,6 +14,7 @@ public class ItemMissile extends ItemCustomLore {
public final MissileTier tier;
public final MissileFuel fuel;
public int fuelCap;
public boolean launchable = true;
public ItemMissile(MissileFormFactor form, MissileTier tier) {
this(form, tier, form.defaultFuel);
@ -26,6 +27,11 @@ public class ItemMissile extends ItemCustomLore {
this.setFuelCap(this.fuel.defaultCap);
}
public ItemMissile notLaunchable() {
this.launchable = false;
return this;
}
public ItemMissile setFuelCap(int fuelCap) {
this.fuelCap = fuelCap;
return this;
@ -34,9 +40,14 @@ public class ItemMissile extends ItemCustomLore {
@Override
public void addInformation(ItemStack itemstack, EntityPlayer player, List list, boolean bool) {
list.add(EnumChatFormatting.ITALIC + this.tier.display);
list.add("Fuel: " + this.fuel.display);
if(this.fuelCap > 0) list.add("Fuel capacity: " + this.fuelCap + "mB");
super.addInformation(itemstack, player, list, bool);
if(!this.launchable) {
list.add(EnumChatFormatting.RED + "Not launchable!");
} else {
list.add("Fuel: " + this.fuel.display);
if(this.fuelCap > 0) list.add("Fuel capacity: " + this.fuelCap + "mB");
super.addInformation(itemstack, player, list, bool);
}
}
public enum MissileFormFactor {

View File

@ -326,6 +326,7 @@ public class ClientProxy extends ServerProxy {
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityCore.class, new RenderCore());
//missile blocks
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityLaunchPad.class, new RenderLaunchPad());
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityLaunchPadRusted.class, new RenderLaunchPadRusted());
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityLaunchPadLarge.class, new RenderLaunchPadLarge());
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineMissileAssembly.class, new RenderMissileAssembly());
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityCompactLauncher.class, new RenderCompactLauncher());
@ -447,6 +448,7 @@ public class ClientProxy extends ServerProxy {
MinecraftForgeClient.registerItemRenderer(ModItems.missile_nuclear_cluster, new ItemRenderMissileGeneric(RenderMissileType.TYPE_NUCLEAR));
MinecraftForgeClient.registerItemRenderer(ModItems.missile_volcano, new ItemRenderMissileGeneric(RenderMissileType.TYPE_NUCLEAR));
MinecraftForgeClient.registerItemRenderer(ModItems.missile_doomsday, new ItemRenderMissileGeneric(RenderMissileType.TYPE_NUCLEAR));
MinecraftForgeClient.registerItemRenderer(ModItems.missile_doomsday_rusted, new ItemRenderMissileGeneric(RenderMissileType.TYPE_NUCLEAR));
MinecraftForgeClient.registerItemRenderer(ModItems.missile_carrier, new ItemRenderMissileGeneric(RenderMissileType.TYPE_CARRIER));
MinecraftForgeClient.registerItemRenderer(ModItems.missile_shuttle, new ItemRenderMissileGeneric(RenderMissileType.TYPE_ROBIN));
@ -712,6 +714,7 @@ public class ClientProxy extends ServerProxy {
RenderingRegistry.registerEntityRenderingHandler(EntityMissileVolcano.class, new RenderMissileNuclear());
RenderingRegistry.registerEntityRenderingHandler(EntityMIRV.class, new RenderMirv());
RenderingRegistry.registerEntityRenderingHandler(EntityMissileDoomsday.class, new RenderMissileNuclear());
RenderingRegistry.registerEntityRenderingHandler(EntityMissileDoomsdayRusted.class, new RenderMissileNuclear());
RenderingRegistry.registerEntityRenderingHandler(EntityCarrier.class, new RenderCarrierMissile());
RenderingRegistry.registerEntityRenderingHandler(EntityBooster.class, new RenderBoosterMissile());
RenderingRegistry.registerEntityRenderingHandler(EntitySoyuz.class, new RenderSoyuz());

View File

@ -1126,6 +1126,14 @@ public class CraftingManager {
addRecipeAuto(new ItemStack(ModBlocks.rbmk_cooler, 1), new Object[] { "IGI", "GCG", "IGI", 'C', ModBlocks.rbmk_blank, 'I', ModItems.plate_polymer, 'G', ModBlocks.steel_grate });
}
addShapelessAuto(new ItemStack(ModItems.launch_code), new Object[] {
new ItemStack(ModItems.launch_code_piece), new ItemStack(ModItems.launch_code_piece),
new ItemStack(ModItems.launch_code_piece), new ItemStack(ModItems.launch_code_piece),
new ItemStack(ModItems.launch_code_piece), new ItemStack(ModItems.launch_code_piece),
new ItemStack(ModItems.launch_code_piece), new ItemStack(ModItems.launch_code_piece),
new ItemStack(ModItems.circuit_aluminium)
});
addShapelessAuto(ModItems.circuit_star_component.stackFromEnum(CircuitComponentType.CHIPSET), new Object[] {
ModItems.circuit_star_piece.stackFromEnum(ScrapType.BRIDGE_BIOS),
ModItems.circuit_star_piece.stackFromEnum(ScrapType.BRIDGE_BUS),

View File

@ -325,6 +325,7 @@ public class ModEventHandler {
if(event.entityLiving instanceof IMob) {
if(event.entityLiving.getRNG().nextInt(1000) == 0) event.entityLiving.dropItem(ModItems.heart_piece, 1);
if(event.entityLiving.getRNG().nextInt(250) == 0) event.entityLiving.dropItem(ModItems.key_red_cracked, 1);
if(event.entityLiving.getRNG().nextInt(250) == 0) event.entityLiving.dropItem(ModItems.launch_code_piece, 1);
}
if(event.entityLiving instanceof EntityCyberCrab && event.entityLiving.getRNG().nextInt(500) == 0) {

View File

@ -1230,6 +1230,7 @@ public class ResourceManager {
public static final ResourceLocation missileMIRV_tex = new ResourceLocation(RefStrings.MODID, "textures/models/missile_atlas_thermo.png");
public static final ResourceLocation missileVolcano_tex = new ResourceLocation(RefStrings.MODID, "textures/models/missile_atlas_tectonic.png");
public static final ResourceLocation missileDoomsday_tex = new ResourceLocation(RefStrings.MODID, "textures/models/missile_atlas_doomsday.png");
public static final ResourceLocation missileDoomsdayRusted_tex = new ResourceLocation(RefStrings.MODID, "textures/models/missile_atlas_doomsday_weathered.png");
public static final ResourceLocation missileTaint_tex = new ResourceLocation(RefStrings.MODID, "textures/models/missile_micro_taint.png");
public static final ResourceLocation missileShuttle_tex = new ResourceLocation(RefStrings.MODID, "textures/models/missileShuttle.png");
public static final ResourceLocation missileMicro_tex = new ResourceLocation(RefStrings.MODID, "textures/models/missile_micro.png");
@ -1296,6 +1297,7 @@ public class ResourceManager {
//Missile Parts
public static final ResourceLocation missile_pad_tex = new ResourceLocation(RefStrings.MODID, "textures/models/launchpad/silo.png");
public static final ResourceLocation missile_pad_rusted_tex = new ResourceLocation(RefStrings.MODID, "textures/models/launchpad/silo_rusted.png");
public static final ResourceLocation missile_erector_tex = new ResourceLocation(RefStrings.MODID, "textures/models/launchpad/pad.png");
public static final ResourceLocation missile_erector_micro_tex = new ResourceLocation(RefStrings.MODID, "textures/models/launchpad/erector_micro.png");
public static final ResourceLocation missile_erector_v2_tex = new ResourceLocation(RefStrings.MODID, "textures/models/launchpad/erector_v2.png");

View File

@ -3,10 +3,7 @@ package com.hbm.render.entity.rocket;
import org.lwjgl.opengl.GL11;
import com.hbm.entity.missile.EntityMissileBaseNT;
import com.hbm.entity.missile.EntityMissileDoomsday;
import com.hbm.entity.missile.EntityMissileTier4.EntityMissileMirv;
import com.hbm.entity.missile.EntityMissileTier4.EntityMissileNuclear;
import com.hbm.entity.missile.EntityMissileTier4.EntityMissileVolcano;
import com.hbm.entity.missile.EntityMissileTier4.*;
import com.hbm.main.ResourceManager;
import net.minecraft.client.renderer.entity.Render;
@ -36,6 +33,7 @@ public class RenderMissileNuclear extends Render {
if(entity instanceof EntityMissileNuclear) bindTexture(ResourceManager.missileNuclear_tex);
if(entity instanceof EntityMissileMirv) bindTexture(ResourceManager.missileMIRV_tex);
if(entity instanceof EntityMissileDoomsday) bindTexture(ResourceManager.missileDoomsday_tex);
if(entity instanceof EntityMissileDoomsdayRusted) bindTexture(ResourceManager.missileDoomsdayRusted_tex);
if(entity instanceof EntityMissileVolcano) bindTexture(ResourceManager.missileVolcano_tex);
GL11.glShadeModel(GL11.GL_SMOOTH);

View File

@ -165,6 +165,7 @@ public class ItemRenderMissileGeneric implements IItemRenderer {
renderers.put(new ComparableStack(ModItems.missile_nuclear_cluster), generateStandard(ResourceManager.missileMIRV_tex, ResourceManager.missileNuclear));
renderers.put(new ComparableStack(ModItems.missile_volcano), generateStandard(ResourceManager.missileVolcano_tex, ResourceManager.missileNuclear));
renderers.put(new ComparableStack(ModItems.missile_doomsday), generateStandard(ResourceManager.missileDoomsday_tex, ResourceManager.missileNuclear));
renderers.put(new ComparableStack(ModItems.missile_doomsday_rusted), generateStandard(ResourceManager.missileDoomsdayRusted_tex, ResourceManager.missileNuclear));
renderers.put(new ComparableStack(ModItems.missile_carrier), x -> {
GL11.glScalef(2F, 2F, 2F);

View File

@ -0,0 +1,72 @@
package com.hbm.render.tileentity;
import java.util.function.Consumer;
import org.lwjgl.opengl.GL11;
import com.hbm.blocks.BlockDummyable;
import com.hbm.blocks.ModBlocks;
import com.hbm.inventory.RecipesCommon.ComparableStack;
import com.hbm.items.ModItems;
import com.hbm.main.ResourceManager;
import com.hbm.render.item.ItemRenderBase;
import com.hbm.render.item.ItemRenderMissileGeneric;
import com.hbm.tileentity.bomb.TileEntityLaunchPadRusted;
import net.minecraft.client.renderer.texture.TextureManager;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
import net.minecraft.item.Item;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.client.IItemRenderer;
public class RenderLaunchPadRusted extends TileEntitySpecialRenderer implements IItemRendererProvider {
@Override
public void renderTileEntityAt(TileEntity tileEntity, double x, double y, double z, float f) {
GL11.glPushMatrix();
GL11.glTranslated(x + 0.5D, y, z + 0.5D);
GL11.glEnable(GL11.GL_LIGHTING);
GL11.glEnable(GL11.GL_CULL_FACE);
switch(tileEntity.getBlockMetadata() - BlockDummyable.offset) {
case 2: GL11.glRotatef(90, 0F, 1F, 0F); break;
case 4: GL11.glRotatef(180, 0F, 1F, 0F); break;
case 3: GL11.glRotatef(270, 0F, 1F, 0F); break;
case 5: GL11.glRotatef(0, 0F, 1F, 0F); break;
}
bindTexture(ResourceManager.missile_pad_rusted_tex);
ResourceManager.missile_pad.renderAll();
if(tileEntity instanceof TileEntityLaunchPadRusted) {
TileEntityLaunchPadRusted launchpad = (TileEntityLaunchPadRusted) tileEntity;
if(launchpad.missileLoaded) {
GL11.glTranslated(0, 1, 0);
Consumer<TextureManager> renderer = ItemRenderMissileGeneric.renderers.get(new ComparableStack(ModItems.missile_doomsday_rusted).makeSingular());
if(renderer != null) renderer.accept(this.field_147501_a.field_147553_e);
}
}
GL11.glEnable(GL11.GL_CULL_FACE);
GL11.glPopMatrix();
}
@Override
public Item getItemForRenderer() {
return Item.getItemFromBlock(ModBlocks.launch_pad_rusted);
}
@Override
public IItemRenderer getRenderer() {
return new ItemRenderBase() {
@Override public void renderInventory() {
GL11.glTranslated(0, -1, 0);
GL11.glScaled(3, 3, 3);
}
@Override public void renderCommon() {
bindTexture(ResourceManager.missile_pad_rusted_tex); ResourceManager.missile_pad.renderAll();
}};
}
}

View File

@ -73,6 +73,7 @@ public class TileMappings {
put(TileEntityRedBarrel.class, "tileentity_barrel");
put(TileEntityYellowBarrel.class, "tileentity_nukebarrel");
put(TileEntityLaunchPad.class, "tileentity_launch1");
put(TileEntityLaunchPadRusted.class, "tileentity_launchpad_rusted");
put(TileEntityLaunchPadLarge.class, "tileentity_launchpad_large");
put(TileEntityDecoBlock.class, "tileentity_deco");
put(TileEntityDecoBlockAltW.class, "tileentity_deco_w");

View File

@ -85,8 +85,8 @@ public abstract class TileEntityLaunchPadBase extends TileEntityMachineBase impl
missiles.put(new ComparableStack(ModItems.missile_nuclear), EntityMissileNuclear.class);
missiles.put(new ComparableStack(ModItems.missile_nuclear_cluster), EntityMissileMirv.class);
missiles.put(new ComparableStack(ModItems.missile_volcano), EntityMissileVolcano.class);
missiles.put(new ComparableStack(ModItems.missile_doomsday), EntityMissileDoomsday.class);
missiles.put(new ComparableStack(ModItems.missile_stealth), EntityMissileStealth.class);
}
@ -307,7 +307,7 @@ public abstract class TileEntityLaunchPadBase extends TileEntityMachineBase impl
}
public boolean isMissileValid(ItemStack stack) {
return stack.getItem() instanceof ItemMissile;
return stack.getItem() instanceof ItemMissile && ((ItemMissile) stack.getItem()).launchable;
}
public boolean hasFuel() {

View File

@ -1,25 +1,37 @@
package com.hbm.tileentity.bomb;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import com.hbm.entity.missile.EntityMissileBaseNT;
import com.hbm.entity.missile.EntityMissileTier4.EntityMissileDoomsdayRusted;
import com.hbm.interfaces.IBomb.BombReturnCode;
import com.hbm.interfaces.IControlReceiver;
import com.hbm.inventory.container.ContainerLaunchPadRusted;
import com.hbm.inventory.gui.GUILaunchPadRusted;
import com.hbm.items.ModItems;
import com.hbm.main.MainRegistry;
import com.hbm.tileentity.IGUIProvider;
import com.hbm.tileentity.TileEntityMachineBase;
import com.hbm.util.TrackerUtil;
import com.hbm.util.fauxpointtwelve.BlockPos;
import api.hbm.item.IDesignatorItem;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import io.netty.buffer.ByteBuf;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.Container;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.util.Vec3;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
public class TileEntityLaunchPadRusted extends TileEntityMachineBase implements IGUIProvider {
public class TileEntityLaunchPadRusted extends TileEntityMachineBase implements IGUIProvider, IControlReceiver {
public int prevRedstonePower;
public int redstonePower;
@ -28,7 +40,7 @@ public class TileEntityLaunchPadRusted extends TileEntityMachineBase implements
public boolean missileLoaded;
public TileEntityLaunchPadRusted() {
super(3);
super(4);
}
@Override
@ -39,15 +51,77 @@ public class TileEntityLaunchPadRusted extends TileEntityMachineBase implements
@Override
public void updateEntity() {
if(!worldObj.isRemote) {
if(this.redstonePower > 0 && this.prevRedstonePower <= 0) {
this.launch();
}
this.prevRedstonePower = this.redstonePower;
this.networkPackNT(250);
} else {
List<EntityMissileBaseNT> entities = worldObj.getEntitiesWithinAABB(EntityMissileBaseNT.class, AxisAlignedBB.getBoundingBox(xCoord - 0.5, yCoord, zCoord - 0.5, xCoord + 1.5, yCoord + 10, zCoord + 1.5));
if(!entities.isEmpty()) {
for(int i = 0; i < 15; i++) {
ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - 10);
if(worldObj.rand.nextBoolean()) dir = dir.getOpposite();
if(worldObj.rand.nextBoolean()) dir = dir.getRotation(ForgeDirection.UP);
float moX = (float) (worldObj.rand.nextGaussian() * 0.15F + 0.75) * dir.offsetX;
float moZ = (float) (worldObj.rand.nextGaussian() * 0.15F + 0.75) * dir.offsetZ;
MainRegistry.proxy.spawnParticle(xCoord + 0.5, yCoord + 0.25, zCoord + 0.5, "launchsmoke", new float[] {moX, 0, moZ});
}
}
}
}
@Override
public void serialize(ByteBuf buf) {
super.serialize(buf);
buf.writeBoolean(this.missileLoaded);
}
@Override
public void deserialize(ByteBuf buf) {
super.deserialize(buf);
this.missileLoaded = buf.readBoolean();
}
public BombReturnCode launch() {
return BombReturnCode.UNDEFINED;
if(slots[1] != null && slots[2] != null && slots[3] != null && this.missileLoaded) {
if(slots[1].getItem() == ModItems.launch_code && slots[2].getItem() == ModItems.launch_key) {
if(slots[3] != null && slots[3].getItem() instanceof IDesignatorItem) {
IDesignatorItem designator = (IDesignatorItem) slots[3].getItem();
if(!designator.isReady(worldObj, slots[3], xCoord, yCoord, zCoord)) return BombReturnCode.ERROR_MISSING_COMPONENT;
Vec3 coords = designator.getCoords(worldObj, slots[3], xCoord, yCoord, zCoord);
int targetX = (int) Math.floor(coords.xCoord);
int targetZ = (int) Math.floor(coords.zCoord);
EntityMissileDoomsdayRusted missile = new EntityMissileDoomsdayRusted(worldObj, xCoord + 0.5F, yCoord + 1F, zCoord + 0.5F, targetX, targetZ);
worldObj.spawnEntityInWorld(missile);
TrackerUtil.setTrackingRange(worldObj, missile, 500);
worldObj.playSoundEffect(xCoord + 0.5, yCoord, zCoord + 0.5, "hbm:weapon.missileTakeOff", 2.0F, 1.0F);
this.missileLoaded = false;
this.decrStackSize(1, 1);
this.markDirty();
}
}
}
return BombReturnCode.ERROR_MISSING_COMPONENT;
}
@Override
public void readFromNBT(NBTTagCompound nbt) {
super.readFromNBT(nbt);
this.missileLoaded = nbt.getBoolean("missileLoaded");
this.redstonePower = nbt.getInteger("redstonePower");
this.prevRedstonePower = nbt.getInteger("prevRedstonePower");
@ -61,6 +135,8 @@ public class TileEntityLaunchPadRusted extends TileEntityMachineBase implements
@Override
public void writeToNBT(NBTTagCompound nbt) {
super.writeToNBT(nbt);
nbt.setBoolean("missileLoaded", missileLoaded);
nbt.setInteger("redstonePower", redstonePower);
nbt.setInteger("prevRedstonePower", prevRedstonePower);
@ -129,4 +205,20 @@ public class TileEntityLaunchPadRusted extends TileEntityMachineBase implements
public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) {
return new GUILaunchPadRusted(player.inventory, this);
}
@Override
public boolean hasPermission(EntityPlayer player) {
return this.isUseableByPlayer(player);
}
@Override
public void receiveControl(NBTTagCompound data) {
if(data.hasKey("release")) {
if(this.missileLoaded && slots[0] == null) {
this.missileLoaded = false;
slots[0] = new ItemStack(ModItems.missile_doomsday_rusted);
this.markDirty();
}
}
}
}

View File

@ -347,6 +347,7 @@ container.hydrotreater=Hydrotreater
container.iGenerator=Industrieller Generator
container.keyForge=Schlossertisch
container.launchPad=Startrampe
container.launchPadRusted=Startrampe
container.launchTable=Große Startrampe
container.leadBox=Sicherheitsbehälter
container.machineArcWelder=Lichtbogenschweißer
@ -2245,6 +2246,9 @@ item.laser_crystal_co2.name=CO2-Desh-Laserkristall
item.laser_crystal_digamma.name=Digamma-Laserkristall
item.laser_crystal_dnt.desc=Dineutronium-Spark Fermion Superkristall
item.laser_crystal_dnt.name=Spark-Laserkristall
item.launch_code.name=Silo-Startcode
item.launch_code_piece.name=Silo-Startcodestück
item.launch_key.name=Silo-Startschlüssel
item.lead_gavel.name=Bleierner Richterhammer
item.lemon.name="Zitrone"
item.letter.name=Eilbrief

View File

@ -706,6 +706,7 @@ container.hydrotreater=Hydrotreater
container.iGenerator=Industrial Generator
container.keyForge=Locksmith Table
container.launchPad=Launch Pad
container.launchPadRusted=Launch Pad
container.launchTable=Large Launch Pad
container.leadBox=Containment Box
container.machineArcWelder=Arc Welder
@ -2996,6 +2997,9 @@ item.laser_crystal_co2.name=CO2-Desh Laser Crystal
item.laser_crystal_digamma.name=Digamma Laser Crystal
item.laser_crystal_dnt.desc=Dineutronium-Spark Fermion Supercrystal
item.laser_crystal_dnt.name=Spark Laser Crystal
item.launch_code.name=Silo Launch Code
item.launch_code_piece.name=Silo Launch Code Piece
item.launch_key.name=Silo Launch Key
item.lead_gavel.name=Leaden Gavel
item.lemon.name="Lemon"
item.letter.name=Express Mail

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 290 B

After

Width:  |  Height:  |  Size: 320 B