Ported Sliding Blast Door from 1.12.2 using new door API. Introduced door skins

This commit is contained in:
Toshayo 2023-06-21 22:40:56 +02:00
parent e94548ed0c
commit 7d8ee8ce24
No known key found for this signature in database
GPG Key ID: 7DC46644B561B1B4
27 changed files with 1080 additions and 306 deletions

View File

@ -601,6 +601,7 @@ public class ModBlocks {
public static Block vault_door; public static Block vault_door;
public static Block blast_door; public static Block blast_door;
public static Block sliding_blast_door;
public static Block fire_door; public static Block fire_door;
public static Block transition_seal; public static Block transition_seal;
@ -2064,6 +2065,9 @@ public class ModBlocks {
vault_door = new VaultDoor(Material.iron).setBlockName("vault_door").setHardness(10.0F).setResistance(10000.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":vault_door"); vault_door = new VaultDoor(Material.iron).setBlockName("vault_door").setHardness(10.0F).setResistance(10000.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":vault_door");
blast_door = new BlastDoor(Material.iron).setBlockName("blast_door").setHardness(10.0F).setResistance(10000.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":blast_door"); blast_door = new BlastDoor(Material.iron).setBlockName("blast_door").setHardness(10.0F).setResistance(10000.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":blast_door");
sliding_blast_door = new BlockDoorGeneric(Material.iron, DoorDecl.SLIDE_DOOR).setBlockName("sliding_blast_door").setHardness(150.0F).setResistance(7500.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":sliding_blast_door");
fire_door = new BlockDoorGeneric(Material.iron, DoorDecl.FIRE_DOOR).setBlockName("fire_door").setHardness(10.0F).setResistance(10000.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":fire_door"); fire_door = new BlockDoorGeneric(Material.iron, DoorDecl.FIRE_DOOR).setBlockName("fire_door").setHardness(10.0F).setResistance(10000.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":fire_door");
transition_seal = new BlockDoorGeneric(Material.iron, DoorDecl.TRANSITION_SEAL).setBlockName("transition_seal").setHardness(10.0F).setResistance(10000.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":transition_seal"); transition_seal = new BlockDoorGeneric(Material.iron, DoorDecl.TRANSITION_SEAL).setBlockName("transition_seal").setHardness(10.0F).setResistance(10000.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":transition_seal");
@ -2985,7 +2989,8 @@ public class ModBlocks {
GameRegistry.registerBlock(blast_door, blast_door.getUnlocalizedName()); GameRegistry.registerBlock(blast_door, blast_door.getUnlocalizedName());
GameRegistry.registerBlock(fire_door, fire_door.getUnlocalizedName()); GameRegistry.registerBlock(fire_door, fire_door.getUnlocalizedName());
GameRegistry.registerBlock(transition_seal, transition_seal.getUnlocalizedName()); GameRegistry.registerBlock(transition_seal, transition_seal.getUnlocalizedName());
GameRegistry.registerBlock(sliding_blast_door, sliding_blast_door.getUnlocalizedName());
//Doors //Doors
GameRegistry.registerBlock(door_metal, door_metal.getUnlocalizedName()); GameRegistry.registerBlock(door_metal, door_metal.getUnlocalizedName());
GameRegistry.registerBlock(door_office, door_office.getUnlocalizedName()); GameRegistry.registerBlock(door_office, door_office.getUnlocalizedName());

View File

@ -3,6 +3,7 @@ package com.hbm.blocks.generic;
import java.util.List; import java.util.List;
import com.hbm.blocks.BlockDummyable; import com.hbm.blocks.BlockDummyable;
import com.hbm.items.special.ItemDoorSkin;
import com.hbm.tileentity.DoorDecl; import com.hbm.tileentity.DoorDecl;
import com.hbm.tileentity.TileEntityDoorGeneric; import com.hbm.tileentity.TileEntityDoorGeneric;
import com.hbm.util.fauxpointtwelve.BlockPos; import com.hbm.util.fauxpointtwelve.BlockPos;
@ -54,12 +55,14 @@ public class BlockDoorGeneric extends BlockDummyable {
TileEntityDoorGeneric door = (TileEntityDoorGeneric) world.getTileEntity(pos1[0], pos1[1], pos1[2]); TileEntityDoorGeneric door = (TileEntityDoorGeneric) world.getTileEntity(pos1[0], pos1[1], pos1[2]);
if(door != null) { if(door != null) {
return door.tryToggle(playerIn); if(playerIn.getHeldItem() != null && playerIn.getHeldItem().getItem() instanceof ItemDoorSkin) {
return door.setSkinIndex((byte) playerIn.getHeldItem().getItemDamage());
} else {
return door.tryToggle(playerIn);
}
} }
} }
if(!playerIn.isSneaking()) return !playerIn.isSneaking();
return true;
return false;
} }
@Override @Override

View File

@ -2,16 +2,20 @@ package com.hbm.interfaces;
public interface IDoor { public interface IDoor {
public void open(); void open();
public void close(); void close();
public DoorState getState(); DoorState getState();
public void toggle(); void toggle();
public default boolean setTexture(String tex) { default boolean setTexture(String tex) {
return false;
}
default void setTextureState(byte tex) { }
default boolean setSkinIndex(byte skinIndex) {
return false; return false;
} }
public default void setTextureState(byte tex) { };
public enum DoorState { enum DoorState {
CLOSED, CLOSED,
OPEN, OPEN,
CLOSING, CLOSING,

View File

@ -1174,6 +1174,17 @@ public class AssemblerRecipes {
new ComparableStack(ModItems.bolt_dura_steel, 12), new ComparableStack(ModItems.bolt_dura_steel, 12),
new OreDictStack(KEY_YELLOW, 4) new OreDictStack(KEY_YELLOW, 4)
}, 1200); }, 1200);
makeRecipe(new ComparableStack(ModBlocks.sliding_blast_door, 1), new AStack[] {
new OreDictStack(STEEL.ingot(), 16),
new OreDictStack(W.ingot(), 8),
new ComparableStack(ModBlocks.reinforced_glass, 4),
new ComparableStack(Blocks.quartz_block, 10),
new ComparableStack(ModItems.plate_polymer, 3),
new ComparableStack(ModItems.bolt_tungsten, 3),
new ComparableStack(ModItems.bolt_dura_steel, 3),
new ComparableStack(ModItems.motor, 2)
}, 300);
if(Loader.isModLoaded("Mekanism")) { if(Loader.isModLoaded("Mekanism")) {

View File

@ -2321,7 +2321,9 @@ public class ModItems {
public static Item door_metal; public static Item door_metal;
public static Item door_office; public static Item door_office;
public static Item door_bunker; public static Item door_bunker;
public static Item sliding_blast_door_skin;
public static Item record_lc; public static Item record_lc;
public static Item record_ss; public static Item record_ss;
public static Item record_vc; public static Item record_vc;
@ -5349,6 +5351,8 @@ public class ModItems {
door_office = new ItemModDoor().setUnlocalizedName("door_office").setCreativeTab(MainRegistry.blockTab).setTextureName(RefStrings.MODID + ":door_office"); door_office = new ItemModDoor().setUnlocalizedName("door_office").setCreativeTab(MainRegistry.blockTab).setTextureName(RefStrings.MODID + ":door_office");
door_bunker = new ItemModDoor().setUnlocalizedName("door_bunker").setCreativeTab(MainRegistry.blockTab).setTextureName(RefStrings.MODID + ":door_bunker"); door_bunker = new ItemModDoor().setUnlocalizedName("door_bunker").setCreativeTab(MainRegistry.blockTab).setTextureName(RefStrings.MODID + ":door_bunker");
sliding_blast_door_skin = new ItemSlidingBlastDoorSkin().setUnlocalizedName("sliding_blast_door_skin").setCreativeTab(CreativeTabs.tabMisc).setTextureName(RefStrings.MODID + ":sliding_blast_door_default");
record_lc = new ItemModRecord("lc").setUnlocalizedName("record_lc").setCreativeTab(CreativeTabs.tabMisc).setTextureName(RefStrings.MODID + ":record_lc"); record_lc = new ItemModRecord("lc").setUnlocalizedName("record_lc").setCreativeTab(CreativeTabs.tabMisc).setTextureName(RefStrings.MODID + ":record_lc");
record_ss = new ItemModRecord("ss").setUnlocalizedName("record_ss").setCreativeTab(CreativeTabs.tabMisc).setTextureName(RefStrings.MODID + ":record_ss"); record_ss = new ItemModRecord("ss").setUnlocalizedName("record_ss").setCreativeTab(CreativeTabs.tabMisc).setTextureName(RefStrings.MODID + ":record_ss");
record_vc = new ItemModRecord("vc").setUnlocalizedName("record_vc").setCreativeTab(CreativeTabs.tabMisc).setTextureName(RefStrings.MODID + ":record_vc"); record_vc = new ItemModRecord("vc").setUnlocalizedName("record_vc").setCreativeTab(CreativeTabs.tabMisc).setTextureName(RefStrings.MODID + ":record_vc");
@ -7962,7 +7966,8 @@ public class ModItems {
GameRegistry.registerItem(door_metal, door_metal.getUnlocalizedName()); GameRegistry.registerItem(door_metal, door_metal.getUnlocalizedName());
GameRegistry.registerItem(door_office, door_office.getUnlocalizedName()); GameRegistry.registerItem(door_office, door_office.getUnlocalizedName());
GameRegistry.registerItem(door_bunker, door_bunker.getUnlocalizedName()); GameRegistry.registerItem(door_bunker, door_bunker.getUnlocalizedName());
GameRegistry.registerItem(sliding_blast_door_skin, sliding_blast_door_skin.getUnlocalizedName());
//Records //Records
GameRegistry.registerItem(record_lc, record_lc.getUnlocalizedName()); GameRegistry.registerItem(record_lc, record_lc.getUnlocalizedName());
GameRegistry.registerItem(record_ss, record_ss.getUnlocalizedName()); GameRegistry.registerItem(record_ss, record_ss.getUnlocalizedName());

View File

@ -0,0 +1,36 @@
package com.hbm.items.special;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.IIcon;
import java.util.List;
public class ItemDoorSkin extends Item {
protected final IIcon[] icons;
public ItemDoorSkin(int skinCount) {
setMaxStackSize(1);
icons = new IIcon[skinCount];
}
@Override
public boolean getHasSubtypes() {
return true;
}
@Override
public void getSubItems(Item item, CreativeTabs creativeTabs, List list) {
for(int i = 0; i < icons.length; i++) {
list.add(new ItemStack(item, 1, i));
}
}
@SideOnly(Side.CLIENT)
public IIcon getIconFromDamage(int meta) {
return icons[meta];
}
}

View File

@ -0,0 +1,22 @@
package com.hbm.items.special;
import com.hbm.lib.RefStrings;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.client.renderer.texture.IIconRegister;
public class ItemSlidingBlastDoorSkin extends ItemDoorSkin {
public ItemSlidingBlastDoorSkin() {
super(3);
}
@Override
@SideOnly(Side.CLIENT)
public void registerIcons(IIconRegister reg) {
this.itemIcon = reg.registerIcon(this.getIconString());
this.icons[0] = reg.registerIcon(RefStrings.MODID + ":sliding_blast_door_default");
this.icons[1] = reg.registerIcon(RefStrings.MODID + ":sliding_blast_door_variant1");
this.icons[2] = reg.registerIcon(RefStrings.MODID + ":sliding_blast_door_variant2");
}
}

View File

@ -1083,6 +1083,11 @@ public class CraftingManager {
ModItems.circuit_star_piece.stackFromEnum(ScrapType.BOARD_TRANSISTOR), ModItems.circuit_star_piece.stackFromEnum(ScrapType.BOARD_TRANSISTOR),
ModItems.circuit_star_piece.stackFromEnum(ScrapType.BOARD_BLANK) ModItems.circuit_star_piece.stackFromEnum(ScrapType.BOARD_BLANK)
}); });
addRecipeAuto(new ItemStack(ModItems.sliding_blast_door_skin), "SPS", "DPD", "SPS", 'P', Items.paper, 'D', "dye", 'S', STEEL.plate());
addShapelessAuto(new ItemStack(ModItems.sliding_blast_door_skin, 1, 1), new ItemStack(ModItems.sliding_blast_door_skin, 1, 0));
addShapelessAuto(new ItemStack(ModItems.sliding_blast_door_skin, 1, 2), new ItemStack(ModItems.sliding_blast_door_skin, 1, 1));
addShapelessAuto(new ItemStack(ModItems.sliding_blast_door_skin), new ItemStack(ModItems.sliding_blast_door_skin, 1, 2));
} }
public static void crumple() { public static void crumple() {

View File

@ -290,7 +290,15 @@ public class ResourceManager {
public static final IModelCustom blast_door_tooth = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/blast_door_tooth.obj")); public static final IModelCustom blast_door_tooth = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/blast_door_tooth.obj"));
public static final IModelCustom blast_door_slider = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/blast_door_slider.obj")); public static final IModelCustom blast_door_slider = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/blast_door_slider.obj"));
public static final IModelCustom blast_door_block = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/blast_door_block.obj")); public static final IModelCustom blast_door_block = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/blast_door_block.obj"));
//Sliding Blast Door
public static final ResourceLocation sliding_blast_door_tex = new ResourceLocation(RefStrings.MODID, "textures/models/doors/sliding_blast_door.png");
public static final ResourceLocation sliding_blast_door_variant1_tex = new ResourceLocation(RefStrings.MODID, "textures/models/doors/sliding_blast_door_variant1.png");
public static final ResourceLocation sliding_blast_door_variant2_tex = new ResourceLocation(RefStrings.MODID, "textures/models/doors/sliding_blast_door_variant2.png");
public static AnimatedModel sliding_blast_door;
public static Animation sliding_blast_door_anim;
//Doors //Doors
public static AnimatedModel transition_seal; public static AnimatedModel transition_seal;
public static Animation transition_seal_anim; public static Animation transition_seal_anim;
@ -1356,5 +1364,8 @@ public class ResourceManager {
public static void loadAnimatedModels(){ public static void loadAnimatedModels(){
transition_seal = ColladaLoader.load(new ResourceLocation(RefStrings.MODID, "models/doors/seal.dae"), true); transition_seal = ColladaLoader.load(new ResourceLocation(RefStrings.MODID, "models/doors/seal.dae"), true);
transition_seal_anim = ColladaLoader.loadAnim(24040, new ResourceLocation(RefStrings.MODID, "models/doors/seal.dae")); transition_seal_anim = ColladaLoader.loadAnim(24040, new ResourceLocation(RefStrings.MODID, "models/doors/seal.dae"));
sliding_blast_door = ColladaLoader.load(new ResourceLocation(RefStrings.MODID, "models/doors/sliding_blast_door.dae"));
sliding_blast_door_anim = ColladaLoader.loadAnim(1200, new ResourceLocation(RefStrings.MODID, "models/doors/sliding_blast_door.dae"));
} }
} }

View File

@ -15,20 +15,22 @@ public class TEDoorAnimationPacket implements IMessage {
public int x, y, z; public int x, y, z;
public byte state; public byte state;
public byte skinIndex;
public byte texture; public byte texture;
public TEDoorAnimationPacket() { public TEDoorAnimationPacket() {
} }
public TEDoorAnimationPacket(int x, int y, int z, byte state) { public TEDoorAnimationPacket(int x, int y, int z, byte state) {
this(x, y, z, state, (byte) -1); this(x, y, z, state, (byte) 0, (byte) -1);
} }
public TEDoorAnimationPacket(int x, int y, int z, byte state, byte tex) { public TEDoorAnimationPacket(int x, int y, int z, byte state, byte skinIndex, byte tex) {
this.x = x; this.x = x;
this.y = y; this.y = y;
this.z = z; this.z = z;
this.state = state; this.state = state;
this.skinIndex = skinIndex;
this.texture = tex; this.texture = tex;
} }
@ -38,6 +40,7 @@ public class TEDoorAnimationPacket implements IMessage {
y = buf.readInt(); y = buf.readInt();
z = buf.readInt(); z = buf.readInt();
state = buf.readByte(); state = buf.readByte();
skinIndex = buf.readByte();
if(buf.readableBytes() == 1){ if(buf.readableBytes() == 1){
texture = buf.readByte(); texture = buf.readByte();
} }
@ -49,6 +52,7 @@ public class TEDoorAnimationPacket implements IMessage {
buf.writeInt(y); buf.writeInt(y);
buf.writeInt(z); buf.writeInt(z);
buf.writeByte(state); buf.writeByte(state);
buf.writeByte(skinIndex);
if(texture != -1){ if(texture != -1){
buf.writeByte(texture); buf.writeByte(texture);
} }
@ -63,6 +67,7 @@ public class TEDoorAnimationPacket implements IMessage {
TileEntity te = Minecraft.getMinecraft().theWorld.getTileEntity(m.x, m.y, m.z); TileEntity te = Minecraft.getMinecraft().theWorld.getTileEntity(m.x, m.y, m.z);
if(te instanceof IAnimatedDoor){ if(te instanceof IAnimatedDoor){
((IAnimatedDoor) te).handleNewState(m.state); ((IAnimatedDoor) te).handleNewState(m.state);
((IAnimatedDoor) te).setSkinIndex(m.skinIndex);
((IAnimatedDoor) te).setTextureState(m.texture); ((IAnimatedDoor) te).setTextureState(m.texture);
} }

View File

@ -65,7 +65,7 @@ public class RenderDoorGeneric extends TileEntitySpecialRenderer {
AnimatedModel animModel = door.getAnimatedModel(); AnimatedModel animModel = door.getAnimatedModel();
if(animModel != null){ if(animModel != null){
Animation anim = door.getAnim(); Animation anim = door.getAnim();
bindTexture(door.getTextureForPart("")); bindTexture(door.getTextureForPart(te.getSkinIndex(), ""));
long time = System.currentTimeMillis(); long time = System.currentTimeMillis();
long startTime = te.state > 1 ? te.animStartTime : time; long startTime = te.state > 1 ? te.animStartTime : time;
boolean reverse = te.state == 1 || te.state == 2; boolean reverse = te.state == 1 || te.state == 2;
@ -83,14 +83,14 @@ public class RenderDoorGeneric extends TileEntitySpecialRenderer {
if(!door.doesRender(p.getLeft(), false)) if(!door.doesRender(p.getLeft(), false))
continue; continue;
GL11.glPushMatrix(); GL11.glPushMatrix();
bindTexture(door.getTextureForPart(p.getLeft())); bindTexture(door.getTextureForPart(te.getSkinIndex(), p.getLeft()));
doPartTransform(door, p.getLeft(), openTicks, false); doPartTransform(door, p.getLeft(), openTicks, false);
GL11.glCallList(p.getRight()); GL11.glCallList(p.getRight());
for(String name : door.getChildren(p.getLeft())){ for(String name : door.getChildren(p.getLeft())){
if(!door.doesRender(name, true)) if(!door.doesRender(name, true))
continue; continue;
GL11.glPushMatrix(); GL11.glPushMatrix();
bindTexture(door.getTextureForPart(name)); bindTexture(door.getTextureForPart(te.getSkinIndex(), name));
doPartTransform(door, name, openTicks, true); doPartTransform(door, name, openTicks, true);
model.renderPart(name); model.renderPart(name);
GL11.glPopMatrix(); GL11.glPopMatrix();

View File

@ -1,306 +1,425 @@
package com.hbm.tileentity; package com.hbm.tileentity;
import org.lwjgl.opengl.GL11;
import com.hbm.animloader.AnimatedModel; import com.hbm.animloader.AnimatedModel;
import com.hbm.animloader.Animation; import com.hbm.animloader.Animation;
import com.hbm.main.ResourceManager; import com.hbm.main.ResourceManager;
import com.hbm.render.loader.WavefrontObjDisplayList; import com.hbm.render.loader.WavefrontObjDisplayList;
import com.hbm.util.BobMathUtil; import com.hbm.util.BobMathUtil;
import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly; import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.AxisAlignedBB;
import net.minecraft.util.ResourceLocation; import net.minecraft.util.ResourceLocation;
import org.lwjgl.opengl.GL11;
public abstract class DoorDecl { public abstract class DoorDecl {
public static final DoorDecl TRANSITION_SEAL = new DoorDecl(){
@Override
public String getOpenSoundStart() {
return "hbm:door.TransitionSealOpen";
};
@Override
public float getSoundVolume(){
return 6;
}
@Override
@SideOnly(Side.CLIENT)
public void getTranslation(String partName, float openTicks, boolean child, float[] trans) {
if(!partName.equals("base")){
set(trans, 0, 3.5F*getNormTime(openTicks), 0);
} else {
super.getTranslation(partName, openTicks, child, trans);
}
};
@Override
@SideOnly(Side.CLIENT)
public void doOffsetTransform() {
GL11.glTranslated(0, 0, 0.5);
};
@Override
@SideOnly(Side.CLIENT)
public double[][] getClippingPlanes() {
return super.getClippingPlanes();
};
@Override
public int timeToOpen() {
return 480;
};
@Override
public int[][] getDoorOpenRanges(){
//3 is tall
//4 is wide
return new int[][]{{-9, 2, 0, 20, 20, 1}};
}
@Override public static final DoorDecl TRANSITION_SEAL = new DoorDecl() {
public int[] getDimensions(){
return new int[]{23, 0, 0, 0, 13, 12};
}
@Override
public AxisAlignedBB getBlockBound(int x, int y, int z, boolean open) {
return super.getBlockBound(x, y, z, open);
};
@Override @Override
@SideOnly(Side.CLIENT) public String getOpenSoundStart() {
public ResourceLocation getTextureForPart(String partName){ return "hbm:door.TransitionSealOpen";
return ResourceManager.transition_seal_tex; }
}
@Override @Override
@SideOnly(Side.CLIENT) public float getSoundVolume() {
public Animation getAnim() { return 6;
return ResourceManager.transition_seal_anim; }
};
@Override
@SideOnly(Side.CLIENT)
public AnimatedModel getAnimatedModel() {
return ResourceManager.transition_seal;
};
@Override
@SideOnly(Side.CLIENT)
public WavefrontObjDisplayList getModel(){
return null;
}
};
public static final DoorDecl FIRE_DOOR = new DoorDecl(){
@Override
public String getOpenSoundEnd() {
return "hbm:door.wghStop";
};
@Override
public String getOpenSoundLoop() {
return "hbm:door.wghStart";
};
@Override
public String getSoundLoop2() {
return "hbm:door.alarm6";
};
@Override
public float getSoundVolume(){
return 2;
}
@Override
@SideOnly(Side.CLIENT)
public void getTranslation(String partName, float openTicks, boolean child, float[] trans) {
if(!partName.equals("frame")){
set(trans, 0, 3*getNormTime(openTicks), 0);
} else {
super.getTranslation(partName, openTicks, child, trans);
}
};
@Override
@SideOnly(Side.CLIENT)
public void doOffsetTransform() {
GL11.glTranslated(0, 0, 0.5);
};
@Override
@SideOnly(Side.CLIENT)
public double[][] getClippingPlanes() {
return new double[][]{{0, -1, 0, 3.0001}};
};
@Override
public int timeToOpen() {
return 160;
};
@Override
public int[][] getDoorOpenRanges(){
return new int[][]{{-1, 0, 0, 3, 4, 1}};
}
@Override @Override
public int[] getDimensions(){ @SideOnly(Side.CLIENT)
return new int[]{2, 0, 0, 0, 2, 1}; public void getTranslation(String partName, float openTicks, boolean child, float[] trans) {
} if (!partName.equals("base")) {
set(trans, 0, 3.5F * getNormTime(openTicks), 0);
@Override } else {
public AxisAlignedBB getBlockBound(int x, int y, int z, boolean open) { super.getTranslation(partName, openTicks, child, trans);
if(!open) }
return AxisAlignedBB.getBoundingBox(0, 0, 0, 1, 1, 1); }
if(z == 1){
return AxisAlignedBB.getBoundingBox(0.5, 0, 0, 1, 1, 1);
} else if(z == -2){
return AxisAlignedBB.getBoundingBox(0, 0, 0, 0.5, 1, 1);
} else if(y > 1){
return AxisAlignedBB.getBoundingBox(0, 0.75, 0, 1, 1, 1);
} else if(y == 0) {
return AxisAlignedBB.getBoundingBox(0, 0, 0, 1, 0.1, 1);
} else {
return super.getBlockBound(x, y, z, open);
}
};
@Override @Override
@SideOnly(Side.CLIENT) @SideOnly(Side.CLIENT)
public ResourceLocation getTextureForPart(String partName){ public void doOffsetTransform() {
return ResourceManager.fire_door_tex; GL11.glTranslated(0, 0, 0.5);
} }
@Override @Override
@SideOnly(Side.CLIENT) @SideOnly(Side.CLIENT)
public WavefrontObjDisplayList getModel(){ public double[][] getClippingPlanes() {
return ResourceManager.fire_door; return super.getClippingPlanes();
} }
};
//Format: x, y, z, tangent amount 1 (how long the door would be if it moved up), tangent amount 2 (door places blocks in this direction), axis (0-x, 1-y, 2-z) @Override
public abstract int[][] getDoorOpenRanges(); public int timeToOpen() {
return 480;
public abstract int[] getDimensions(); }
public float getDoorRangeOpenTime(int ticks, int idx){ @Override
return getNormTime(ticks); public int[][] getDoorOpenRanges() {
} //3 is tall
//4 is wide
public int timeToOpen(){ return new int[][]{{-9, 2, 0, 20, 20, 1}};
return 20; }
}
@Override
public float getNormTime(float time){ public int[] getDimensions() {
return getNormTime(time, 0, timeToOpen()); return new int[]{23, 0, 0, 0, 13, 12};
} }
public float getNormTime(float time, float min, float max){ @Override
return BobMathUtil.remap01_clamp(time, min, max); public AxisAlignedBB getBlockBound(int x, int y, int z, boolean open) {
} return super.getBlockBound(x, y, z, open);
}
@SideOnly(Side.CLIENT)
public abstract ResourceLocation getTextureForPart(String partName); @Override
@SideOnly(Side.CLIENT)
@SideOnly(Side.CLIENT) public ResourceLocation getTextureForPart(int skinIndex, String partName) {
public abstract WavefrontObjDisplayList getModel(); return ResourceManager.transition_seal_tex;
}
@SideOnly(Side.CLIENT)
public AnimatedModel getAnimatedModel(){ @Override
return null; @SideOnly(Side.CLIENT)
} public Animation getAnim() {
return ResourceManager.transition_seal_anim;
@SideOnly(Side.CLIENT) }
public Animation getAnim(){
return null; @Override
} @SideOnly(Side.CLIENT)
public AnimatedModel getAnimatedModel() {
@SideOnly(Side.CLIENT) return ResourceManager.transition_seal;
public void getTranslation(String partName, float openTicks, boolean child, float[] trans){ }
set(trans, 0, 0, 0);
} @Override
@SideOnly(Side.CLIENT)
@SideOnly(Side.CLIENT) public WavefrontObjDisplayList getModel() {
public void getRotation(String partName, float openTicks, float[] rot){ return null;
set(rot, 0, 0, 0); }
} };
@SideOnly(Side.CLIENT) public static final DoorDecl FIRE_DOOR = new DoorDecl() {
public void getOrigin(String partName, float[] orig){
set(orig, 0, 0, 0); @Override
} public String getOpenSoundEnd() {
return "hbm:door.wghStop";
@SideOnly(Side.CLIENT) }
public boolean doesRender(String partName, boolean child){
return true; @Override
} public String getOpenSoundLoop() {
return "hbm:door.wghStart";
private static final String[] nothing = new String[]{}; }
@SideOnly(Side.CLIENT) @Override
public String[] getChildren(String partName){ public String getSoundLoop2() {
return nothing; return "hbm:door.alarm6";
} }
@SideOnly(Side.CLIENT) @Override
public double[][] getClippingPlanes(){ public float getSoundVolume() {
return new double[][]{}; return 2;
} }
@SideOnly(Side.CLIENT) @Override
public void doOffsetTransform(){ @SideOnly(Side.CLIENT)
} public void getTranslation(String partName, float openTicks, boolean child, float[] trans) {
if (!partName.equals("frame")) {
public AxisAlignedBB getBlockBound(int x, int y, int z, boolean open){ set(trans, 0, 3 * getNormTime(openTicks), 0);
return open ? AxisAlignedBB.getBoundingBox(0, 0, 0, 0, 0, 0) : AxisAlignedBB.getBoundingBox(0, 0, 0, 1, 1, 1); } else {
} super.getTranslation(partName, openTicks, child, trans);
}
public boolean isLadder(boolean open){ }
return false;
} @Override
@SideOnly(Side.CLIENT)
public String getOpenSoundLoop(){ public void doOffsetTransform() {
return null; GL11.glTranslated(0, 0, 0.5);
} }
//Hack @Override
public String getSoundLoop2(){ @SideOnly(Side.CLIENT)
return null; public double[][] getClippingPlanes() {
} return new double[][]{{0, -1, 0, 3.0001}};
}
public String getCloseSoundLoop(){
return getOpenSoundLoop(); @Override
} public int timeToOpen() {
return 160;
public String getOpenSoundStart(){ }
return null;
} @Override
public int[][] getDoorOpenRanges() {
public String getCloseSoundStart(){ return new int[][]{{-1, 0, 0, 3, 4, 1}};
return getOpenSoundStart(); }
}
@Override
public String getOpenSoundEnd(){ public int[] getDimensions() {
return null; return new int[]{2, 0, 0, 0, 2, 1};
} }
public String getCloseSoundEnd(){ @Override
return getOpenSoundEnd(); public AxisAlignedBB getBlockBound(int x, int y, int z, boolean open) {
} if (!open)
return AxisAlignedBB.getBoundingBox(0, 0, 0, 1, 1, 1);
public float getSoundVolume(){ if (z == 1) {
return 1; return AxisAlignedBB.getBoundingBox(0.5, 0, 0, 1, 1, 1);
} } else if (z == -2) {
return AxisAlignedBB.getBoundingBox(0, 0, 0, 0.5, 1, 1);
public float[] set(float[] f, float x, float y, float z){ } else if (y > 1) {
f[0] = x; return AxisAlignedBB.getBoundingBox(0, 0.75, 0, 1, 1, 1);
f[1] = y; } else if (y == 0) {
f[2] = z; return AxisAlignedBB.getBoundingBox(0, 0, 0, 1, 0.1, 1);
return f; } else {
}; return super.getBlockBound(x, y, z, open);
}
}
@Override
@SideOnly(Side.CLIENT)
public ResourceLocation getTextureForPart(int skinIndex, String partName) {
return ResourceManager.fire_door_tex;
}
@Override
@SideOnly(Side.CLIENT)
public WavefrontObjDisplayList getModel() {
return ResourceManager.fire_door;
}
};
public static final DoorDecl SLIDE_DOOR = new DoorDecl() {
@Override
public String getOpenSoundEnd() {
return "hbm:door.sliding_door_opened";
}
@Override
public String getCloseSoundEnd() {
return "hbm:door.sliding_door_shut";
}
@Override
public String getOpenSoundLoop() {
return "hbm:door.sliding_door_opening";
}
@Override
public String getSoundLoop2() {
return "hbm:door.sliding_door_opening";
}
@Override
public float getSoundVolume() {
return 2;
}
@Override
@SideOnly(Side.CLIENT)
public void doOffsetTransform() {
GL11.glRotated(-90, 0, 1, 0);
}
@Override
@SideOnly(Side.CLIENT)
public double[][] getClippingPlanes() {
return new double[][]{
{-1, 0, 0, 3.50001},
{1, 0, 0, 3.50001}
};
}
@Override
public int timeToOpen() {
return 24;
}
@Override
public int[][] getDoorOpenRanges() {
return new int[][]{{-2, 0, 0, 4, 5, 1}};
}
@Override
public int[] getDimensions() {
return new int[]{3, 0, 0, 0, 3, 3};
}
@Override
public AxisAlignedBB getBlockBound(int x, int y, int z, boolean open) {
if (open) {
if (y == 3) {
return AxisAlignedBB.getBoundingBox(0, 0.5, 0, 1, 1, 1);
} else if (y == 0) {
return AxisAlignedBB.getBoundingBox(0, 0, 0, 1, 0.08, 1);
}
}
return super.getBlockBound(x, y, z, open);
}
@Override
public boolean hasSkins() {
return true;
}
@Override
public int getSkinCount() {
return 3;
}
@Override
@SideOnly(Side.CLIENT)
public ResourceLocation getTextureForPart(int skinIndex, String partName) {
return new ResourceLocation[] {
ResourceManager.sliding_blast_door_tex,
ResourceManager.sliding_blast_door_variant1_tex,
ResourceManager.sliding_blast_door_variant2_tex
}[skinIndex];
}
@Override
public WavefrontObjDisplayList getModel() {
return null;
}
@Override
public Animation getAnim() {
return ResourceManager.sliding_blast_door_anim;
}
@Override
public AnimatedModel getAnimatedModel() {
return ResourceManager.sliding_blast_door;
}
};
//Format: x, y, z, tangent amount 1 (how long the door would be if it moved up), tangent amount 2 (door places blocks in this direction), axis (0-x, 1-y, 2-z)
public abstract int[][] getDoorOpenRanges();
public abstract int[] getDimensions();
public float getDoorRangeOpenTime(int ticks, int idx) {
return getNormTime(ticks);
}
public int timeToOpen() {
return 20;
}
public float getNormTime(float time) {
return getNormTime(time, 0, timeToOpen());
}
public float getNormTime(float time, float min, float max) {
return BobMathUtil.remap01_clamp(time, min, max);
}
public boolean hasSkins() {
return false;
}
public int getSkinCount() {
return 0;
}
@SideOnly(Side.CLIENT)
public ResourceLocation getTextureForPart(String partName) {
return getTextureForPart(0, partName);
}
@SideOnly(Side.CLIENT)
public abstract ResourceLocation getTextureForPart(int skinIndex, String partName);
@SideOnly(Side.CLIENT)
public abstract WavefrontObjDisplayList getModel();
@SideOnly(Side.CLIENT)
public AnimatedModel getAnimatedModel() {
return null;
}
@SideOnly(Side.CLIENT)
public Animation getAnim() {
return null;
}
@SideOnly(Side.CLIENT)
public void getTranslation(String partName, float openTicks, boolean child, float[] trans) {
set(trans, 0, 0, 0);
}
@SideOnly(Side.CLIENT)
public void getRotation(String partName, float openTicks, float[] rot) {
set(rot, 0, 0, 0);
}
@SideOnly(Side.CLIENT)
public void getOrigin(String partName, float[] orig) {
set(orig, 0, 0, 0);
}
@SideOnly(Side.CLIENT)
public boolean doesRender(String partName, boolean child) {
return true;
}
private static final String[] nothing = new String[]{};
@SideOnly(Side.CLIENT)
public String[] getChildren(String partName) {
return nothing;
}
@SideOnly(Side.CLIENT)
public double[][] getClippingPlanes() {
return new double[][]{};
}
@SideOnly(Side.CLIENT)
public void doOffsetTransform() {
}
public AxisAlignedBB getBlockBound(int x, int y, int z, boolean open) {
return open ? AxisAlignedBB.getBoundingBox(0, 0, 0, 0, 0, 0) : AxisAlignedBB.getBoundingBox(0, 0, 0, 1, 1, 1);
}
public boolean isLadder(boolean open) {
return false;
}
public String getOpenSoundLoop() {
return null;
}
//Hack
public String getSoundLoop2() {
return null;
}
public String getCloseSoundLoop() {
return getOpenSoundLoop();
}
public String getOpenSoundStart() {
return null;
}
public String getCloseSoundStart() {
return getOpenSoundStart();
}
public String getOpenSoundEnd() {
return null;
}
public String getCloseSoundEnd() {
return getOpenSoundEnd();
}
public float getSoundVolume() {
return 1;
}
public float[] set(float[] f, float x, float y, float z) {
f[0] = x;
f[1] = y;
f[2] = z;
return f;
}
;
} }

View File

@ -33,6 +33,8 @@ public class TileEntityDoorGeneric extends TileEntityLockableBase implements IAn
public long animStartTime = 0; public long animStartTime = 0;
public int redstonePower; public int redstonePower;
public boolean shouldUseBB = false; public boolean shouldUseBB = false;
private byte skinIndex = 0;
public Set<BlockPos> activatedBlocks = new HashSet<>(4); public Set<BlockPos> activatedBlocks = new HashSet<>(4);
private AudioWrapper audio; private AudioWrapper audio;
@ -140,7 +142,7 @@ public class TileEntityDoorGeneric extends TileEntityLockableBase implements IAn
if(state == 2 && openTicks == 0) { if(state == 2 && openTicks == 0) {
state = 0; state = 0;
} }
PacketDispatcher.wrapper.sendToAllAround(new TEDoorAnimationPacket(xCoord, yCoord, zCoord, state, (byte)(shouldUseBB ? 1 : 0)), new TargetPoint(worldObj.provider.dimensionId, xCoord, yCoord, zCoord, 100)); PacketDispatcher.wrapper.sendToAllAround(new TEDoorAnimationPacket(xCoord, yCoord, zCoord, state, skinIndex, (byte)(shouldUseBB ? 1 : 0)), new TargetPoint(worldObj.provider.dimensionId, xCoord, yCoord, zCoord, 100));
if(redstonePower == -1 && state == 0){ if(redstonePower == -1 && state == 0){
tryToggle(-1); tryToggle(-1);
@ -288,6 +290,21 @@ public class TileEntityDoorGeneric extends TileEntityLockableBase implements IAn
shouldUseBB = false; shouldUseBB = false;
} }
public int getSkinIndex() {
return skinIndex;
}
@Override
public boolean setSkinIndex(byte skinIndex) {
if(!getDoorType().hasSkins())
return false;
if(getDoorType().getSkinCount() < skinIndex) {
return false;
}
this.skinIndex = skinIndex;
return true;
}
@Override @Override
public AxisAlignedBB getRenderBoundingBox(){ public AxisAlignedBB getRenderBoundingBox(){
return INFINITE_EXTENT_AABB; return INFINITE_EXTENT_AABB;
@ -305,6 +322,7 @@ public class TileEntityDoorGeneric extends TileEntityLockableBase implements IAn
this.animStartTime = tag.getInteger("animStartTime"); this.animStartTime = tag.getInteger("animStartTime");
this.redstonePower = tag.getInteger("redstoned"); this.redstonePower = tag.getInteger("redstoned");
this.shouldUseBB = tag.getBoolean("shouldUseBB"); this.shouldUseBB = tag.getBoolean("shouldUseBB");
this.skinIndex = tag.getByte("skin");
NBTTagCompound activatedBlocks = tag.getCompoundTag("activatedBlocks"); NBTTagCompound activatedBlocks = tag.getCompoundTag("activatedBlocks");
this.activatedBlocks.clear(); this.activatedBlocks.clear();
for(int i = 0; i < activatedBlocks.func_150296_c().size()/3; i ++){ for(int i = 0; i < activatedBlocks.func_150296_c().size()/3; i ++){
@ -322,6 +340,8 @@ public class TileEntityDoorGeneric extends TileEntityLockableBase implements IAn
tag.setLong("animStartTime", animStartTime); tag.setLong("animStartTime", animStartTime);
tag.setInteger("redstoned", redstonePower); tag.setInteger("redstoned", redstonePower);
tag.setBoolean("shouldUseBB", shouldUseBB); tag.setBoolean("shouldUseBB", shouldUseBB);
if(getDoorType().hasSkins())
tag.setByte("skin", skinIndex);
NBTTagCompound activatedBlocks = new NBTTagCompound(); NBTTagCompound activatedBlocks = new NBTTagCompound();
int i = 0; int i = 0;
for(BlockPos p : this.activatedBlocks){ for(BlockPos p : this.activatedBlocks){

View File

@ -3838,6 +3838,7 @@ item.singularity_super_heated.name=Superheated Resonating Singularity
item.siox.name=SiOX Cancer Medication item.siox.name=SiOX Cancer Medication
item.siox.desc=Reverses mesothelioma with the power of Asbestos! item.siox.desc=Reverses mesothelioma with the power of Asbestos!
item.siren_track.name=Siren Track item.siren_track.name=Siren Track
item.sliding_blast_door_skin.name=Sliding Blast Door Skin
item.smashing_hammer.name=Smashing Hammer item.smashing_hammer.name=Smashing Hammer
item.solid_fuel.name=Solid Fuel item.solid_fuel.name=Solid Fuel
item.solid_fuel_bf.name=Solid Fuel (Balefire) item.solid_fuel_bf.name=Solid Fuel (Balefire)
@ -5083,6 +5084,7 @@ tile.sellafield.4.name=Infernal Sellafite
tile.sellafield.5.name=Sellafite-Corium tile.sellafield.5.name=Sellafite-Corium
tile.sellafield_slaked.name=Slaked Sellafite tile.sellafield_slaked.name=Slaked Sellafite
tile.semtex.name=Semtex tile.semtex.name=Semtex
tile.sliding_blast_door.name=Sliding Blast Door
tile.solar_mirror.name=Heliostat Mirror tile.solar_mirror.name=Heliostat Mirror
tile.soyuz_capsule.name=Cargo Landing Capsule tile.soyuz_capsule.name=Cargo Landing Capsule
tile.soyuz_launcher.name=Soyuz Launch Platform tile.soyuz_launcher.name=Soyuz Launch Platform

File diff suppressed because one or more lines are too long

View File

@ -59,6 +59,9 @@
"door.wghStart": {"category": "block", "sounds": [{"name": "block/door/wgh_start", "stream": true}]}, "door.wghStart": {"category": "block", "sounds": [{"name": "block/door/wgh_start", "stream": true}]},
"door.wghStop": {"category": "block", "sounds": [{"name": "block/door/wgh_stop", "stream": true}]}, "door.wghStop": {"category": "block", "sounds": [{"name": "block/door/wgh_stop", "stream": true}]},
"door.alarm6": {"category": "block", "sounds": [{"name": "block/door/alarm6", "stream": true}]}, "door.alarm6": {"category": "block", "sounds": [{"name": "block/door/alarm6", "stream": true}]},
"door.sliding_door_shut": {"category": "block", "sounds": [{"name": "block/door/sliding_door_shut", "stream": false}]},
"door.sliding_door_opened": {"category": "block", "sounds": [{"name": "block/door/sliding_door_opened", "stream": false}]},
"door.sliding_door_opening": {"category": "block", "sounds": [{"name": "block/door/sliding_door_opening", "stream": false}]},
"item.techBleep": {"category": "player", "sounds": [{"name": "tool/techBleep", "stream": false}]}, "item.techBleep": {"category": "player", "sounds": [{"name": "tool/techBleep", "stream": false}]},
"item.techBoop": {"category": "player", "sounds": [{"name": "tool/techBoop", "stream": false}]}, "item.techBoop": {"category": "player", "sounds": [{"name": "tool/techBoop", "stream": false}]},

Binary file not shown.

After

Width:  |  Height:  |  Size: 153 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 246 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 246 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB