Jump to content
View in the app

A better way to browse. Learn more.

Forge Forums

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

hydroflame

Members
  • Joined

  • Last visited

Everything posted by hydroflame

  1. yeah make sens mc.displayGuiScreen(new GuiLavaCollector(player,world,tile)); this is wrong, you need a IGuiHandler and call this instead @Override public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int a, float b, float c, float d) { TileEntity te = world.getBlockTileEntity(x, y, z); if(te != null){ TileEntityPlot tep = (TileEntityPlot)te; if(tep.isBought()){ return false; } if(player.username.equals(tep.owner)){ player.openGui(TheMod.instance, PlotSellerGui.GUI_ID, world, x, y, z); }else{ player.openGui(TheMod.instance, PlotBuyerGui.GUI_ID, world, x, y, z); } } return true; } example from one of my block ^^
  2. hen .. well you implemented your class im a odd way, no render class should be called from server side, can we see that ?
  3. never use @Sideonly period is there a bug if you DONT use it ?
  4. using the step i enumerated or i am completelly ignorant and theres already something in forge to do it ?
  5. String username = // the username you need to update int newMode = //the new hide mode ex 0 for hidden 1 for visible MainMod.proxy.hideMap.put(username, newMode)
  6. what about the renderer ?
  7. sendChatToPlayer(ChatMessageComponent.func_111066_d("HELOOOOOOOO!!!!!!!!!!!!"));
  8. the list can be in your server packet handler i guess
  9. So where would I make the list which one are we talking about? where should I make the packet that gets sent to all the players? some place that you have access to the server list of hide state
  10. oooooooooooooooooooooooooooooohhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh TIL!
  11. yes ok but all chest are going to have the same name right ?
  12. toString might simple the method from java.lang.Object afaik chest dont have names, why do you need something like this
  13. ok this is some code i was working on, its not really the aether but it kinda looks like it import java.util.List; import java.util.Random; import net.minecraft.block.Block; import net.minecraft.block.BlockSand; import net.minecraft.entity.EnumCreatureType; import net.minecraft.util.IProgressUpdate; import net.minecraft.util.MathHelper; import net.minecraft.world.ChunkPosition; import net.minecraft.world.World; import net.minecraft.world.biome.BiomeGenBase; import net.minecraft.world.chunk.Chunk; import net.minecraft.world.chunk.IChunkProvider; import net.minecraft.world.gen.NoiseGeneratorOctaves; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.Event.Result; import net.minecraftforge.event.terraingen.ChunkProviderEvent; import net.minecraftforge.event.terraingen.PopulateChunkEvent; import net.minecraftforge.event.terraingen.TerrainGen; public class ChunkProviderAether implements IChunkProvider{ private Random endRNG; private NoiseGeneratorOctaves noiseGen1; private NoiseGeneratorOctaves noiseGen2; private NoiseGeneratorOctaves noiseGen3; public NoiseGeneratorOctaves noiseGen4; public NoiseGeneratorOctaves noiseGen5; private World endWorld; private double[] densities; /** The biomes that are used to generate the chunk */ private BiomeGenBase[] biomesForGeneration; double[] noiseData1; double[] noiseData2; double[] noiseData3; double[] noiseData4; double[] noiseData5; int[][] field_73203_h = new int[32][32]; public ChunkProviderAether(World par1World, long par2) { this.endWorld = par1World; this.endRNG = new Random(par2); this.noiseGen1 = new NoiseGeneratorOctaves(this.endRNG, 16); this.noiseGen2 = new NoiseGeneratorOctaves(this.endRNG, 16); this.noiseGen3 = new NoiseGeneratorOctaves(this.endRNG, ; this.noiseGen4 = new NoiseGeneratorOctaves(this.endRNG, 10); this.noiseGen5 = new NoiseGeneratorOctaves(this.endRNG, 16); NoiseGeneratorOctaves[] noiseGens = {noiseGen1, noiseGen2, noiseGen3, noiseGen4, noiseGen5}; noiseGens = TerrainGen.getModdedNoiseGenerators(par1World, this.endRNG, noiseGens); this.noiseGen1 = noiseGens[0]; this.noiseGen2 = noiseGens[1]; this.noiseGen3 = noiseGens[2]; this.noiseGen4 = noiseGens[3]; this.noiseGen5 = noiseGens[4]; } public void generateTerrain(int par1, int par2, byte[] par3ArrayOfByte, BiomeGenBase[] par4ArrayOfBiomeGenBase) { byte b0 = 2; int k = b0 + 1; byte b1 = 33; int l = b0 + 1; this.densities = this.initializeNoiseField(this.densities, par1 * b0, 0, par2 * b0, k, b1, l); for (int i1 = 0; i1 < b0; ++i1) { for (int j1 = 0; j1 < b0; ++j1) { for (int k1 = 0; k1 < 32; ++k1) { double d0 = 0.05D; double d1 = this.densities[((i1 + 0) * l + j1 + 0) * b1 + k1 + 0]; double d2 = this.densities[((i1 + 0) * l + j1 + 1) * b1 + k1 + 0]; double d3 = this.densities[((i1 + 1) * l + j1 + 0) * b1 + k1 + 0]; double d4 = this.densities[((i1 + 1) * l + j1 + 1) * b1 + k1 + 0]; double d5 = (this.densities[((i1 + 0) * l + j1 + 0) * b1 + k1 + 1] - d1) * d0; double d6 = (this.densities[((i1 + 0) * l + j1 + 1) * b1 + k1 + 1] - d2) * d0; double d7 = (this.densities[((i1 + 1) * l + j1 + 0) * b1 + k1 + 1] - d3) * d0; double d8 = (this.densities[((i1 + 1) * l + j1 + 1) * b1 + k1 + 1] - d4) * d0; for (int l1 = 0; l1 < 4; ++l1) { double d9 = 0.125D; double d10 = d1; double d11 = d2; double d12 = (d3 - d1) * d9; double d13 = (d4 - d2) * d9; for (int i2 = 0; i2 < 8; ++i2) { int j2 = i2 + i1 * 8 << 11 | 0 + j1 * 8 << 7 | k1 * 4 + l1; short short1 = 128; double d14 = 0.125D; double d15 = d10; double d16 = (d11 - d10) * d14; for (int k2 = 0; k2 < 8; ++k2) { int l2 = 0; if (d15 > 0.0D) { l2 = Block.stone.blockID; } par3ArrayOfByte[j2] = (byte)l2; j2 += short1; d15 += d16; } d10 += d12; d11 += d13; } d1 += d5; d2 += d6; d3 += d7; d4 += d8; } } } } } public void replaceBlocksForBiome(int par1, int par2, byte[] par3ArrayOfByte, BiomeGenBase[] par4ArrayOfBiomeGenBase) { ChunkProviderEvent.ReplaceBiomeBlocks event = new ChunkProviderEvent.ReplaceBiomeBlocks(this, par1, par2, par3ArrayOfByte, par4ArrayOfBiomeGenBase); MinecraftForge.EVENT_BUS.post(event); if (event.getResult() == Result.DENY) return; for (int k = 0; k < 16; ++k) { for (int l = 0; l < 16; ++l) { byte b0 = 1; int i1 = -1; byte b1 = (byte)Block.stone.blockID; byte b2 = (byte)Block.stone.blockID; for (int j1 = 127; j1 >= 0; --j1) { int k1 = (l * 16 + k) * 128 + j1; byte b3 = par3ArrayOfByte[k1]; if (b3 == 0) { i1 = -1; } else if (b3 == Block.stone.blockID) { if (i1 == -1) { if (b0 <= 0) { b1 = 0; b2 = (byte)Block.stone.blockID; } i1 = b0; if (j1 >= 0) { par3ArrayOfByte[k1] = b1; } else { par3ArrayOfByte[k1] = b2; } } else if (i1 > 0) { --i1; par3ArrayOfByte[k1] = b2; } } } } } } /** * loads or generates the chunk at the chunk location specified */ public Chunk loadChunk(int par1, int par2) { return this.provideChunk(par1, par2); } /** * Will return back a chunk, if it doesn't exist and its not a MP client it will generates all the blocks for the * specified chunk from the map seed and chunk seed */ public Chunk provideChunk(int par1, int par2) { this.endRNG.setSeed((long)par1 * 341873128712L + (long)par2 * 132897987541L); byte[] abyte = new byte[32768]; this.biomesForGeneration = this.endWorld.getWorldChunkManager().loadBlockGeneratorData(this.biomesForGeneration, par1 * 16, par2 * 16, 16, 16); this.generateTerrain(par1, par2, abyte, this.biomesForGeneration); this.replaceBlocksForBiome(par1, par2, abyte, this.biomesForGeneration); Chunk chunk = new Chunk(this.endWorld, abyte, par1, par2); byte[] abyte1 = chunk.getBiomeArray(); for (int k = 0; k < abyte1.length; ++k) { abyte1[k] = (byte)this.biomesForGeneration[k].biomeID; } chunk.generateSkylightMap(); return chunk; } /** * generates a subset of the level's terrain data. Takes 7 arguments: the [empty] noise array, the position, and the * size. */ private double[] initializeNoiseField(double[] par1ArrayOfDouble, int par2, int par3, int par4, int par5, int par6, int par7) { ChunkProviderEvent.InitNoiseField event = new ChunkProviderEvent.InitNoiseField(this, par1ArrayOfDouble, par2, par3, par4, par5, par6, par7); MinecraftForge.EVENT_BUS.post(event); if (event.getResult() == Result.DENY) return event.noisefield; if (par1ArrayOfDouble == null) { par1ArrayOfDouble = new double[par5 * par6 * par7]; } double d0 = 684.412D; double d1 = 684.412D; this.noiseData4 = this.noiseGen4.generateNoiseOctaves(this.noiseData4, par2, par4, par5, par7, 1.121D, 1.121D, 0.5D); this.noiseData5 = this.noiseGen5.generateNoiseOctaves(this.noiseData5, par2, par4, par5, par7, 200.0D, 200.0D, 0.5D); d0 *= 2.0D; this.noiseData1 = this.noiseGen3.generateNoiseOctaves(this.noiseData1, par2, par3, par4, par5, par6, par7, d0 / 80.0D, d1 / 160.0D, d0 / 80.0D); this.noiseData2 = this.noiseGen1.generateNoiseOctaves(this.noiseData2, par2, par3, par4, par5, par6, par7, d0, d1, d0); this.noiseData3 = this.noiseGen2.generateNoiseOctaves(this.noiseData3, par2, par3, par4, par5, par6, par7, d0, d1, d0); int k1 = 0; int l1 = 0; for (int i2 = 0; i2 < par5; ++i2) { for (int j2 = 0; j2 < par7; ++j2) { double d2 = (this.noiseData4[l1] + 256.0D) / 512.0D; if (d2 > 1.0D) { d2 = 1.0D; } double d3 = this.noiseData5[l1] / 8000.0D; if (d3 < 0.0D) { d3 = -d3 * 0.3D; } d3 = d3 * 3.0D - 2.0D; float f = (float)(i2 + par2 - 0) / 1.0F; float f1 = (float)(j2 + par4 - 0) / 1.0F; float f2 = 100.0F - MathHelper.sqrt_float(f * f + f1 * f1) * 8.0F; if (f2 > 80.0F) { f2 = 80.0F; } if (f2 < -100.0F) { f2 = -100.0F; } if (d3 > 1.0D) { d3 = 1.0D; } d3 /= 8.0D; d3 = 0.0D; if (d2 < 0.0D) { d2 = 0.0D; } d2 += 0.5D; d3 = d3 * (double)par6 / 16.0D; ++l1; double d4 = (double)par6 / 2.0D; for (int k2 = 0; k2 < par6; ++k2) { double d5 = 0.0D; double d6 = ((double)k2 - d4) * 8.0D / d2; if (d6 < 0.0D) { d6 *= -1.0D; } double d7 = this.noiseData2[k1] / 512.0D; double d8 = this.noiseData3[k1] / 512.0D; double d9 = (this.noiseData1[k1] / 10.0D + 1.0D) / 2.0D; if (d9 < 0.0D) { d5 = d7; } else if (d9 > 1.0D) { d5 = d8; } else { d5 = d7 + (d8 - d7) * d9; } d5 -= 8.0D; d5 += (double)f2; byte b0 = 2; double d10; if (k2 > par6 / 2 - b0) { d10 = (double)((float)(k2 - (par6 / 2 - b0)) / 64.0F); if (d10 < 0.0D) { d10 = 0.0D; } if (d10 > 1.0D) { d10 = 1.0D; } d5 = d5 * (1.0D - d10) + -3000.0D * d10; } b0 = 8; if (k2 < b0) { d10 = (double)((float)(b0 - k2) / ((float)b0 - 1.0F)); d5 = d5 * (1.0D - d10) + -30.0D * d10; } par1ArrayOfDouble[k1] = d5; ++k1; } } } return par1ArrayOfDouble; } /** * Checks to see if a chunk exists at x, y */ public boolean chunkExists(int par1, int par2) { return true; } /** * Populates chunk with ores etc etc */ public void populate(IChunkProvider par1IChunkProvider, int par2, int par3) { BlockSand.fallInstantly = true; MinecraftForge.EVENT_BUS.post(new PopulateChunkEvent.Pre(par1IChunkProvider, endWorld, endWorld.rand, par2, par3, false)); int k = par2 * 16; int l = par3 * 16; BiomeGenBase biomegenbase = this.endWorld.getBiomeGenForCoords(k + 16, l + 16); biomegenbase.decorate(this.endWorld, this.endWorld.rand, k, l); MinecraftForge.EVENT_BUS.post(new PopulateChunkEvent.Post(par1IChunkProvider, endWorld, endWorld.rand, par2, par3, false)); BlockSand.fallInstantly = false; } /** * Two modes of operation: if passed true, save all Chunks in one go. If passed false, save up to two chunks. * Return true if all chunks have been saved. */ public boolean saveChunks(boolean par1, IProgressUpdate par2IProgressUpdate) { return true; } public void func_104112_b() {} /** * Unloads chunks that are marked to be unloaded. This is not guaranteed to unload every such chunk. */ public boolean unloadQueuedChunks() { return false; } /** * Returns if the IChunkProvider supports saving. */ public boolean canSave() { return true; } /** * Converts the instance data to a readable string. */ public String makeString() { return "RandomLevelSource"; } /** * Returns a list of creatures of the specified type that can spawn at the given location. */ public List getPossibleCreatures(EnumCreatureType par1EnumCreatureType, int par2, int par3, int par4) { return null; } /** * Returns the location of the closest structure of the specified type. If not found returns null. */ public ChunkPosition findClosestStructure(World par1World, String par2Str, int par3, int par4, int par5) { return null; } public int getLoadedChunkCount() { return 0; } public void recreateStructures(int par1, int par2) {} } import net.minecraft.block.Block; import net.minecraft.util.ChunkCoordinates; import net.minecraft.util.MathHelper; import net.minecraft.util.Vec3; import net.minecraft.world.WorldProvider; import net.minecraft.world.biome.WorldChunkManagerHell; import net.minecraft.world.chunk.IChunkProvider; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; public class WorldProviderDimension extends WorldProvider { /** * creates a new world chunk manager for WorldProvider */ public void registerWorldChunkManager() { this.worldChunkMgr = new WorldChunkManagerHell(new BiomeGenAether(23), 0.5F, 0.0F); this.dimensionId = 1; this.hasNoSky = false; } /** * Returns a new chunk provider which generates chunks for this world */ public IChunkProvider createChunkGenerator() { return new ChunkProviderAether(this.worldObj, this.worldObj.getSeed()); } /** * Calculates the angle of sun and moon in the sky relative to a specified time (usually worldTime) */ public float calculateCelestialAngle(long par1, float par3) { return 0.0F; } @SideOnly(Side.CLIENT) /** * Returns array with sunrise/sunset colors */ public float[] calcSunriseSunsetColors(float par1, float par2) { return new float[]{1, 1, 1, 1}; } @SideOnly(Side.CLIENT) /** * Return Vec3D with biome specific fog color */ public Vec3 getFogColor(float par1, float par2) { int i = 10518688; float f2 = MathHelper.cos(par1 * (float)Math.PI * 2.0F) * 2.0F + 0.5F; if (f2 < 0.0F) { f2 = 0.0F; } if (f2 > 1.0F) { f2 = 1.0F; } float f3 = (float)(i >> 16 & 255) / 255.0F; float f4 = (float)(i >> 8 & 255) / 255.0F; float f5 = (float)(i & 255) / 255.0F; f3 *= f2 * 0.0F + 0.15F; f4 *= f2 * 0.0F + 0.15F; f5 *= f2 * 0.0F + 0.15F; return this.worldObj.getWorldVec3Pool().getVecFromPool((double)f3, (double)f4, (double)f5); } @SideOnly(Side.CLIENT) public boolean isSkyColored() { return true; } /** * True if the player can respawn in this dimension (true = overworld, false = nether). */ public boolean canRespawnHere() { return false; } /** * Returns 'true' if in the "main surface world", but 'false' if in the Nether or End dimensions. */ public boolean isSurfaceWorld() { return true; } @SideOnly(Side.CLIENT) /** * the y level at which clouds are rendered. */ public float getCloudHeight() { return 128.0F; } /** * Will check if the x, z position specified is alright to be set as the map spawn point */ public boolean canCoordinateBeSpawn(int par1, int par2) { int k = this.worldObj.getFirstUncoveredBlock(par1, par2); return k == 0 ? false : Block.blocksList[k].blockMaterial.blocksMovement(); } /** * Gets the hard-coded portal location to use when entering this dimension. */ public ChunkCoordinates getEntrancePortalLocation() { return new ChunkCoordinates(100, 50, 0); } public int getAverageGroundLevel() { return 50; } @SideOnly(Side.CLIENT) /** * Returns true if the given X,Z coordinate should show environmental fog. */ public boolean doesXZShowFog(int par1, int par2) { return false; } /** * Returns the dimension's name, e.g. "The End", "Nether", or "Overworld". */ public String getDimensionName() { return "Aether"; } } and register it like this DimensionManager.registerProviderType(dimensionID, WorldProviderDimension.class, false); i myself have copy pasted code so i dont knwo what it does/how it works
  14. the block shouldnt be holding the state your client proxy should be holding the hide state whenever the block is activated it send a packet to the server saying "i change my state to state : *insert state*" then the server will update HIS list of state and send the new player state to ALL player in the server
  15. @GotoLink, probably with a coremod :\
  16. im not quite sure what you did ... can you post code ?
  17. done, search for "Tessellator" on the wiki, you might also want to look at my TESR tutorial
  18. do you need to interract with it ? like click on buttons and stuff, cuz it wont work if you need to
  19. @airGamer well i was using entityID so far to sync between client/server but if its not the right way then my mod has possibly some HUGE bug right now :\
  20. if you can wait maybe 30 min ill make a tutorial for it (on forge wiki)
  21. so far no, im doing the same thing and heres the way to implement it: 1 make a coremod that will make the field RenderLivingEntity.mainModel public 2 make a event handler for the event "RenderPlayerEvent.Post" 3 rebuild the gl matrix transform tree inside this method and call to render your model where appropriate. also.. please stop using techne.... wavefront >>>> techne
  22. i meant more like ItemRender ItemRenderer ir = new ItemRenderer(player, new ItemStack(Block.lavaStill), 0); ir.renderItem()
  23. have you tried looking at how the lava in rendered in your inventory ?

Important Information

By using this site, you agree to our Terms of Use.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.