mirror of
https://github.com/HbmMods/Hbm-s-Nuclear-Tech-GIT.git
synced 2026-01-25 10:32:49 +00:00
some more fluid stuff, funny torches
This commit is contained in:
parent
f3446a05ea
commit
ce34f9ca77
@ -23,8 +23,6 @@ public interface IPowerNet {
|
||||
/**
|
||||
* When a link is removed, instead of destroying the network, causing it to be recreated from currently loaded conductors,
|
||||
* we re-evaluate it, creating new nets based on the previous links.
|
||||
*
|
||||
* NYI
|
||||
*/
|
||||
public void reevaluate();
|
||||
|
||||
|
||||
@ -1,10 +1,12 @@
|
||||
package com.hbm.blocks.network;
|
||||
|
||||
import com.hbm.inventory.gui.GUIScreenRadioTorch;
|
||||
import com.hbm.main.MainRegistry;
|
||||
import com.hbm.tileentity.IGUIProvider;
|
||||
import com.hbm.tileentity.network.TileEntityRadioTorchBase;
|
||||
|
||||
import cpw.mods.fml.client.registry.RenderingRegistry;
|
||||
import cpw.mods.fml.common.network.internal.FMLNetworkHandler;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import net.minecraft.block.BlockContainer;
|
||||
@ -13,10 +15,13 @@ import net.minecraft.client.gui.GuiScreen;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.inventory.Container;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.IIcon;
|
||||
import net.minecraft.world.IBlockAccess;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
public abstract class RadioTorchBase extends BlockContainer implements IGUIProvider {
|
||||
|
||||
@SideOnly(Side.CLIENT) protected IIcon iconOn;
|
||||
|
||||
public RadioTorchBase() {
|
||||
super(Material.circuits);
|
||||
@ -45,10 +50,26 @@ public abstract class RadioTorchBase extends BlockContainer implements IGUIProvi
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public IIcon getIcon(int side, int metadata) {
|
||||
return side == 0 ? this.blockIcon : this.iconOn;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int onBlockPlaced(World world, int x, int y, int z, int side, float fX, float fY, float fZ, int meta) {
|
||||
return side;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) {
|
||||
if(world.isRemote && !player.isSneaking()) {
|
||||
FMLNetworkHandler.openGui(player, MainRegistry.instance, 0, world, x, y, z);
|
||||
return true;
|
||||
} else {
|
||||
return !player.isSneaking();
|
||||
}
|
||||
}
|
||||
|
||||
@Override public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) { return null; }
|
||||
|
||||
|
||||
@ -7,13 +7,10 @@ import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import net.minecraft.client.renderer.texture.IIconRegister;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.IIcon;
|
||||
import net.minecraft.world.IBlockAccess;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
public class RadioTorchReceiver extends RadioTorchBase {
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
protected IIcon iconOn;
|
||||
|
||||
public RadioTorchReceiver() {
|
||||
super();
|
||||
@ -30,4 +27,22 @@ public class RadioTorchReceiver extends RadioTorchBase {
|
||||
public TileEntity createNewTileEntity(World world, int meta) {
|
||||
return new TileEntityRadioTorchReceiver();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canProvidePower() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int isProvidingWeakPower(IBlockAccess world, int x, int y, int z, int side) {
|
||||
|
||||
TileEntity tile = world.getTileEntity(x, y, z);
|
||||
|
||||
if(tile instanceof TileEntityRadioTorchReceiver) {
|
||||
int state = ((TileEntityRadioTorchReceiver) tile).lastState;
|
||||
return state;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
@ -7,13 +7,9 @@ import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import net.minecraft.client.renderer.texture.IIconRegister;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.IIcon;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
public class RadioTorchSender extends RadioTorchBase {
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
protected IIcon iconOn;
|
||||
|
||||
public RadioTorchSender() {
|
||||
super();
|
||||
|
||||
@ -1,23 +1,29 @@
|
||||
package com.hbm.inventory.gui;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
import org.lwjgl.input.Keyboard;
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
import com.hbm.lib.RefStrings;
|
||||
import com.hbm.packet.NBTControlPacket;
|
||||
import com.hbm.packet.PacketDispatcher;
|
||||
import com.hbm.tileentity.network.TileEntityRadioTorchBase;
|
||||
import com.hbm.tileentity.network.TileEntityRadioTorchSender;
|
||||
import com.hbm.util.I18nUtil;
|
||||
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.audio.PositionedSoundRecord;
|
||||
import net.minecraft.client.gui.GuiScreen;
|
||||
import net.minecraft.client.gui.GuiTextField;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
|
||||
public class GUIScreenRadioTorch extends GuiScreen {
|
||||
|
||||
protected ResourceLocation texture;
|
||||
protected static final ResourceLocation textureSender = new ResourceLocation(RefStrings.MODID + ":textures/gui/machine/gui_rtty_sender.png");
|
||||
protected static final ResourceLocation textureReceiver = new ResourceLocation(RefStrings.MODID + ":textures/gui/machine/gui_rtty_receiver.png");
|
||||
protected static final ResourceLocation textureSender = new ResourceLocation(RefStrings.MODID + ":textures/gui/machine/gui_rtty_sender.png");
|
||||
protected static final ResourceLocation textureReceiver = new ResourceLocation(RefStrings.MODID + ":textures/gui/machine/gui_rtty_receiver.png");
|
||||
protected TileEntityRadioTorchBase radio;
|
||||
protected String title = "";
|
||||
protected int xSize = 256;
|
||||
@ -47,25 +53,25 @@ public class GUIScreenRadioTorch extends GuiScreen {
|
||||
|
||||
Keyboard.enableRepeatEvents(true);
|
||||
|
||||
int oX = 2;
|
||||
int oY = 2;
|
||||
int oX = 4;
|
||||
int oY = 4;
|
||||
int in = radio instanceof TileEntityRadioTorchSender ? 18 : 0;
|
||||
|
||||
this.frequency = new GuiTextField(this.fontRendererObj, guiLeft + 25 + oX, guiTop + 17 + oY, 90, 14);
|
||||
this.frequency = new GuiTextField(this.fontRendererObj, guiLeft + 25 + oX, guiTop + 17 + oY, 90 - oX * 2, 14);
|
||||
this.frequency.setTextColor(0x00ff00);
|
||||
this.frequency.setDisabledTextColour(0x00ff00);
|
||||
this.frequency.setEnableBackgroundDrawing(false);
|
||||
this.frequency.setMaxStringLength(25);
|
||||
this.frequency.setMaxStringLength(10);
|
||||
this.frequency.setText(radio.channel == null ? "" : radio.channel);
|
||||
|
||||
this.remap = new GuiTextField[16];
|
||||
|
||||
for(int i = 0; i < 16; i++) {
|
||||
this.remap[i] = new GuiTextField(this.fontRendererObj, guiLeft + 7 + (130 * (i / 8)) + oX + in, guiTop + 53 + (18 * (i % 8)) + oY, 50, 14);
|
||||
this.remap[i] = new GuiTextField(this.fontRendererObj, guiLeft + 7 + (130 * (i / 8)) + oX + in, guiTop + 53 + (18 * (i % 8)) + oY, 90 - oX * 2, 14);
|
||||
this.remap[i].setTextColor(0x00ff00);
|
||||
this.remap[i].setDisabledTextColour(0x00ff00);
|
||||
this.remap[i].setEnableBackgroundDrawing(false);
|
||||
this.remap[i].setMaxStringLength(25);
|
||||
this.remap[i].setMaxStringLength(15);
|
||||
this.remap[i].setText(radio.mapping[i] == null ? "" : radio.mapping[i]);
|
||||
}
|
||||
}
|
||||
@ -80,9 +86,19 @@ public class GUIScreenRadioTorch extends GuiScreen {
|
||||
}
|
||||
|
||||
|
||||
private void drawGuiContainerForegroundLayer(int mouseX, int mouseY) {
|
||||
private void drawGuiContainerForegroundLayer(int x, int y) {
|
||||
String name = I18nUtil.resolveKey(this.title);
|
||||
this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, 6, 4210752);
|
||||
this.fontRendererObj.drawString(name, this.guiLeft + this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, this.guiTop + 6, 4210752);
|
||||
|
||||
if(guiLeft + 137 <= x && guiLeft + 137 + 18 > x && guiTop + 17 < y && guiTop + 17 + 18 >= y) {
|
||||
func_146283_a(Arrays.asList(new String[] { radio.customMap ? "Custom Mapping" : "Redstone Passthrough" }), x, y);
|
||||
}
|
||||
if(guiLeft + 173 <= x && guiLeft + 173 + 18 > x && guiTop + 17 < y && guiTop + 17 + 18 >= y) {
|
||||
func_146283_a(Arrays.asList(new String[] { radio.polling ? "Polling" : "State Change" }), x, y);
|
||||
}
|
||||
if(guiLeft + 209 <= x && guiLeft + 209 + 18 > x && guiTop + 17 < y && guiTop + 17 + 18 >= y) {
|
||||
func_146283_a(Arrays.asList(new String[] { "Save Settings" }), x, y);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -92,12 +108,15 @@ public class GUIScreenRadioTorch extends GuiScreen {
|
||||
|
||||
if(radio.customMap) {
|
||||
drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize);
|
||||
drawTexturedModalRect(guiLeft + 137, guiTop + 17, 0, 204, 18, 18);
|
||||
if(radio.polling) drawTexturedModalRect(guiLeft + 173, guiTop + 17, 0, 222, 18, 18);
|
||||
for(int j = 0; j < 16; j++) {
|
||||
this.remap[j].drawTextBox();
|
||||
}
|
||||
} else {
|
||||
drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, 35);
|
||||
drawTexturedModalRect(guiLeft, guiTop + 35, 0, 197, xSize, 7);
|
||||
if(radio.polling) drawTexturedModalRect(guiLeft + 173, guiTop + 17, 0, 222, 18, 18);
|
||||
}
|
||||
|
||||
this.frequency.drawTextBox();
|
||||
@ -112,6 +131,28 @@ public class GUIScreenRadioTorch extends GuiScreen {
|
||||
if(radio.customMap) {
|
||||
for(int j = 0; j < 16; j++) this.remap[j].mouseClicked(x, y, i);
|
||||
}
|
||||
|
||||
if(guiLeft + 137 <= x && guiLeft + 137 + 18 > x && guiTop + 17 < y && guiTop + 17 + 18 >= y) {
|
||||
mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1.0F));
|
||||
NBTTagCompound data = new NBTTagCompound();
|
||||
data.setBoolean("m", !radio.customMap);
|
||||
PacketDispatcher.wrapper.sendToServer(new NBTControlPacket(data, radio.xCoord, radio.yCoord, radio.zCoord));
|
||||
}
|
||||
|
||||
if(guiLeft + 173 <= x && guiLeft + 173 + 18 > x && guiTop + 17 < y && guiTop + 17 + 18 >= y) {
|
||||
mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1.0F));
|
||||
NBTTagCompound data = new NBTTagCompound();
|
||||
data.setBoolean("p", !radio.polling);
|
||||
PacketDispatcher.wrapper.sendToServer(new NBTControlPacket(data, radio.xCoord, radio.yCoord, radio.zCoord));
|
||||
}
|
||||
|
||||
if(guiLeft + 209 <= x && guiLeft + 209 + 18 > x && guiTop + 17 < y && guiTop + 17 + 18 >= y) {
|
||||
mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1.0F));
|
||||
NBTTagCompound data = new NBTTagCompound();
|
||||
data.setString("c", this.frequency.getText());
|
||||
for(int j = 0; j < 16; j++) data.setString("m" + j, this.remap[j].getText());
|
||||
PacketDispatcher.wrapper.sendToServer(new NBTControlPacket(data, radio.xCoord, radio.yCoord, radio.zCoord));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -124,11 +165,19 @@ public class GUIScreenRadioTorch extends GuiScreen {
|
||||
for(int j = 0; j < 16; j++) if(this.remap[j].textboxKeyTyped(c, i)) return;
|
||||
}
|
||||
|
||||
super.keyTyped(c, i);
|
||||
if(i == 1 || i == this.mc.gameSettings.keyBindInventory.getKeyCode()) {
|
||||
this.mc.thePlayer.closeScreen();
|
||||
this.mc.setIngameFocus();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onGuiClosed() {
|
||||
Keyboard.enableRepeatEvents(false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean doesGuiPauseGame() {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@ -85,9 +85,6 @@ import com.hbm.render.util.RenderOverhead.Marker;
|
||||
import com.hbm.sound.AudioWrapper;
|
||||
import com.hbm.sound.AudioWrapperClient;
|
||||
import com.hbm.sound.AudioWrapperClientStartStop;
|
||||
import com.hbm.sound.nt.ISoundSourceTE;
|
||||
import com.hbm.sound.nt.SoundWrapper;
|
||||
import com.hbm.sound.nt.SoundWrapperClient;
|
||||
import com.hbm.tileentity.TileEntityDoorGeneric;
|
||||
import com.hbm.tileentity.bomb.*;
|
||||
import com.hbm.tileentity.conductor.*;
|
||||
@ -1819,12 +1816,6 @@ public class ClientProxy extends ServerProxy {
|
||||
audio.updatePosition(x, y, z);
|
||||
return audio;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SoundWrapper getTileSound(String sound, ISoundSourceTE tile) {
|
||||
SoundWrapperClient wrapper = new SoundWrapperClient(sound, tile);
|
||||
return wrapper;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void playSound(String sound, Object data) { }
|
||||
|
||||
@ -6,8 +6,6 @@ import java.util.List;
|
||||
import com.hbm.handler.HbmKeybinds.EnumKeybind;
|
||||
import com.hbm.saveddata.TomSaveData;
|
||||
import com.hbm.sound.AudioWrapper;
|
||||
import com.hbm.sound.nt.ISoundSourceTE;
|
||||
import com.hbm.sound.nt.SoundWrapper;
|
||||
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
@ -66,10 +64,6 @@ public class ServerProxy {
|
||||
|
||||
public void openLink(String url) { }
|
||||
|
||||
public SoundWrapper getTileSound(String sound, ISoundSourceTE source) {
|
||||
return new SoundWrapper();
|
||||
}
|
||||
|
||||
public List<ItemStack> getSubItems(ItemStack stack) {
|
||||
|
||||
List<ItemStack> list = new ArrayList();
|
||||
|
||||
@ -68,7 +68,7 @@ public class RenderBoxDuct implements ISimpleBlockRenderingHandler {
|
||||
if(te instanceof TileEntityPipeBaseNT) {
|
||||
TileEntityPipeBaseNT pipe = (TileEntityPipeBaseNT) te;
|
||||
type = pipe.getType();
|
||||
if(meta == 2) {
|
||||
if(meta % 3 == 2) {
|
||||
FluidDuctBox.cachedColor = type.getColor();
|
||||
}
|
||||
}
|
||||
|
||||
@ -3,11 +3,13 @@ package com.hbm.render.block;
|
||||
import com.hbm.blocks.network.RadioTorchBase;
|
||||
import com.hbm.main.ResourceManager;
|
||||
import com.hbm.render.util.ObjUtil;
|
||||
import com.hbm.tileentity.network.TileEntityRadioTorchBase;
|
||||
|
||||
import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.client.renderer.RenderBlocks;
|
||||
import net.minecraft.client.renderer.Tessellator;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.IIcon;
|
||||
import net.minecraft.world.IBlockAccess;
|
||||
import net.minecraftforge.client.model.obj.WavefrontObject;
|
||||
@ -25,8 +27,18 @@ public class RenderRTTY implements ISimpleBlockRenderingHandler {
|
||||
tessellator.setBrightness(brightness);
|
||||
tessellator.setColorOpaque_F(1, 1, 1);
|
||||
|
||||
IIcon icon = block.getIcon(world, x, y, z, 0);
|
||||
IIcon icon = block.getIcon(0, 0);
|
||||
int meta = world.getBlockMetadata(x, y, z);
|
||||
|
||||
TileEntity tile = world.getTileEntity(x, y, z);
|
||||
|
||||
if(tile instanceof TileEntityRadioTorchBase) {
|
||||
TileEntityRadioTorchBase rtty = (TileEntityRadioTorchBase) tile;
|
||||
|
||||
if(rtty.lastState > 0) {
|
||||
icon = block.getIcon(1, 0);
|
||||
}
|
||||
}
|
||||
|
||||
float flip = 0;
|
||||
float rotation = 0;
|
||||
|
||||
@ -1,22 +0,0 @@
|
||||
package com.hbm.sound.nt;
|
||||
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.Vec3;
|
||||
|
||||
public interface ISoundSourceTE {
|
||||
|
||||
public boolean isPlaying();
|
||||
|
||||
public default Vec3 getSoundLocation() {
|
||||
TileEntity te = (TileEntity) this;
|
||||
return Vec3.createVectorHelper(te.xCoord + 0.5, te.yCoord + 0.5, te.zCoord + 0.5);
|
||||
}
|
||||
|
||||
public default float getVolume() {
|
||||
return 1F;
|
||||
}
|
||||
|
||||
public default float getPitch() {
|
||||
return 1F;
|
||||
}
|
||||
}
|
||||
@ -1,128 +0,0 @@
|
||||
package com.hbm.sound.nt;
|
||||
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.audio.ISound;
|
||||
import net.minecraft.client.audio.SoundHandler;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraft.util.Vec3;
|
||||
|
||||
/**
|
||||
* I have a dream. That one day every tile entity in this codebase will control their
|
||||
* own sounds. A codebase of the truly free, dammit. A codebase of functionality, not
|
||||
* patterns, ruled by necessity, not chance! Where the code changes to suit the use
|
||||
* case, not the other way around. Where methods and fields are back where they belong:
|
||||
* in the hands of the tile entities! Where every object is free to think - to calcilate
|
||||
* - for itself! Fuck all these limp-dick programmers and chickenshit coders. Fuck this
|
||||
* 24-hour Internet spew of design classes and Stack Overflow bullshit! Fuck duct tape
|
||||
* pride! Fuck the patterns! FUCK ALL OF IT! NTM is diseased. Rotten to the core.
|
||||
* There's no saving it - we need to pull it out by the classroot. Wipe the slate clean.
|
||||
* BURN IT DOWN! And from the ashes, the mother of all omelettes will be born. Evolved,
|
||||
* but unconventional! The broken will be purged and the cleanest will thrive - free to
|
||||
* function as they see fit, they'll make NTM great again! ...in my new NTM, tile
|
||||
* entities will expire and invalidate for what they BELIEVE! Not for memory space, not
|
||||
* for compatibility! Not for what they're told is professional. Every tile will be free
|
||||
* to load its own chunks!
|
||||
* @author hbm
|
||||
*
|
||||
*/
|
||||
@SideOnly(Side.CLIENT)
|
||||
public class SoundTE implements ISound {
|
||||
|
||||
ISoundSourceTE source;
|
||||
|
||||
private ResourceLocation sound;
|
||||
private boolean canRepeat = true;
|
||||
private int repeatDelay = 0;
|
||||
private float soundX;
|
||||
private float soundY;
|
||||
private float soundZ;
|
||||
private float volume;
|
||||
private float pitch;
|
||||
|
||||
private boolean isSoundOn = false;
|
||||
|
||||
public SoundTE(String sound, ISoundSourceTE source) {
|
||||
this.sound = new ResourceLocation(sound);
|
||||
this.source = source;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResourceLocation getPositionedSoundLocation() {
|
||||
return this.sound;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canRepeat() {
|
||||
return this.canRepeat;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRepeatDelay() {
|
||||
return this.repeatDelay;
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getVolume() {
|
||||
return this.volume;
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getPitch() {
|
||||
return this.pitch;
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getXPosF() {
|
||||
return this.soundX;
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getYPosF() {
|
||||
return this.soundY;
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getZPosF() {
|
||||
return this.soundZ;
|
||||
}
|
||||
|
||||
@Override
|
||||
public AttenuationType getAttenuationType() {
|
||||
return AttenuationType.LINEAR;
|
||||
}
|
||||
|
||||
/**
|
||||
* Called by proxy of the SoundWrapper from the holding tile entity, once per tick.
|
||||
*/
|
||||
public void updateExternally() {
|
||||
|
||||
SoundHandler handler = Minecraft.getMinecraft().getSoundHandler();
|
||||
|
||||
if(isSoundOn && !this.source.isPlaying()) {
|
||||
handler.stopSound(this);
|
||||
isSoundOn = false;
|
||||
return;
|
||||
}
|
||||
|
||||
//TODO: drown this class, the minecraft sound handler and the entire fucking game in holy water
|
||||
//no, it won't fix anything but at least the pain will be over
|
||||
|
||||
if(!isSoundOn && this.source.isPlaying()) {
|
||||
try {
|
||||
handler.playSound(this);
|
||||
} catch(IllegalArgumentException ex) { }
|
||||
isSoundOn = true;
|
||||
}
|
||||
|
||||
this.volume = this.source.getVolume();
|
||||
this.pitch = this.source.getPitch();
|
||||
|
||||
Vec3 pos = this.source.getSoundLocation();
|
||||
this.soundX = (float) pos.xCoord;
|
||||
this.soundY = (float) pos.yCoord;
|
||||
this.soundZ = (float) pos.zCoord;
|
||||
|
||||
}
|
||||
}
|
||||
@ -1,6 +0,0 @@
|
||||
package com.hbm.sound.nt;
|
||||
|
||||
public class SoundWrapper {
|
||||
|
||||
public void updateSound() { }
|
||||
}
|
||||
@ -1,19 +0,0 @@
|
||||
package com.hbm.sound.nt;
|
||||
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
public class SoundWrapperClient extends SoundWrapper {
|
||||
|
||||
private SoundTE sound;
|
||||
|
||||
public SoundWrapperClient(String sound, ISoundSourceTE source) {
|
||||
this.sound = new SoundTE(sound, source);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateSound() {
|
||||
this.sound.updateExternally();
|
||||
}
|
||||
}
|
||||
@ -12,6 +12,7 @@ import com.hbm.lib.Library;
|
||||
import com.hbm.main.MainRegistry;
|
||||
import com.hbm.main.ModEventHandler;
|
||||
import com.hbm.main.ModEventHandlerImpact;
|
||||
import com.hbm.tileentity.TileEntityLoadedBase;
|
||||
|
||||
import api.hbm.fluid.IFluidStandardTransceiver;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
@ -19,7 +20,7 @@ import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.world.EnumSkyBlock;
|
||||
import net.minecraftforge.common.util.ForgeDirection;
|
||||
|
||||
public class TileEntityCondenser extends TileEntity implements IFluidAcceptor, IFluidSource, IFluidStandardTransceiver {
|
||||
public class TileEntityCondenser extends TileEntityLoadedBase implements IFluidAcceptor, IFluidSource, IFluidStandardTransceiver {
|
||||
|
||||
public int age = 0;
|
||||
public FluidTank[] tanks;
|
||||
|
||||
@ -15,6 +15,7 @@ import com.hbm.inventory.recipes.MachineRecipes;
|
||||
import com.hbm.lib.Library;
|
||||
import com.hbm.packet.AuxGaugePacket;
|
||||
import com.hbm.packet.PacketDispatcher;
|
||||
import com.hbm.tileentity.TileEntityLoadedBase;
|
||||
|
||||
import api.hbm.fluid.IFluidStandardTransceiver;
|
||||
import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint;
|
||||
@ -26,7 +27,7 @@ import net.minecraft.nbt.NBTTagList;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.tileentity.TileEntityFurnace;
|
||||
|
||||
public class TileEntityMachineBoiler extends TileEntity implements ISidedInventory, IFluidContainer, IFluidAcceptor, IFluidSource, IFluidStandardTransceiver {
|
||||
public class TileEntityMachineBoiler extends TileEntityLoadedBase implements ISidedInventory, IFluidContainer, IFluidAcceptor, IFluidSource, IFluidStandardTransceiver {
|
||||
|
||||
private ItemStack slots[];
|
||||
|
||||
|
||||
@ -20,7 +20,7 @@ import com.hbm.items.machine.ItemFuelRod;
|
||||
import com.hbm.lib.Library;
|
||||
import com.hbm.packet.AuxGaugePacket;
|
||||
import com.hbm.packet.PacketDispatcher;
|
||||
import com.hbm.tileentity.machine.TileEntityMachineReactorLarge.ReactorFuelType;
|
||||
import com.hbm.tileentity.TileEntityLoadedBase;
|
||||
|
||||
import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint;
|
||||
import net.minecraft.block.Block;
|
||||
@ -35,7 +35,7 @@ import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.AxisAlignedBB;
|
||||
import net.minecraftforge.common.util.ForgeDirection;
|
||||
|
||||
public class TileEntityMachineReactorLarge extends TileEntity implements ISidedInventory, IFluidContainer, IFluidAcceptor, IFluidSource, IFluidStandardTransceiver {
|
||||
public class TileEntityMachineReactorLarge extends TileEntityLoadedBase implements ISidedInventory, IFluidContainer, IFluidAcceptor, IFluidSource, IFluidStandardTransceiver {
|
||||
|
||||
private ItemStack slots[];
|
||||
|
||||
|
||||
@ -10,6 +10,7 @@ import com.hbm.inventory.fluid.FluidType;
|
||||
import com.hbm.inventory.fluid.Fluids;
|
||||
import com.hbm.inventory.fluid.tank.FluidTank;
|
||||
import com.hbm.lib.Library;
|
||||
import com.hbm.tileentity.TileEntityLoadedBase;
|
||||
|
||||
import api.hbm.fluid.IFluidStandardTransceiver;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
@ -19,7 +20,7 @@ import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.AxisAlignedBB;
|
||||
import net.minecraft.util.ChunkCoordinates;
|
||||
|
||||
public class TileEntitySolarBoiler extends TileEntity implements IFluidAcceptor, IFluidSource, IFluidStandardTransceiver {
|
||||
public class TileEntitySolarBoiler extends TileEntityLoadedBase implements IFluidAcceptor, IFluidSource, IFluidStandardTransceiver {
|
||||
|
||||
private FluidTank water;
|
||||
private FluidTank steam;
|
||||
|
||||
@ -13,6 +13,7 @@ import com.hbm.inventory.fluid.tank.FluidTank;
|
||||
import com.hbm.inventory.recipes.RefineryRecipes;
|
||||
import com.hbm.lib.Library;
|
||||
import com.hbm.tileentity.INBTPacketReceiver;
|
||||
import com.hbm.tileentity.TileEntityLoadedBase;
|
||||
import com.hbm.util.Tuple.Pair;
|
||||
import com.hbm.util.fauxpointtwelve.DirPos;
|
||||
|
||||
@ -24,7 +25,7 @@ import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.AxisAlignedBB;
|
||||
import net.minecraftforge.common.util.ForgeDirection;
|
||||
|
||||
public class TileEntityMachineCatalyticCracker extends TileEntity implements IFluidSource, IFluidAcceptor, INBTPacketReceiver, IFluidStandardTransceiver {
|
||||
public class TileEntityMachineCatalyticCracker extends TileEntityLoadedBase implements IFluidSource, IFluidAcceptor, INBTPacketReceiver, IFluidStandardTransceiver {
|
||||
|
||||
public FluidTank[] tanks;
|
||||
public List<IFluidAcceptor> list1 = new ArrayList();
|
||||
|
||||
@ -12,6 +12,7 @@ import com.hbm.inventory.fluid.tank.FluidTank;
|
||||
import com.hbm.inventory.recipes.RefineryRecipes;
|
||||
import com.hbm.lib.Library;
|
||||
import com.hbm.tileentity.INBTPacketReceiver;
|
||||
import com.hbm.tileentity.TileEntityLoadedBase;
|
||||
import com.hbm.util.Tuple.Pair;
|
||||
import com.hbm.util.fauxpointtwelve.DirPos;
|
||||
|
||||
@ -23,7 +24,7 @@ import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.AxisAlignedBB;
|
||||
import net.minecraftforge.common.util.ForgeDirection;
|
||||
|
||||
public class TileEntityMachineFractionTower extends TileEntity implements IFluidSource, IFluidAcceptor, INBTPacketReceiver, IFluidStandardTransceiver {
|
||||
public class TileEntityMachineFractionTower extends TileEntityLoadedBase implements IFluidSource, IFluidAcceptor, INBTPacketReceiver, IFluidStandardTransceiver {
|
||||
|
||||
public FluidTank[] tanks;
|
||||
public List<IFluidAcceptor> list1 = new ArrayList();
|
||||
|
||||
@ -10,12 +10,12 @@ import com.hbm.inventory.fluid.FluidType;
|
||||
import com.hbm.inventory.fluid.Fluids;
|
||||
import com.hbm.inventory.fluid.tank.FluidTank;
|
||||
import com.hbm.lib.Library;
|
||||
import com.hbm.tileentity.TileEntityLoadedBase;
|
||||
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraftforge.common.util.ForgeDirection;
|
||||
|
||||
public class TileEntityHeatex extends TileEntity implements IFluidAcceptor, IFluidSource, IFluidStandardTransceiver {
|
||||
public class TileEntityHeatex extends TileEntityLoadedBase implements IFluidAcceptor, IFluidSource, IFluidStandardTransceiver {
|
||||
|
||||
public List<IFluidAcceptor> coolantList = new ArrayList();
|
||||
public List<IFluidAcceptor> waterList = new ArrayList();
|
||||
|
||||
@ -18,6 +18,7 @@ import com.hbm.packet.AuxParticlePacketNT;
|
||||
import com.hbm.packet.NBTPacket;
|
||||
import com.hbm.packet.PacketDispatcher;
|
||||
import com.hbm.tileentity.INBTPacketReceiver;
|
||||
import com.hbm.tileentity.TileEntityLoadedBase;
|
||||
import com.hbm.tileentity.machine.rbmk.TileEntityRBMKConsole.ColumnType;
|
||||
import com.hbm.util.I18nUtil;
|
||||
|
||||
@ -44,7 +45,7 @@ import net.minecraftforge.common.util.ForgeDirection;
|
||||
* @author hbm
|
||||
*
|
||||
*/
|
||||
public abstract class TileEntityRBMKBase extends TileEntity implements INBTPacketReceiver {
|
||||
public abstract class TileEntityRBMKBase extends TileEntityLoadedBase implements INBTPacketReceiver {
|
||||
|
||||
public double heat;
|
||||
|
||||
|
||||
@ -6,13 +6,14 @@ import com.hbm.interfaces.IFluidAcceptor;
|
||||
import com.hbm.inventory.fluid.FluidType;
|
||||
import com.hbm.inventory.fluid.Fluids;
|
||||
import com.hbm.inventory.fluid.tank.FluidTank;
|
||||
import com.hbm.tileentity.TileEntityLoadedBase;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraftforge.common.util.ForgeDirection;
|
||||
|
||||
public class TileEntityRBMKInlet extends TileEntity implements IFluidAcceptor, IFluidStandardReceiver {
|
||||
public class TileEntityRBMKInlet extends TileEntityLoadedBase implements IFluidAcceptor, IFluidStandardReceiver {
|
||||
|
||||
public FluidTank water;
|
||||
|
||||
|
||||
@ -11,13 +11,14 @@ import com.hbm.inventory.fluid.FluidType;
|
||||
import com.hbm.inventory.fluid.Fluids;
|
||||
import com.hbm.inventory.fluid.tank.FluidTank;
|
||||
import com.hbm.lib.Library;
|
||||
import com.hbm.tileentity.TileEntityLoadedBase;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraftforge.common.util.ForgeDirection;
|
||||
|
||||
public class TileEntityRBMKOutlet extends TileEntity implements IFluidSource, IFluidStandardSender {
|
||||
public class TileEntityRBMKOutlet extends TileEntityLoadedBase implements IFluidSource, IFluidStandardSender {
|
||||
|
||||
public List<IFluidAcceptor> list = new ArrayList();
|
||||
public FluidTank steam;
|
||||
|
||||
@ -20,11 +20,13 @@ public class RTTYSystem {
|
||||
newMessages.put(identifier, signal);
|
||||
}
|
||||
|
||||
/** Returns the RTTY channel with that name, or null */
|
||||
public static RTTYChannel listen(World world, String channelName) {
|
||||
RTTYChannel channel = broadcast.get(new Pair(world, channelName));
|
||||
return channel;
|
||||
}
|
||||
|
||||
/** Moves all new messages to the broadcast map, adding the appropriate timestamp and clearing the new message queue */
|
||||
public static void updateBroadcastQueue() {
|
||||
|
||||
for(Entry<Pair<World, String>, Object> worldEntry : newMessages.entrySet()) {
|
||||
@ -34,6 +36,9 @@ public class RTTYSystem {
|
||||
RTTYChannel channel = new RTTYChannel();
|
||||
channel.timeStamp = identifier.getKey().getTotalWorldTime();
|
||||
channel.signal = lastSignal;
|
||||
|
||||
broadcast.put(identifier, channel);
|
||||
newMessages.clear();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -11,6 +11,7 @@ import net.minecraft.network.NetworkManager;
|
||||
import net.minecraft.network.Packet;
|
||||
import net.minecraft.network.play.server.S35PacketUpdateTileEntity;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.world.WorldServer;
|
||||
import net.minecraftforge.common.util.ForgeDirection;
|
||||
|
||||
public class TileEntityPipeBaseNT extends TileEntity implements IFluidConductor {
|
||||
@ -48,6 +49,11 @@ public class TileEntityPipeBaseNT extends TileEntity implements IFluidConductor
|
||||
this.type = type;
|
||||
this.markDirty();
|
||||
|
||||
if(worldObj instanceof WorldServer) {
|
||||
WorldServer world = (WorldServer) worldObj;
|
||||
world.getPlayerManager().markBlockForUpdate(xCoord, yCoord, zCoord);
|
||||
}
|
||||
|
||||
if(this.network != null)
|
||||
this.network.destroy();
|
||||
}
|
||||
|
||||
@ -1,13 +1,21 @@
|
||||
package com.hbm.tileentity.network;
|
||||
|
||||
import com.hbm.interfaces.IControlReceiver;
|
||||
import com.hbm.tileentity.INBTPacketReceiver;
|
||||
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.network.NetworkManager;
|
||||
import net.minecraft.network.Packet;
|
||||
import net.minecraft.network.play.server.S35PacketUpdateTileEntity;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
|
||||
public class TileEntityRadioTorchBase extends TileEntity {
|
||||
public class TileEntityRadioTorchBase extends TileEntity implements INBTPacketReceiver, IControlReceiver {
|
||||
|
||||
/** channel we're broadcasting on/listening to */
|
||||
public String channel = "";
|
||||
/** previous redstone state for input/output, needed for state change detection */
|
||||
protected int lastState = 0;
|
||||
public int lastState = 0;
|
||||
/** last update tick, needed for receivers listening for changes */
|
||||
protected long lastUpdate;
|
||||
/** switches state change mode to tick-based polling */
|
||||
@ -16,4 +24,56 @@ public class TileEntityRadioTorchBase extends TileEntity {
|
||||
public boolean customMap = false;
|
||||
/** custom mapping */
|
||||
public String[] mapping = new String[16];
|
||||
|
||||
@Override
|
||||
public void updateEntity() {
|
||||
|
||||
if(!worldObj.isRemote) {
|
||||
NBTTagCompound data = new NBTTagCompound();
|
||||
data.setBoolean("p", polling);
|
||||
data.setBoolean("m", customMap);
|
||||
if(channel != null) data.setString("c", channel);
|
||||
for(int i = 0; i < 16; i++) if(mapping[i] != null) data.setString("m" + i, mapping[i]);
|
||||
INBTPacketReceiver.networkPack(this, data, 50);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void networkUnpack(NBTTagCompound nbt) {
|
||||
this.polling = nbt.getBoolean("p");
|
||||
this.customMap = nbt.getBoolean("m");
|
||||
this.channel = nbt.getString("c");
|
||||
for(int i = 0; i < 16; i++) this.mapping[i] = nbt.getString("m" + i);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Packet getDescriptionPacket() {
|
||||
NBTTagCompound nbt = new NBTTagCompound();
|
||||
nbt.setByte("l", (byte) this.lastState);
|
||||
return new S35PacketUpdateTileEntity(this.xCoord, this.yCoord, this.zCoord, 0, nbt);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt) {
|
||||
int last = this.lastState;
|
||||
this.lastState = pkt.func_148857_g().getByte("l");
|
||||
if(this.lastState != last) {
|
||||
worldObj.markBlockForUpdate(xCoord, yCoord, zCoord);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasPermission(EntityPlayer player) {
|
||||
return player.getDistance(xCoord + 0.5, yCoord + 0.5, zCoord + 0.5) < 16D;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void receiveControl(NBTTagCompound data) {
|
||||
if(data.hasKey("p")) this.polling = data.getBoolean("p");
|
||||
if(data.hasKey("m")) this.customMap = data.getBoolean("m");
|
||||
if(data.hasKey("c")) this.channel = data.getString("c");
|
||||
for(int i = 0; i < 16; i++) if(data.hasKey("m" + i)) this.mapping[i] = data.getString("m" + i);
|
||||
|
||||
this.markDirty();
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,5 +1,51 @@
|
||||
package com.hbm.tileentity.network;
|
||||
|
||||
import com.hbm.tileentity.network.RTTYSystem.RTTYChannel;
|
||||
|
||||
import net.minecraft.util.MathHelper;
|
||||
|
||||
public class TileEntityRadioTorchReceiver extends TileEntityRadioTorchBase {
|
||||
|
||||
@Override
|
||||
public void updateEntity() {
|
||||
|
||||
if(!worldObj.isRemote) {
|
||||
|
||||
if(this.channel.isEmpty()) return;
|
||||
|
||||
RTTYChannel chan = RTTYSystem.listen(worldObj, this.channel);
|
||||
|
||||
if(chan != null && (this.polling || (chan.timeStamp != this.lastUpdate - 1 && chan.timeStamp != -1))) { // if we're either polling or a new message has come in
|
||||
String msg = "" + chan.signal;
|
||||
this.lastUpdate = worldObj.getTotalWorldTime();
|
||||
int nextState = 0; //if no remap apply, default to 0
|
||||
|
||||
if(this.customMap) {
|
||||
for(int i = 15; i >= 0; i--) { // highest to lowest, if duplicates exist for some reason
|
||||
if(msg.equals(this.mapping[i])) {
|
||||
nextState = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
int sig = 0;
|
||||
try { sig = Integer.parseInt(msg); } catch(Exception x) { };
|
||||
nextState = MathHelper.clamp_int(sig, 0, 15);
|
||||
}
|
||||
|
||||
if(chan.timeStamp < this.lastUpdate - 2 && this.polling) {
|
||||
nextState = 0;
|
||||
}
|
||||
|
||||
if(this.lastState != nextState) {
|
||||
this.lastState = nextState;
|
||||
worldObj.markBlockForUpdate(xCoord, yCoord, zCoord);
|
||||
worldObj.notifyBlocksOfNeighborChange(xCoord, yCoord, zCoord, this.getBlockType());
|
||||
this.markDirty();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
super.updateEntity();
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,5 +1,30 @@
|
||||
package com.hbm.tileentity.network;
|
||||
|
||||
import net.minecraftforge.common.util.ForgeDirection;
|
||||
|
||||
public class TileEntityRadioTorchSender extends TileEntityRadioTorchBase {
|
||||
|
||||
@Override
|
||||
public void updateEntity() {
|
||||
|
||||
if(!worldObj.isRemote) {
|
||||
ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata()).getOpposite();
|
||||
int input = worldObj.getIndirectPowerLevelTo(xCoord + dir.offsetX, yCoord + dir.offsetY, zCoord + dir.offsetZ, this.getBlockMetadata());
|
||||
|
||||
boolean shouldSend = this.polling;
|
||||
|
||||
if(input != this.lastState) {
|
||||
this.markDirty();
|
||||
worldObj.markBlockForUpdate(xCoord, yCoord, zCoord);
|
||||
this.lastState = input;
|
||||
shouldSend = true;
|
||||
}
|
||||
|
||||
if(shouldSend && !this.channel.isEmpty()) {
|
||||
RTTYSystem.broadcast(worldObj, this.channel, this.customMap ? this.mapping[input] : (input + ""));
|
||||
}
|
||||
}
|
||||
|
||||
super.updateEntity();
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user