Posted February 14, 20169 yr I am creating a new dimension sorta like The End, except it will generate islands infinitely, now what I am wondering is what classes will I need for the dimension. The ones I can think of will be, A Biome Gen for a custom biome, A Biome Decorator, World Provider, World Chunk Manager, Chunk Provider, Teleporter, and a Portal block. Is there any other things that I will need to make this dimension? Also, in order to teleport to the dimension I would like to use a Gui and teleport when a button is pressed, I assume I would have to send a packet with the dimension id, and upon recieving the packet, teleport the player to the dimension.
February 16, 20169 yr Author This is my current code, now how would I go about actually teleporting the player? public class BlockAltar extends BlockContainer { public static final PropertyInteger ROTATION = PropertyInteger.create("rotation", 0, 15); public BlockAltar() { super(Material.wood); this.setBlockBounds(0.375F, 0.0F, 0.375F, 0.625F, 0.875F, 0.625F); this.setLightOpacity(0); this.setCreativeTab(EthiaCreativeTabs.tabEthiaBlocks); this.setDefaultState(this.blockState.getBaseState().withProperty(ROTATION, Integer.valueOf(0))); } public boolean isFullCube() { return false; } public boolean isOpaqueCube() { return false; } @SideOnly(Side.CLIENT) public void randomDisplayTick(World world, BlockPos pos, IBlockState state, Random rand) { EntityPlayer entityplayer = world.getClosestPlayer((double) pos.getX() + 0.5D, (double) pos.getY() + 0.5D, (double) pos.getZ() + 0.5D, 3.5D); if (entityplayer != null) { world.spawnParticle(EnumParticleTypes.ENCHANTMENT_TABLE, (double) ((float) pos.getX() + 0.5F), (double) ((float) pos.getY() + 2.0F), (double) ((float) pos.getZ() + 0.5F), (double) rand.nextFloat() - 0.5D, (double) rand.nextFloat() - 0.5D, (double) rand.nextFloat() - 0.5D, new int[0]); } } public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumFacing side, float hitX, float hitY, float hitZ) { if (world.isRemote) { return true; } else { TileEntity tileentity = world.getTileEntity(pos); if (tileentity instanceof TileEntityAltar) { Minecraft.getMinecraft().displayGuiScreen(new GuiAltar()); } return true; } } public TileEntity createNewTileEntity(World worldIn, int meta) { return new TileEntityAltar(); } public IBlockState onBlockPlaced(World world, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer) { int i = MathHelper.floor_double((double) ((placer.rotationYaw + 180.0F) * 16.0F / 360.0F) + 0.5D) & 15; return this.getDefaultState().withProperty(ROTATION, Integer.valueOf(i)); } public void onBlockPlacedBy(World world, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) { int i = MathHelper.floor_double((double)((placer.rotationYaw + 180.0F) * 16.0F / 360.0F) + 0.5D) & 15; world.setBlockState(pos, this.getDefaultState().withProperty(ROTATION, Integer.valueOf(i)), 3); } public IBlockState getStateFromMeta(int meta) { return this.getDefaultState().withProperty(ROTATION, Integer.valueOf(meta)); } public int getMetaFromState(IBlockState state) { return ((Integer) state.getValue(ROTATION)).intValue(); } protected BlockState createBlockState() { return new BlockState(this, new IProperty[] {ROTATION}); } } Gui Altar: ---------- @SideOnly(Side.CLIENT) public class GuiAltar extends GuiScreen { private static final ResourceLocation bgTexture = new ResourceLocation(Strings.MOD_ID + ":textures/gui/enter_dimension.png"); public void initGui() { this.buttonList.add(new GuiButton(0, (this.width - 176) / 2 + 176 / 2 - 50, (this.height - 166) / 2 + 140, 100, 20, I18n.format("gui.tpToDimension"))); } public void drawScreen(int mouseX, int mouseY, float partialTicks) { this.drawDefaultBackground(); int k = (this.width - 176) / 2; int l = (this.height - 166) / 2; GlStateManager.color(1.0F, 1.0F, 1.0F); this.mc.getTextureManager().bindTexture(bgTexture); this.drawTexturedModalRect((this.width - 176) / 2, (this.height - 166) / 2, 0, 0, 176, 166); GlStateManager.disableRescaleNormal(); RenderHelper.disableStandardItemLighting(); GlStateManager.disableLighting(); GlStateManager.disableDepth(); super.drawScreen(mouseX, mouseY, partialTicks); RenderHelper.enableGUIStandardItemLighting(); GlStateManager.pushMatrix(); GlStateManager.translate((float) k, (float) l, 0.0F); GlStateManager.color(1.0F, 1.0F, 1.0F); GlStateManager.enableRescaleNormal(); RenderHelper.disableStandardItemLighting(); this.fontRendererObj.drawString(I18n.format("gui.altar"), 176 / 2 - this.fontRendererObj.getStringWidth(I18n.format("gui.altar")) / 2, 6, 4210752); RenderHelper.enableGUIStandardItemLighting(); GlStateManager.popMatrix(); GlStateManager.enableLighting(); GlStateManager.enableDepth(); RenderHelper.enableStandardItemLighting(); } public boolean doesGuiPauseGame() { return false; } protected void actionPerformed(GuiButton button) throws IOException { switch (button.id) { case 0: Do I send A packet here? } } } dimension code: http://pastebin.com/rr6zz3px Most of the code for the dimension is just from The End, because I have no experience with generation.
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.