package zmaster587.advancedRocketry.event; import java.nio.IntBuffer; import java.util.List; import java.util.Random; import net.minecraft.block.Block; import net.minecraft.block.material.MapColor; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.gui.Gui; import net.minecraft.client.gui.ScaledResolution; import net.minecraft.client.renderer.Tessellator; import net.minecraft.entity.Entity; import net.minecraft.init.Blocks; import net.minecraft.item.ItemStack; import net.minecraft.util.MathHelper; import net.minecraft.util.ResourceLocation; import net.minecraft.util.Vec3; import net.minecraft.world.World; import net.minecraft.world.chunk.Chunk; import net.minecraftforge.client.ForgeHooksClient; import net.minecraftforge.client.IRenderHandler; import net.minecraftforge.client.event.MouseEvent; import net.minecraftforge.client.event.RenderGameOverlayEvent; import net.minecraftforge.client.event.RenderGameOverlayEvent.ElementType; import org.lwjgl.input.Mouse; import org.lwjgl.opengl.GL11; import zmaster587.advancedRocketry.api.Configuration; import zmaster587.advancedRocketry.api.IPlanetaryProvider; import zmaster587.advancedRocketry.api.RocketEvent; import zmaster587.advancedRocketry.api.armor.IFillableArmor; import zmaster587.advancedRocketry.atmosphere.AtmosphereHandler; import zmaster587.advancedRocketry.client.render.ClientDynamicTexture; import zmaster587.advancedRocketry.client.render.planet.RenderPlanetarySky; import zmaster587.advancedRocketry.dimension.DimensionManager; import zmaster587.advancedRocketry.entity.EntityRocket; import zmaster587.advancedRocketry.inventory.TextureResources; import zmaster587.libVulpes.api.IArmorComponent; import zmaster587.libVulpes.api.IModularArmor; import zmaster587.libVulpes.client.ResourceIcon; import zmaster587.libVulpes.render.RenderHelper; import zmaster587.libVulpes.util.ZUtils; import cpw.mods.fml.common.eventhandler.SubscribeEvent; import cpw.mods.fml.common.gameevent.InputEvent; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; public class RocketEventHandler extends Gui { private ResourceLocation background = TextureResources.rocketHud; private static ClientDynamicTexture earth; private static ClientDynamicTexture outerBounds; private static final int getImgSize = 512; private static final int outerImgSize = getImgSize/8; private static boolean mapReady = false; private static boolean mapNeedsBinding = false; private static IRenderHandler prevRenderHanlder = null; private static IntBuffer table,outerBoundsTable; public static GuiBox suitPanel = new GuiBox(8,8,24,24); public static GuiBox oxygenBar = new GuiBox(8,-57, 80, 48); private static GuiBox currentlySelectedBox = null; private static final int numTicksToDisplay = 100; @SubscribeEvent public void onRocketDeorbit(RocketEvent.RocketDeOrbitingEvent event) { if(event.world.isRemote) { prepareOrbitalMap(event); //Sky blend color gets stuck and doesnt update unless a new X/Z coord is passed //So fix that... ForgeHooksClient.getSkyBlendColour(event.world, 0, 0, 0); if(!(event.world.provider instanceof IPlanetaryProvider)) { prevRenderHanlder = event.world.provider.getSkyRenderer(); event.world.provider.setSkyRenderer(new RenderPlanetarySky()); } } } @SubscribeEvent public void onRocketLaunch(RocketEvent.RocketLaunchEvent event) { if(event.world.isRemote && event.entity.ridingEntity != null && event.entity.ridingEntity.equals(Minecraft.getMinecraft().thePlayer)) { prepareOrbitalMap(event); prevRenderHanlder = event.world.provider.getSkyRenderer(); event.world.provider.setSkyRenderer(new RenderPlanetarySky()); } } @SideOnly(Side.CLIENT) public static void destroyOrbitalTextures(World world) { if(!(world.provider instanceof IPlanetaryProvider)) { world.provider.setSkyRenderer(prevRenderHanlder); prevRenderHanlder = null; } if(earth != null) GL11.glDeleteTextures(earth.getTextureId()); if(outerBounds != null) GL11.glDeleteTextures(outerBounds.getTextureId()); outerBounds = null; earth = null; mapReady = false; } @SideOnly(Side.CLIENT) private void prepareOrbitalMap(RocketEvent event) { mapReady = false; //Attempt to generate everything on seperate thread if (earth == null) { earth = new ClientDynamicTexture(getImgSize,getImgSize); outerBounds = new ClientDynamicTexture(outerImgSize, outerImgSize); } if(event.world.provider.dimensionId == Configuration.spaceDimId) { destroyOrbitalTextures(event.world); return; } //Multi thread texture creation b/c it can be expensive final World worldObj = event.world; final Entity entity = event.entity; new Thread(new Runnable() { @Override public void run() { table = earth.getByteBuffer(); outerBoundsTable = outerBounds.getByteBuffer(); //Get the average of each edge RGB long topEdge[], bottomEdge[], leftEdge[], rightEdge[], total[]; total = topEdge = bottomEdge = leftEdge = rightEdge = new long[] {0,0,0}; int numChunksLoaded = 0; for(int i = 0; i < getImgSize*getImgSize; i++) { //TODO: Optimize int xOffset = (i % getImgSize); int yOffset = (i / getImgSize); int xPosition = (int)entity.posX - (getImgSize/2) + xOffset; int zPosition = (int)entity.posZ - (getImgSize/2) + yOffset; Chunk chunk = worldObj.getChunkFromBlockCoords(xPosition, zPosition); if(chunk.isChunkLoaded && !chunk.isEmpty()) { //Get Xcoord and ZCoords in the chunk numChunksLoaded++; int heightValue = chunk.getHeightValue( xPosition + (chunk.xPosition >= 0 ? - (Math.abs( chunk.xPosition )<< 4) : (Math.abs( chunk.xPosition )<< 4)), zPosition + (chunk.zPosition >= 0 ? - (Math.abs(chunk.zPosition )<< 4) : (Math.abs(chunk.zPosition )<< 4))); MapColor color = MapColor.airColor; int yPosition; Block block = null; //Get the first non-air block for(yPosition = heightValue; yPosition > 0; yPosition-- ) { block = worldObj.getBlock(xPosition, yPosition, zPosition); if((color = block.getMapColor(worldObj.getBlockMetadata(xPosition, yPosition, zPosition))) != MapColor.airColor) { break; } } int intColor; if(block == Blocks.grass || block == Blocks.tallgrass) { int color2 = worldObj.getBiomeGenForCoords(xPosition, zPosition).getBiomeGrassColor(xPosition, yPosition, zPosition); int r = (color2 & 0xFF); int g = ( (color2 >>> 8) & 0xFF); int b = ( (color2 >>> 16) & 0xFF); intColor = b | (g << 8) | (r << 16); } else if(block == Blocks.leaves || block == Blocks.leaves2) { int color2 = worldObj.getBiomeGenForCoords(xPosition, zPosition).getBiomeFoliageColor(xPosition, yPosition, zPosition); int r = (color2 & 0xFF); int g = ( (color2 >>> 8) & 0xFF); int b = ( (color2 >>> 16) & 0xFF); intColor = b | (g << 8) | (r << 16); } else intColor = ( (color.colorValue & 0xFF) << 16) | ( ( color.colorValue >>> 16 ) & 0xFF ) | ( color.colorValue & 0xFF00 ); //Put into the table and make opaque table.put(i, intColor | 0xFF000000); //Background in case chunk doesnt load total[0] += intColor & 0xFF; total[1] += (intColor & 0xFF00) >>> 8; total[2] += (intColor & 0xFF0000) >>> 16; } } int multiplierGreen = 1; int multiplierBlue = 1; //Get the outer layer total[0] = ZUtils.getAverageColor(total[0], total[1]*multiplierGreen, total[2]* multiplierBlue, numChunksLoaded); Random random = new Random(); int randomMax = 0x2A; for(int i = 0; i < outerImgSize*outerImgSize; i++) { int randR = randomMax - random.nextInt(randomMax) / 2; int randG = ( randomMax - random.nextInt(randomMax)/2 ) << 8; int randB = ( randomMax - random.nextInt(randomMax) /2 ) << 16; int color = (int)( MathHelper.clamp_int((int) ( (total[0] & 0xFF) + randR ),0, 0xFF ) | MathHelper.clamp_int((int)(total[0] & 0xFF00) + randG, 0x0100, 0xFF00) | MathHelper.clamp_int( (int)(( total[0] & 0xFF0000) + randB), 0x010000, 0xFF0000) ); outerBoundsTable.put(i, color | 0xff000000); } outerBoundsTable.flip(); table.flip(); //Yes really mapNeedsBinding = true; mapReady = true; } }, "Planet Texture Creator").start(); } //@SubscribeEvent public static void onPostWorldRender(float partialTicks) { if(!mapReady ) return; if(mapNeedsBinding) { mapNeedsBinding = false; earth.setByteBuffer(table); outerBounds.setByteBuffer(outerBoundsTable); } GL11.glPushMatrix(); GL11.glTranslatef(0, -5, 0); GL11.glPushAttrib(GL11.GL_ALPHA_TEST_FUNC); GL11.glEnable(GL11.GL_BLEND); GL11.glDisable(GL11.GL_FOG); GL11.glAlphaFunc(GL11.GL_GREATER, .01f); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); float brightness = Minecraft.getMinecraft().renderViewEntity.worldObj.getSunBrightness(partialTicks); double deltaY = (Minecraft.getMinecraft().renderViewEntity.posY - Minecraft.getMinecraft().renderViewEntity.lastTickPosY)*partialTicks; double size = (getImgSize*5/(72-Minecraft.getMinecraft().renderViewEntity.posY - deltaY)); Tessellator tess = Tessellator.instance; //Less detailed land tess.startDrawingQuads(); GL11.glBindTexture(GL11.GL_TEXTURE_2D, outerBounds.getTextureId()); double size2 = size*16; float brightness2 =brightness*.43f; tess.setColorRGBA_F(brightness2, brightness2, brightness2, MathHelper.clamp_float(((float)Minecraft.getMinecraft().renderViewEntity.posY -200f)/50f, 0f, 1f)); RenderHelper.renderTopFaceWithUV(tess, -10.1, size2, size2, -size2, -size2, 0, 1, 0, 1); tess.draw(); tess.startDrawingQuads(); GL11.glBindTexture(GL11.GL_TEXTURE_2D, earth.getTextureId()); float opacityFromHeight = MathHelper.clamp_float(((float)Minecraft.getMinecraft().renderViewEntity.posY -200f)/100f, 0f, 1f); //Detailed Land tess.setColorRGBA_F(brightness, brightness, brightness, opacityFromHeight); RenderHelper.renderTopFaceWithUV(tess, -10 , size, size, -size, -size, 0f, 1f, 0f, 1f); tess.draw(); //AtmosphereGlow Vec3 skyColor = Minecraft.getMinecraft().renderViewEntity.worldObj.provider.getSkyColor(Minecraft.getMinecraft().renderViewEntity, partialTicks); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); GL11.glDisable(GL11.GL_TEXTURE_2D); GL11.glBindTexture(GL11.GL_TEXTURE_2D,0); tess.startDrawingQuads(); tess.setColorRGBA_F((float)skyColor.xCoord, (float)skyColor.yCoord, (float)skyColor.zCoord, 0.05f); size = (getImgSize*100/(180-Minecraft.getMinecraft().renderViewEntity.posY - deltaY)); for(int i = 0; i < 5 * MathHelper.clamp_float(( ( DimensionManager.getInstance().getDimensionProperties(Minecraft.getMinecraft().renderViewEntity.worldObj.provider.dimensionId).getAtmosphereDensity() *.01f * (float)Minecraft.getMinecraft().renderViewEntity.posY -280f) )/150f, 0f, 2f); i++) { RenderHelper.renderTopFace(tess, -9 + i*.6, size, size, -size , -size); } // GL11.glEnable(GL11.GL_TEXTURE_2D); tess.draw(); GL11.glDisable(GL11.GL_BLEND); GL11.glEnable(GL11.GL_FOG); GL11.glPopAttrib(); GL11.glPopMatrix(); } @SubscribeEvent public void onScreenRender(RenderGameOverlayEvent.Post event) { Entity ride; if(event.type == ElementType.HOTBAR) { if((ride = Minecraft.getMinecraft().thePlayer.ridingEntity) instanceof EntityRocket) { EntityRocket rocket = (EntityRocket)ride; GL11.glEnable(GL11.GL_BLEND); //GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE); Minecraft.getMinecraft().renderEngine.bindTexture(background); //Draw BG this.drawTexturedModalRect(0, 0, 0, 0, 17, 252); //Draw altitude indicator float percentOrbit = MathHelper.clamp_float((float) ((rocket.posY - rocket.worldObj.provider.getAverageGroundLevel())/(float)(Configuration.orbit-rocket.worldObj.provider.getAverageGroundLevel())), 0f, 1f); this.drawTexturedModalRect(3, 8 + (int)(79*(1 - percentOrbit)), 17, 0, 6, 6); //6 to 83 //Draw Velocity indicator this.drawTexturedModalRect(3, 94 + (int)(69*(0.5 - (MathHelper.clamp_float((float) (rocket.motionY), -1f, 1f)/2f))), 17, 0, 6, 6); //94 to 161 //Draw fuel indicator int size = (int)(68*(rocket.getFuelAmount() /(float)rocket.getFuelCapacity())); this.drawTexturedModalRect(3, 242 - size, 17, 75 - size, 3, size); //94 to 161 GL11.glDisable(GL11.GL_BLEND); String str = rocket.getTextOverlay(); if(!str.isEmpty()) { String[] strs = str.split("\n"); int numLines = 0; for(String partStr : strs) { FontRenderer fontRenderer = Minecraft.getMinecraft().fontRenderer; float scale = str.length() < 50 ? 1f : 0.5f; int screenX = (int) ((event.resolution.getScaledWidth()/(scale*6) - fontRenderer.getStringWidth(partStr)/2)); int screenY = (int) ((event.resolution.getScaledHeight()/18)/scale) + numLines*18; GL11.glPushMatrix(); GL11.glScalef(3*scale, 3*scale, 3*scale); fontRenderer.drawStringWithShadow(partStr, screenX, screenY, 0xFFFFFF); GL11.glPopMatrix(); numLines++; } } } //Draw the O2 Bar if needed ItemStack chestPiece = Minecraft.getMinecraft().thePlayer.getEquipmentInSlot(3); if(!Minecraft.getMinecraft().thePlayer.capabilities.isCreativeMode && chestPiece != null && chestPiece.getItem() instanceof IFillableArmor) { float size = ((IFillableArmor)chestPiece.getItem()).getAirRemaining(chestPiece)/(float)((IFillableArmor)chestPiece.getItem()).getMaxAir(); GL11.glEnable(GL11.GL_BLEND); Minecraft.getMinecraft().renderEngine.bindTexture(background); GL11.glColor3f(1f, 1f, 1f); int width = 83; int screenX = oxygenBar.getRenderX();//+ 8; int screenY = oxygenBar.getRenderY();//- 57; //Draw BG this.drawTexturedModalRect(screenX, screenY, 23, 0, width, 17); this.drawTexturedModalRect(screenX , screenY, 23, 17, (int)(width*size), 17); } //Draw module icons if(!Minecraft.getMinecraft().thePlayer.capabilities.isCreativeMode && Minecraft.getMinecraft().thePlayer.getEquipmentInSlot(4) != null && Minecraft.getMinecraft().thePlayer.getEquipmentInSlot(4).getItem() instanceof IModularArmor) { for(int i = 1; i < 5; i++) { renderModuleSlots(Minecraft.getMinecraft().thePlayer.getEquipmentInSlot(i), 4-i, event); } } //In event of world change make sure the warning isn't displayed if(Minecraft.getMinecraft().theWorld.getTotalWorldTime() - AtmosphereHandler.lastSuffocationTime < 0) AtmosphereHandler.lastSuffocationTime = 0; //Tell the player he's suffocating if needed if(Minecraft.getMinecraft().theWorld.getTotalWorldTime() - AtmosphereHandler.lastSuffocationTime < numTicksToDisplay) { FontRenderer fontRenderer = Minecraft.getMinecraft().fontRenderer; String str = ""; if(AtmosphereHandler.currentAtm != null) { str = AtmosphereHandler.currentAtm.getDisplayMessage(); } int screenX = event.resolution.getScaledWidth()/6 - fontRenderer.getStringWidth(str)/2; int screenY = event.resolution.getScaledHeight()/18; GL11.glPushMatrix(); GL11.glScalef(3, 3, 3); fontRenderer.drawStringWithShadow(str, screenX, screenY, 0xFF5656); GL11.glColor3f(1f, 1f, 1f); Minecraft.getMinecraft().getTextureManager().bindTexture(TextureResources.progressBars); this.drawTexturedModalRect(screenX + fontRenderer.getStringWidth(str)/2 -8, screenY - 16, 0, 156, 16, 16); GL11.glPopMatrix(); } } //Hacky... yes... mouseInputEvent(new InputEvent.MouseInputEvent()); } @SubscribeEvent public void mouseInputEvent(InputEvent.MouseInputEvent event) { if(!Configuration.lockUI && !Mouse.isGrabbed()) { if(Mouse.isButtonDown(2)) { ScaledResolution scaledresolution = new ScaledResolution(Minecraft.getMinecraft(), Minecraft.getMinecraft().displayWidth, Minecraft.getMinecraft().displayHeight); int i = scaledresolution.getScaledWidth(); int j = scaledresolution.getScaledHeight(); int mouseX = Mouse.getX() * i / Minecraft.getMinecraft().displayWidth; int mouseY = j - Mouse.getY() * j / Minecraft.getMinecraft().displayHeight - 1; if(currentlySelectedBox == null && mouseX >= suitPanel.getX(i) && mouseX < suitPanel.getX(i) + suitPanel.sizeX && mouseY >= suitPanel.getY(j) && mouseY < suitPanel.getY(j) + suitPanel.sizeY) { currentlySelectedBox = suitPanel; } if(currentlySelectedBox == null && mouseX >= oxygenBar.getX(i) && mouseX < oxygenBar.getX(i) + oxygenBar.sizeX && mouseY >= oxygenBar.getY(j) && mouseY < oxygenBar.getY(j) + oxygenBar.sizeY) { currentlySelectedBox = oxygenBar; } if(currentlySelectedBox != null) { currentlySelectedBox.setRenderX(mouseX, i); currentlySelectedBox.setRenderY(mouseY, j); } } else currentlySelectedBox = null; } } private void renderModuleSlots(ItemStack armorStack, int slot, RenderGameOverlayEvent event) { int index = 1; float color = 0.85f + 0.15F*MathHelper.sin( 2f*(float)Math.PI*((Minecraft.getMinecraft().theWorld.getTotalWorldTime()) % 60)/60f ); GL11.glEnable(GL11.GL_BLEND); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); float alpha = 0.6f; //TODO other armor slots if(armorStack != null && armorStack.getItem() instanceof IModularArmor) { int size = 24; int screenY = suitPanel.getRenderY() + (slot-1)*(size + 8) + 32; int screenX = suitPanel.getRenderX(); //Draw BG GL11.glColor4f(1f,1f,1f, 1f); Minecraft.getMinecraft().renderEngine.bindTexture(TextureResources.frameHUDBG); Tessellator.instance.startDrawingQuads(); RenderHelper.renderNorthFaceWithUV(Tessellator.instance, this.zLevel-1, screenX - 4, screenY - 4, screenX + size, screenY + size + 4,0d,0.5d,0d,1d); Tessellator.instance.draw(); Minecraft.getMinecraft().renderEngine.bindTexture(TextureResources.frameHUDBG); Tessellator.instance.startDrawingQuads(); RenderHelper.renderNorthFaceWithUV(Tessellator.instance, this.zLevel-1, screenX + size, screenY - 3, screenX + 2 + size, screenY + size + 3,0.5d,0.5d,0d,0d); Tessellator.instance.draw(); //Draw Icon GL11.glColor4f(color,color,color, 1f); Minecraft.getMinecraft().renderEngine.bindTexture(TextureResources.armorSlots[slot]); Tessellator.instance.startDrawingQuads(); RenderHelper.renderNorthFaceWithUV(Tessellator.instance, this.zLevel-1, screenX, screenY, screenX + size, screenY + size,0d,1d,1d,0d); Tessellator.instance.draw(); List<ItemStack> stacks = ((IModularArmor)armorStack.getItem()).getComponents(armorStack); for(ItemStack stack : stacks) { GL11.glColor4f(1f, 1f, 1f, 1f); ((IArmorComponent)stack.getItem()).renderScreen(stack, stacks, event, this); ResourceIcon icon = ((IArmorComponent)stack.getItem()).getComponentIcon(stack); ResourceLocation texture = icon.getResourceLocation(); if(texture != null) { screenX = suitPanel.getRenderX() + 4 + index*(size+2); //Draw BG Minecraft.getMinecraft().renderEngine.bindTexture(TextureResources.frameHUDBG); Tessellator.instance.startDrawingQuads(); RenderHelper.renderNorthFaceWithUV(Tessellator.instance, this.zLevel -1, screenX - 4, screenY - 4, screenX + size - 2, screenY + size + 4,0.5d,0.5d,0d,1d); Tessellator.instance.draw(); Minecraft.getMinecraft().renderEngine.bindTexture(texture); //Draw Icon GL11.glColor4f(color,color,color, alpha); Tessellator.instance.startDrawingQuads(); RenderHelper.renderNorthFaceWithUV(Tessellator.instance, this.zLevel-1, screenX, screenY, screenX + size, screenY + size, icon.getMinU(),icon.getMaxU(), icon.getMaxV(),icon.getMinV()); Tessellator.instance.draw(); index++; } } screenX = (index)*(size+2) + suitPanel.getRenderX() - 12; //Draw BG GL11.glColor4f(1f, 1f, 1f,1f); Minecraft.getMinecraft().renderEngine.bindTexture(TextureResources.frameHUDBG); Tessellator.instance.startDrawingQuads(); RenderHelper.renderNorthFaceWithUV(Tessellator.instance, this.zLevel-1, screenX + 12, screenY - 4, screenX + size, screenY + size + 4,0.75d,1d,0d,1d); Tessellator.instance.draw(); } GL11.glDisable(GL11.GL_BLEND); } public static class GuiBox { private int x; private int y; int modeX = -1; int modeY = -1; int sizeX, sizeY; boolean isVisible = true; public GuiBox(int x, int y, int sizeX, int sizeY) { this.setRawX(x); this.setRawY(y); this.sizeX = sizeX; this.sizeY = sizeY; } public int getX(int scaledW) { if(modeX == 1) return scaledW - getRawX(); else if(modeX == 0) { return scaledW/2 - getRawX(); } return getRawX(); } public int getY(int scaledH) { if(modeY == 1) return scaledH - getRawY(); else if(modeY == 0) { return scaledH/2 - getRawY(); } return getRawY(); } public void setRenderX(int x, double scaleX) { double i = scaleX; if(x < i/3) { modeX = -1; this.setRawX(x); } else if(x > i*2/3) { this.setRawX((int) (i - x)); modeX = 1; } else { this.setRawX((int)(i/2 - x)); modeX = 0; } } public void setRenderY(int y, double scaleY) { double i = scaleY; if(y < i/3) { modeY = -1; this.setRawY(y); } else if(y > i*2/3) { this.setRawY((int) (i - y)); modeY = 1; } else { this.setRawY((int)(i/2 - y)); modeY = 0; } } public int getRenderX() { ScaledResolution scaledresolution = new ScaledResolution(Minecraft.getMinecraft(), Minecraft.getMinecraft().displayWidth, Minecraft.getMinecraft().displayHeight); int i = scaledresolution.getScaledWidth(); if( modeX == 1) { return i - getRawX(); } else if (modeX == 0) { return i/2 - getRawX(); } return this.getRawX(); } public int getRenderY() { ScaledResolution scaledresolution = new ScaledResolution(Minecraft.getMinecraft(), Minecraft.getMinecraft().displayWidth, Minecraft.getMinecraft().displayHeight); int i = scaledresolution.getScaledHeight(); if( modeY == 1) { return i - getRawY(); } else if (modeY == 0) { return i/2 - getRawY(); } return this.getRawY(); } public int getRawX() { return x; } public void setRawX(int x) { this.x = x; } public int getRawY() { return y; } public void setRawY(int y) { this.y = y; } public void setSizeModeX(int int1) { modeX = int1; } public void setSizeModeY(int int1) { modeY = int1; } public int getSizeModeX() { return modeX; } public int getSizeModeY() { return modeY; } } }