-
Posts
785 -
Joined
-
Last visited
Everything posted by ItsAMysteriousYT
-
How to use Reflection to change vanilla values
ItsAMysteriousYT replied to JimiIT92's topic in Modder Support
There is an easier way made by forge. Its called ObfuscationReflectionHelper. In there use the methods getPrivateValue/setPrivatevalue etc -
This is my packet - am i doing it the correct way? package itsamysterious.mods.reallifemod.core.packets; import java.nio.ByteBuffer; import io.netty.buffer.ByteBuf; import net.minecraftforge.fml.common.network.ByteBufUtils; import net.minecraftforge.fml.common.network.simpleimpl.IMessage; public class ElectricDataPackage implements IMessage{ float voltage; public ElectricDataPackage() { } public ElectricDataPackage(float voltage){ this.voltage=voltage; } @Override public void fromBytes(ByteBuf buf) { voltage = buf.readFloat(); } @Override public void toBytes(ByteBuf buf) { buf.writeFloat(voltage); } } Now i don't know what excactly to do in the packethandler. I tried passing the value through a static variable in my custom overlayclass, but it didn't work. Thats what i tried: package itsamysterious.mods.reallifemod.core.packets; import java.awt.Color; import itsamysterious.mods.reallifemod.core.gui.lifesystem.RLMOverlay; import net.minecraft.client.Minecraft; import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler; import net.minecraftforge.fml.common.network.simpleimpl.MessageContext; public class VoltagePackethandler implements IMessageHandler<ElectricDataPackage, ElectricDataPackage>{ @Override public ElectricDataPackage onMessage(ElectricDataPackage message, MessageContext ctx) { RLMOverlay.voltage=message.voltage; return message; } }
-
Also befor doing model.render((Entity)null...) do GL11.glDisable(GL11.GL_CULL_FACE).
-
The super secret setting will be gone again soon. They only exist in 1.7.10/1.8
-
Render Model from JSON anywhere in the World
ItsAMysteriousYT replied to PixelsNeverDie's topic in Modder Support
well youll never be able to render something independant of the world, cuz you have to set its world coordinates, but independant of blockpos - why? What you wanna do? -
Uhm...use use player.mountEntity(this)
-
I call it in the superclass like this: public void passOverVoltage(){ if(getTo()!=null){ getTo().onPowered(this.getVoltageValueAfterPowering()); System.out.println("Tried passing voltage to"+getTo().getClass().getSimpleName()+" Voltage is:"+getVoltage()); } } and this method is called within the update() method: if(getTo()!=null){ this.passOverVoltage(); this.voltage=0; if(storedPos!=null&&worldObj.getTileEntity(storedPos)==null||!(worldObj.getTileEntity(storedPos)instanceof TileEntity_Electric)){ to=null; storedPos=null; } }
-
@Override public void update(){ super.update(); if(worldObj.isRemote)return; if(this.getVoltage()>0){ isActive=true; }else isActive=false; if(isActive){ worldObj.getBlockState(getPos()).getBlock().setLightLevel(10.0f); }else { worldObj.getBlockState(getPos()).getBlock().setLightLevel(0); } } @Override public void onPowered(float f) { super.onPowered(f); this.isActive=true; worldObj.markBlockForUpdate(getPos()); } I tried marking for update in the update method and the game crashed
-
okayyyy...But what excactly am i sending in that packet then? Do i send the whole tileentity? If yes, how? Also this method still does not work public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) { super.onBlockPlacedBy(worldIn, pos, state, placer, stack); TileEntity tileentity = worldIn.getTileEntity(pos); if (tileentity instanceof TileEntity_Electric){ TileEntity_Electrictile = (TileEntity_Electric)tileentity; tile.rotation = MathHelper.floor_double((double)(placer.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; } }
-
Also - for example my lantern does not turn on immediatly when getting powered, but often i have to reopen the world so it is lit up. Thats how i set the lightlevel of the block: @Override public void update(){ super.update(); if(worldObj.isRemote)return; if(this.getVoltage()>0){ isActive=true; }else isActive=false; if(isActive){ worldObj.getBlockState(getPos()).getBlock().setLightLevel(100.0f); }else { worldObj.getBlockState(getPos()).getBlock().setLightLevel(0); } } @Override public void onPowered(float f) { super.onPowered(f); this.isActive=true; worldObj.getBlockState(getPos()).getBlock().setLightLevel(10.0f); worldObj.markBlockForUpdate(getPos()); }
-
Okay - now there is some other strange stuff. I can connect the blocks bugfree now, but for example i connect my Pinwheel to the transformer. In the pinwheel i set the energy to 440 every tick. My TileENtity_Electric automaticly passes over the enrgy to the connected block like this: public void passOverVoltage(){ if(getTo()!=null){ getTo().onPowered(this.getVoltageValueAfterPowering()); System.out.println("Tried passing voltage to"+getTo().getClass().getSimpleName()+" Voltage is:"+getVoltage()); } } BUT - when i hover over the transformer in minecraft, on the guioverlay the voltage still is 0.0, while in code with System.out.println it is 440. How can i fix that?