Compare commits
160 commits
Author | SHA1 | Date | |
---|---|---|---|
9930d1bb6d | |||
38d29ba9c8 | |||
89e5775632 | |||
a9770ecea1 | |||
f579eee88b | |||
f7bb1b0fe7 | |||
d45a1a8c4a | |||
9e5ca9dd95 | |||
6afc26e601 | |||
256721aa12 | |||
431d54f779 | |||
d0984b143b | |||
2281e55a09 | |||
d566db0fc5 | |||
fcc5e9b640 | |||
339a7679f7 | |||
ad930fcbdc | |||
cdf8db1b50 | |||
8f1fda3f3d | |||
85028fd82a | |||
1128aa34ab | |||
e3edb3be8a | |||
06517a0d34 | |||
53a4f5f1a8 | |||
58163db658 | |||
17bb2e57ab | |||
836094a00b | |||
48918f0139 | |||
6d9522c80d | |||
83f66723c9 | |||
47021f9e49 | |||
1dea7e9645 | |||
678f37e184 | |||
9eb5f2cfd3 | |||
fa94de734b | |||
22fa5734a3 | |||
1258c07c1b | |||
46c73c8c46 | |||
8c414d53e3 | |||
7c2ce73de5 | |||
6114da126a | |||
cd7a739c5d | |||
98cf245b8d | |||
166064f21a | |||
4a6da6d0f7 | |||
1ae189c238 | |||
618a076c0f | |||
bda91dac26 | |||
ee3bf79c4c | |||
141c1b1f5c | |||
81613186e5 | |||
126ce64a24 | |||
367e6f5bfd | |||
c201df68b2 | |||
669fc77eab | |||
821a46b720 | |||
493230c4a6 | |||
5534531416 | |||
374e0c4617 | |||
f4c024cde7 | |||
35277daca8 | |||
6562d18dc1 | |||
663ef31db9 | |||
a6c2695ccb | |||
06a14ae645 | |||
228eec0a79 | |||
ec0a1aa5c3 | |||
1b61f085e3 | |||
d1a0847303 | |||
8e0bbd06c2 | |||
f30141c8f3 | |||
c8e5c16e41 | |||
18be47866c | |||
b14e539464 | |||
be0ab15153 | |||
f3117767fd | |||
414dc668ff | |||
b317139c97 | |||
3d0cc9665a | |||
18f37874fa | |||
902c795ecc | |||
5a394749bf | |||
bdf67a89f7 | |||
252c157cf0 | |||
b01b602728 | |||
815c52e5d7 | |||
b52053f5ea | |||
f76d3c8b89 | |||
6c55d59f1f | |||
753b4b8b5d | |||
c527989ada | |||
8be702b3aa | |||
688d5710c7 | |||
47a69ce8bc | |||
4433d3b3df | |||
dda5ac3573 | |||
17aad1f023 | |||
ad4949af16 | |||
2cee1d6632 | |||
435e3f3e29 | |||
5f49d6c036 | |||
4e51e18bdc | |||
bb6ebb0be8 | |||
fafcf0e0ab | |||
adc81d56d2 | |||
f879b060e8 | |||
ed02e53122 | |||
72df57fb3d | |||
6af3fd71e5 | |||
d8be274083 | |||
0b2ad9f92d | |||
e66758cd73 | |||
c0369d14b8 | |||
1d0dfddf25 | |||
a62dc2309d | |||
93d997c3c0 | |||
09149c7b88 | |||
f1219070d2 | |||
8fed598b51 | |||
e2ec9f0c84 | |||
20abca12f2 | |||
63c2a18c3a | |||
bb64949927 | |||
77b5a34a33 | |||
10fdaf0b1a | |||
2bc84f0c66 | |||
64b256c713 | |||
4a84f9e096 | |||
2cf7f0036d | |||
d41ad4db01 | |||
7299ab8e5c | |||
7fd8879c73 | |||
8bd9370bab | |||
aa0ff6cf96 | |||
d6d934f1f3 | |||
bd4b8d427a | |||
1eefb197f0 | |||
ffca1f62e5 | |||
88c43d0824 | |||
71e50743fd | |||
7126ca5a9f | |||
0055cbf806 | |||
41fae1317f | |||
f6b2fdf422 | |||
688522c5ca | |||
272392c8ea | |||
dfa5026a29 | |||
2dd83c61dc | |||
5e2b36dc82 | |||
26c71df542 | |||
7b6cff41c5 | |||
c62e3386aa | |||
7fd8a49d5c | |||
![]() |
4d1d323c72 | ||
![]() |
caef42dc16 | ||
![]() |
3a5a29cf9e | ||
![]() |
e6d16405c5 | ||
![]() |
31dd9d6303 | ||
![]() |
e145675525 | ||
![]() |
7c80936c05 |
3230 changed files with 68191 additions and 29794 deletions
12
.gitattributes
vendored
Normal file
12
.gitattributes
vendored
Normal file
|
@ -0,0 +1,12 @@
|
|||
#
|
||||
# https://help.github.com/articles/dealing-with-line-endings/
|
||||
#
|
||||
# Linux start script should use lf
|
||||
/gradlew text eol=lf
|
||||
|
||||
# These are Windows script files and should use crlf
|
||||
*.bat text eol=crlf
|
||||
|
||||
# Binary files should be left untouched
|
||||
*.jar binary
|
||||
|
16
.gitignore
vendored
16
.gitignore
vendored
|
@ -1,8 +1,8 @@
|
|||
/common/dev
|
||||
/common/bin
|
||||
/client/bin
|
||||
/client/run
|
||||
/server/bin
|
||||
/server/run
|
||||
/export
|
||||
/.metadata
|
||||
/dev
|
||||
.metadata
|
||||
.classpath
|
||||
.project
|
||||
.settings
|
||||
.gradle
|
||||
bin
|
||||
build
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
# TCR
|
||||
# TCR - That Cube Rocks
|
||||
|
||||
Ein Minecraft®™ 1.8.9 "Fork"
|
||||
Ein Block-basiertes Open-World-Spiel mit vielen Dimensionen und RPG-Elementen.
|
||||
|
||||
**Projekt ist in der frühen Entwicklungsphase / Alpha**
|
||||
|
||||
Dieses Projekt ist Public Domain, siehe UNLICENSE.
|
||||
Der Client verwendet LWJGL für GLFW und OpenGL, für dessen Lizenz siehe [Die LWJGL Website](https://www.lwjgl.org/license).
|
||||
|
|
47
client/build.gradle.kts
Normal file
47
client/build.gradle.kts
Normal file
|
@ -0,0 +1,47 @@
|
|||
|
||||
plugins {
|
||||
application
|
||||
id("com.gradleup.shadow") version "8.3.6"
|
||||
}
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation(project(":common"))
|
||||
|
||||
implementation(platform("org.lwjgl:lwjgl-bom:3.3.6"))
|
||||
|
||||
implementation("org.lwjgl", "lwjgl")
|
||||
implementation("org.lwjgl", "lwjgl-glfw")
|
||||
implementation("org.lwjgl", "lwjgl-opengl")
|
||||
|
||||
runtimeOnly("org.lwjgl", "lwjgl", classifier = "natives-linux")
|
||||
runtimeOnly("org.lwjgl", "lwjgl", classifier = "natives-freebsd")
|
||||
runtimeOnly("org.lwjgl", "lwjgl", classifier = "natives-windows")
|
||||
runtimeOnly("org.lwjgl", "lwjgl-glfw", classifier = "natives-linux")
|
||||
runtimeOnly("org.lwjgl", "lwjgl-glfw", classifier = "natives-freebsd")
|
||||
runtimeOnly("org.lwjgl", "lwjgl-glfw", classifier = "natives-windows")
|
||||
runtimeOnly("org.lwjgl", "lwjgl-opengl", classifier = "natives-linux")
|
||||
runtimeOnly("org.lwjgl", "lwjgl-opengl", classifier = "natives-freebsd")
|
||||
runtimeOnly("org.lwjgl", "lwjgl-opengl", classifier = "natives-windows")
|
||||
}
|
||||
|
||||
java {
|
||||
toolchain {
|
||||
languageVersion = JavaLanguageVersion.of(21)
|
||||
}
|
||||
}
|
||||
|
||||
application {
|
||||
mainClass = "client.Client"
|
||||
tasks.run.get().workingDir = rootProject.file("dev/client")
|
||||
tasks.run.get().workingDir.mkdirs()
|
||||
tasks.run.get().systemProperties.put("runtime.devmode", "")
|
||||
}
|
||||
|
||||
tasks.shadowJar {
|
||||
destinationDirectory = rootProject.file("dev")
|
||||
archiveFileName = "tcr_client.jar"
|
||||
}
|
|
@ -1,603 +0,0 @@
|
|||
package client;
|
||||
|
||||
import client.network.ClientPlayer;
|
||||
import client.world.WorldClient;
|
||||
import common.block.Block;
|
||||
import common.entity.Entity;
|
||||
import common.entity.npc.EntityNPC;
|
||||
import common.init.BlockRegistry;
|
||||
import common.init.EntityRegistry;
|
||||
import common.item.ItemBlock;
|
||||
import common.item.ItemControl;
|
||||
import common.item.ItemStack;
|
||||
import common.material.Material;
|
||||
import common.packet.CPacketAction;
|
||||
import common.packet.CPacketBreak;
|
||||
import common.packet.CPacketClick;
|
||||
import common.packet.CPacketPlace;
|
||||
import common.sound.PositionedSound;
|
||||
import common.util.BlockPos;
|
||||
import common.util.Facing;
|
||||
import common.util.Vec3;
|
||||
import common.world.State;
|
||||
import common.world.World;
|
||||
|
||||
public class PlayerController
|
||||
{
|
||||
private final Client gm;
|
||||
private final ClientPlayer netClientHandler;
|
||||
private BlockPos currentBlock = new BlockPos(-1, -1, -1);
|
||||
private ItemStack currentItemHittingBlock;
|
||||
private float curBlockDamageMP;
|
||||
private float stepSoundTickCounter;
|
||||
private int blockHitDelay;
|
||||
private boolean isHittingBlock;
|
||||
private boolean noclip;
|
||||
private int currentPlayerItem;
|
||||
private boolean interacting;
|
||||
|
||||
public PlayerController(Client gmIn, ClientPlayer netHandler)
|
||||
{
|
||||
this.gm = gmIn;
|
||||
this.netClientHandler = netHandler;
|
||||
}
|
||||
|
||||
// public static void clickBlockCreative(Game gmIn, PlayerController playerController, BlockPos pos, Facing facing)
|
||||
// {
|
||||
// if (!gmIn.theWorld.extinguishFire(gmIn.thePlayer, pos, facing))
|
||||
// {
|
||||
// playerController.onPlayerDestroyBlock(pos, facing);
|
||||
// }
|
||||
// }
|
||||
|
||||
// public void setPlayerCapabilities()
|
||||
// {
|
||||
// this.gm.thePlayer.flying &= this.gm.thePlayer.hasEffect(Potion.flying) || this.gm.thePlayer.noclip;
|
||||
// }
|
||||
|
||||
// public boolean isNoclip()
|
||||
// {
|
||||
// return this.gm.thePlayer.capabilities.noClip;
|
||||
// }
|
||||
|
||||
// public void setNoclip(boolean noclip)
|
||||
// {
|
||||
// this.noclip = noclip;
|
||||
// }
|
||||
|
||||
// public void setCheat(boolean cheat)
|
||||
// {
|
||||
// this.cheat = cheat;
|
||||
// this.setPlayerCapabilities();
|
||||
// }
|
||||
|
||||
|
||||
|
||||
// public boolean shouldDrawHUD()
|
||||
// {
|
||||
// return !this.creative;
|
||||
// }
|
||||
|
||||
/**
|
||||
* Called when a player completes the destruction of a block
|
||||
*/
|
||||
public boolean onPlayerDestroyBlock(BlockPos pos, Facing side)
|
||||
{
|
||||
// if (this.gamemode.isAdventure())
|
||||
// {
|
||||
// if (this.gamemode == Gamemode.SPECTATOR)
|
||||
// {
|
||||
// return false;
|
||||
// }
|
||||
|
||||
// if (!this.gm.thePlayer.isAllowEdit())
|
||||
// {
|
||||
// Block block = this.gm.theWorld.getBlockState(pos).getBlock();
|
||||
// ItemStack itemstack = this.gm.thePlayer.getCurrentEquippedItem();
|
||||
//
|
||||
// if (itemstack == null)
|
||||
// {
|
||||
// return false;
|
||||
// }
|
||||
//
|
||||
// if (!itemstack.canDestroy(block))
|
||||
// {
|
||||
// return false;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
// if (this.gm.thePlayer.getHeldItem() != null && !this.gm.thePlayer.getHeldItem().getItem().canBreakBlocks())
|
||||
// {
|
||||
// return false;
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
World world = this.gm.world;
|
||||
State iblockstate = world.getState(pos);
|
||||
Block block1 = iblockstate.getBlock();
|
||||
|
||||
if (block1.getMaterial() == Material.air)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
world.playAuxSFX(2001, pos, BlockRegistry.getStateId(iblockstate));
|
||||
boolean flag = world.setBlockToAir(pos);
|
||||
|
||||
if (flag)
|
||||
{
|
||||
block1.onBlockDestroyedByPlayer(world, pos, iblockstate);
|
||||
}
|
||||
|
||||
this.currentBlock = new BlockPos(this.currentBlock.getX(), -1, this.currentBlock.getZ());
|
||||
|
||||
// if (!this.creative)
|
||||
// {
|
||||
ItemStack itemstack1 = this.gm.player.getCurrentEquippedItem();
|
||||
|
||||
if (itemstack1 != null)
|
||||
{
|
||||
itemstack1.onBlockDestroyed(world, block1, pos, this.gm.player);
|
||||
|
||||
if (itemstack1.stackSize == 0)
|
||||
{
|
||||
this.gm.player.destroyCurrentEquippedItem();
|
||||
}
|
||||
}
|
||||
// }
|
||||
|
||||
return flag;
|
||||
}
|
||||
// }
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when the player is hitting a block with an item.
|
||||
*/
|
||||
public boolean clickBlock(BlockPos loc, Facing face)
|
||||
{
|
||||
// if (this.gamemode.isAdventure())
|
||||
// {
|
||||
// if (this.gamemode == Gamemode.SPECTATOR)
|
||||
// {
|
||||
// return false;
|
||||
// }
|
||||
|
||||
// if (!this.gm.thePlayer.isAllowEdit())
|
||||
// {
|
||||
// Block block = this.gm.theWorld.getBlockState(loc).getBlock();
|
||||
// ItemStack itemstack = this.gm.thePlayer.getCurrentEquippedItem();
|
||||
//
|
||||
// if (itemstack == null)
|
||||
// {
|
||||
// return false;
|
||||
// }
|
||||
//
|
||||
// if (!itemstack.canDestroy(block))
|
||||
// {
|
||||
// return false;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
if (!World.isValidXZ(loc))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
ItemStack stack = this.gm.player.getHeldItem();
|
||||
if(stack != null && stack.getItem().onAction(stack, this.gm.player, this.gm.world, ItemControl.PRIMARY, loc)) {
|
||||
this.interacting = true;
|
||||
this.netClientHandler.addToSendQueue(new CPacketBreak(CPacketBreak.Action.START_DESTROY_BLOCK, loc, face));
|
||||
return true;
|
||||
}
|
||||
// if (this.creative)
|
||||
// {
|
||||
// this.netClientHandler.addToSendQueue(new CPacketBreak(CPacketBreak.Action.START_DESTROY_BLOCK, loc, face));
|
||||
// clickBlockCreative(this.gm, this, loc, face);
|
||||
// this.blockHitDelay = 5;
|
||||
// }
|
||||
// else
|
||||
if (!this.isHittingBlock || !this.isHittingPosition(loc))
|
||||
{
|
||||
if (this.isHittingBlock)
|
||||
{
|
||||
this.netClientHandler.addToSendQueue(new CPacketBreak(CPacketBreak.Action.ABORT_DESTROY_BLOCK, this.currentBlock, face));
|
||||
}
|
||||
|
||||
this.netClientHandler.addToSendQueue(new CPacketBreak(CPacketBreak.Action.START_DESTROY_BLOCK, loc, face));
|
||||
Block block1 = this.gm.world.getState(loc).getBlock();
|
||||
boolean flag = block1.getMaterial() != Material.air;
|
||||
|
||||
if (flag && this.curBlockDamageMP == 0.0F)
|
||||
{
|
||||
block1.onBlockClicked(this.gm.world, loc, this.gm.player);
|
||||
}
|
||||
|
||||
if (flag && block1.getPlayerRelativeBlockHardness(this.gm.player, this.gm.player.worldObj, loc) >= 1.0F)
|
||||
{
|
||||
this.onPlayerDestroyBlock(loc, face);
|
||||
// if(this.cheat && block1.getPlayerRelativeBlockHardness(this.gm.thePlayer, this.gm.thePlayer.worldObj, loc) < 1.0F)
|
||||
this.blockHitDelay = 3;
|
||||
}
|
||||
else
|
||||
{
|
||||
this.isHittingBlock = true;
|
||||
this.currentBlock = loc;
|
||||
this.currentItemHittingBlock = this.gm.player.getHeldItem();
|
||||
this.curBlockDamageMP = 0.0F;
|
||||
this.stepSoundTickCounter = 0.0F;
|
||||
this.gm.world.sendBlockBreakProgress(this.gm.player.getId(), this.currentBlock, (int)(this.curBlockDamageMP * 10.0F) - 1);
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Resets current block damage and isHittingBlock
|
||||
*/
|
||||
public void resetBlockRemoving()
|
||||
{
|
||||
if (this.isHittingBlock)
|
||||
{
|
||||
this.netClientHandler.addToSendQueue(new CPacketBreak(CPacketBreak.Action.ABORT_DESTROY_BLOCK, this.currentBlock, Facing.DOWN));
|
||||
this.isHittingBlock = false;
|
||||
this.curBlockDamageMP = 0.0F;
|
||||
this.gm.world.sendBlockBreakProgress(this.gm.player.getId(), this.currentBlock, -1);
|
||||
}
|
||||
}
|
||||
|
||||
public void resetInteraction()
|
||||
{
|
||||
this.interacting = false;
|
||||
}
|
||||
|
||||
public boolean onPlayerDamageBlock(BlockPos posBlock, Facing directionFacing)
|
||||
{
|
||||
if(this.interacting)
|
||||
return false;
|
||||
this.syncCurrentPlayItem();
|
||||
|
||||
if (this.blockHitDelay > 0)
|
||||
{
|
||||
--this.blockHitDelay;
|
||||
return true;
|
||||
}
|
||||
// else if (this.creative && World.isValidXZ(posBlock))
|
||||
// {
|
||||
// this.blockHitDelay = 5;
|
||||
// this.netClientHandler.addToSendQueue(new CPacketBreak(CPacketBreak.Action.START_DESTROY_BLOCK, posBlock, directionFacing));
|
||||
// clickBlockCreative(this.gm, this, posBlock, directionFacing);
|
||||
// return true;
|
||||
// }
|
||||
else if (this.isHittingPosition(posBlock))
|
||||
{
|
||||
Block block = this.gm.world.getState(posBlock).getBlock();
|
||||
|
||||
if (block.getMaterial() == Material.air)
|
||||
{
|
||||
this.isHittingBlock = false;
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
this.curBlockDamageMP += block.getPlayerRelativeBlockHardness(this.gm.player, this.gm.player.worldObj, posBlock);
|
||||
|
||||
if (this.stepSoundTickCounter % 4.0F == 0.0F && block.sound.getStepSound() != null)
|
||||
{
|
||||
this.gm.getSoundManager().playSound(new PositionedSound(block.sound.getStepSound(), 0.25F, /* block.sound.getFrequency() * 0.5F, */ (float)posBlock.getX() + 0.5F, (float)posBlock.getY() + 0.5F, (float)posBlock.getZ() + 0.5F));
|
||||
}
|
||||
|
||||
++this.stepSoundTickCounter;
|
||||
|
||||
if (this.curBlockDamageMP >= 1.0F)
|
||||
{
|
||||
this.isHittingBlock = false;
|
||||
this.netClientHandler.addToSendQueue(new CPacketBreak(CPacketBreak.Action.STOP_DESTROY_BLOCK, posBlock, directionFacing));
|
||||
this.onPlayerDestroyBlock(posBlock, directionFacing);
|
||||
this.curBlockDamageMP = 0.0F;
|
||||
this.stepSoundTickCounter = 0.0F;
|
||||
this.blockHitDelay = 5;
|
||||
}
|
||||
|
||||
this.gm.world.sendBlockBreakProgress(this.gm.player.getId(), this.currentBlock, (int)(this.curBlockDamageMP * 10.0F) - 1);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return this.clickBlock(posBlock, directionFacing);
|
||||
}
|
||||
}
|
||||
|
||||
// /**
|
||||
// * player reach distance = 4F
|
||||
// */
|
||||
// public float getBlockReachDistance()
|
||||
// {
|
||||
// return ;
|
||||
// }
|
||||
|
||||
public void updateController()
|
||||
{
|
||||
this.syncCurrentPlayItem();
|
||||
|
||||
if (this.netClientHandler.getNetworkManager().isChannelOpen())
|
||||
{
|
||||
this.netClientHandler.getNetworkManager().processReceivedPackets();
|
||||
}
|
||||
else
|
||||
{
|
||||
this.netClientHandler.getNetworkManager().checkDisconnected();
|
||||
}
|
||||
}
|
||||
|
||||
private boolean isHittingPosition(BlockPos pos)
|
||||
{
|
||||
ItemStack itemstack = this.gm.player.getHeldItem();
|
||||
boolean flag = this.currentItemHittingBlock == null && itemstack == null;
|
||||
|
||||
if (this.currentItemHittingBlock != null && itemstack != null)
|
||||
{
|
||||
flag = itemstack.getItem() == this.currentItemHittingBlock.getItem() && ItemStack.areItemStackTagsEqual(itemstack, this.currentItemHittingBlock) && (itemstack.isItemStackDamageable() || itemstack.getMetadata() == this.currentItemHittingBlock.getMetadata());
|
||||
}
|
||||
|
||||
return pos.equals(this.currentBlock) && flag;
|
||||
}
|
||||
|
||||
/**
|
||||
* Syncs the current player item with the server
|
||||
*/
|
||||
private void syncCurrentPlayItem()
|
||||
{
|
||||
int i = this.gm.player.inventory.currentItem;
|
||||
|
||||
if (i != this.currentPlayerItem)
|
||||
{
|
||||
this.currentPlayerItem = i;
|
||||
this.netClientHandler.addToSendQueue(new CPacketAction(CPacketAction.Action.SET_ITEMSLOT, this.currentPlayerItem));
|
||||
}
|
||||
}
|
||||
|
||||
public boolean onPlayerRightClick(EntityNPC player, WorldClient worldIn, ItemStack heldStack, BlockPos hitPos, Facing side, Vec3 hitVec)
|
||||
{
|
||||
this.syncCurrentPlayItem();
|
||||
float f = (float)(hitVec.xCoord - (double)hitPos.getX());
|
||||
float f1 = (float)(hitVec.yCoord - (double)hitPos.getY());
|
||||
float f2 = (float)(hitVec.zCoord - (double)hitPos.getZ());
|
||||
boolean flag = false;
|
||||
|
||||
if (!World.isValidXZ(hitPos))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(heldStack == null || !heldStack.getItem().onAction(heldStack, player, worldIn, ItemControl.SECONDARY, hitPos)) {
|
||||
// if (this.gamemode != Gamemode.SPECTATOR)
|
||||
// {
|
||||
State iblockstate = worldIn.getState(hitPos);
|
||||
|
||||
if ((!player.isSneaking() || player.getHeldItem() == null) // && (player.getHeldItem() == null || !player.getHeldItem().getItem().ignoresBlocks())
|
||||
&& iblockstate.getBlock().onBlockActivated(worldIn, hitPos, iblockstate, player, side, f, f1, f2))
|
||||
{
|
||||
flag = true;
|
||||
}
|
||||
|
||||
if (!flag && heldStack != null && heldStack.getItem() instanceof ItemBlock)
|
||||
{
|
||||
ItemBlock itemblock = (ItemBlock)heldStack.getItem();
|
||||
|
||||
if (!itemblock.canPlaceBlockOnSide(worldIn, hitPos, side, player, heldStack))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
// }
|
||||
}
|
||||
else {
|
||||
heldStack.getItem().onItemUse(heldStack, player, worldIn, hitPos, side, f, f1, f2);
|
||||
flag = true;
|
||||
}
|
||||
|
||||
this.netClientHandler.addToSendQueue(new CPacketPlace(hitPos, side.getIndex(), player.inventory.getCurrentItem(), f, f1, f2));
|
||||
|
||||
if (!flag) // && this.gamemode != Gamemode.SPECTATOR)
|
||||
{
|
||||
if (heldStack == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
// else if (this.creative)
|
||||
// {
|
||||
// int i = heldStack.getMetadata();
|
||||
// int j = heldStack.stackSize;
|
||||
// boolean flag1 = heldStack.onItemUse(player, worldIn, hitPos, side, f, f1, f2);
|
||||
// heldStack.setItemDamage(i);
|
||||
// heldStack.stackSize = j;
|
||||
// return flag1;
|
||||
// }
|
||||
else
|
||||
{
|
||||
return heldStack.onItemUse(player, worldIn, hitPos, side, f, f1, f2);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Notifies the server of things like consuming food, etc...
|
||||
*/
|
||||
public boolean sendUseItem(EntityNPC playerIn, World worldIn, ItemStack itemStackIn)
|
||||
{
|
||||
// if (this.gamemode == Gamemode.SPECTATOR)
|
||||
// {
|
||||
// return false;
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
this.syncCurrentPlayItem();
|
||||
this.netClientHandler.addToSendQueue(new CPacketPlace(playerIn.inventory.getCurrentItem()));
|
||||
int i = itemStackIn.stackSize;
|
||||
ItemStack itemstack = itemStackIn.useItemRightClick(worldIn, playerIn);
|
||||
|
||||
if (itemstack != itemStackIn || itemstack != null && itemstack.stackSize != i)
|
||||
{
|
||||
playerIn.inventory.mainInventory[playerIn.inventory.currentItem] = itemstack;
|
||||
|
||||
if (itemstack.stackSize == 0)
|
||||
{
|
||||
playerIn.inventory.mainInventory[playerIn.inventory.currentItem] = null;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
// }
|
||||
}
|
||||
|
||||
public EntityNPC createPlayerEntity(WorldClient worldIn, int type)
|
||||
{
|
||||
EntityNPC player = (EntityNPC)EntityRegistry.createEntityByID(type, worldIn);
|
||||
player.setClientPlayer(this.netClientHandler);
|
||||
return player;
|
||||
}
|
||||
|
||||
/**
|
||||
* Attacks an entity
|
||||
*/
|
||||
public void attackEntity(EntityNPC playerIn, Entity targetEntity)
|
||||
{
|
||||
this.syncCurrentPlayItem();
|
||||
this.netClientHandler.addToSendQueue(new CPacketAction(CPacketAction.Action.ATTACK, targetEntity.getId()));
|
||||
|
||||
// if (this.gamemode != Gamemode.SPECTATOR)
|
||||
// {
|
||||
playerIn.attackTargetEntityWithCurrentItem(targetEntity);
|
||||
// }
|
||||
}
|
||||
|
||||
/**
|
||||
* Send packet to server - player is interacting with another entity (left click)
|
||||
*/
|
||||
public boolean interactWithEntitySendPacket(EntityNPC playerIn, Entity targetEntity)
|
||||
{
|
||||
this.syncCurrentPlayItem();
|
||||
this.netClientHandler.addToSendQueue(new CPacketAction(CPacketAction.Action.INTERACT, targetEntity.getId()));
|
||||
return /* this.gamemode != Gamemode.SPECTATOR && */ playerIn.interactWith(targetEntity);
|
||||
}
|
||||
|
||||
// /**
|
||||
// * Return true when the player rightclick on an entity
|
||||
// *
|
||||
// * @param player The player's instance
|
||||
// * @param entityIn The entity clicked
|
||||
// * @param movingObject The object clicked
|
||||
// */
|
||||
// public boolean isPlayerRightClickingOnEntity(EntityNPC player, Entity entityIn, MovingObjectPosition movingObject)
|
||||
// {
|
||||
// this.syncCurrentPlayItem();
|
||||
// Vec3 vec3 = new Vec3(movingObject.hitVec.xCoord - entityIn.posX, movingObject.hitVec.yCoord - entityIn.posY, movingObject.hitVec.zCoord - entityIn.posZ);
|
||||
// this.netClientHandler.addToSendQueue(new C02PacketUseEntity(entityIn, vec3));
|
||||
// return this.gamemode != Gamemode.SPECTATOR && entityIn.interactAt(player, vec3);
|
||||
// }
|
||||
|
||||
/**
|
||||
* Handles slot clicks sends a packet to the server.
|
||||
*/
|
||||
public ItemStack windowClick(int windowId, int slotId, int mouseButtonClicked, int mode, EntityNPC playerIn)
|
||||
{
|
||||
short short1 = playerIn.openContainer.getNextTransactionID(playerIn.inventory);
|
||||
ItemStack itemstack = playerIn.openContainer.slotClick(slotId, mouseButtonClicked, mode, playerIn);
|
||||
this.netClientHandler.addToSendQueue(new CPacketClick(windowId, slotId, mouseButtonClicked, mode, itemstack, short1));
|
||||
return itemstack;
|
||||
}
|
||||
|
||||
/**
|
||||
* GuiEnchantment uses this during multiplayer to tell PlayerControllerMP to send a packet indicating the
|
||||
* enchantment action the player has taken.
|
||||
*
|
||||
* @param windowID The ID of the current window
|
||||
* @param button The button id (enchantment selected)
|
||||
*/
|
||||
public void sendEnchantPacket(int windowID, int button)
|
||||
{
|
||||
this.netClientHandler.addToSendQueue(new CPacketAction(CPacketAction.Action.ENCHANT_ITEM, windowID | (button << 8)));
|
||||
}
|
||||
|
||||
// /**
|
||||
// * Used in PlayerControllerMP to update the server with an ItemStack in a slot.
|
||||
// */
|
||||
// public void sendCheatPacket(ItemStack itemStackIn, boolean full)
|
||||
// {
|
||||
// }
|
||||
|
||||
// /**
|
||||
// * Sends a Packet107 to the server to drop the item on the ground
|
||||
// */
|
||||
// public void sendPacketDropItem(ItemStack itemStackIn)
|
||||
// {
|
||||
// if (this.creative && itemStackIn != null)
|
||||
// {
|
||||
// this.netClientHandler.addToSendQueue(new CPacketCreative(-1, itemStackIn));
|
||||
// }
|
||||
// }
|
||||
|
||||
public void onStoppedUsingItem(EntityNPC playerIn)
|
||||
{
|
||||
this.syncCurrentPlayItem();
|
||||
this.netClientHandler.addToSendQueue(new CPacketBreak(CPacketBreak.Action.RELEASE_USE_ITEM, BlockPos.ORIGIN, Facing.DOWN));
|
||||
playerIn.stopUsingItem();
|
||||
}
|
||||
|
||||
|
||||
|
||||
// /**
|
||||
// * Checks if the player is not creative, used for checking if it should break a block instantly
|
||||
// */
|
||||
// public boolean isNotCreative()
|
||||
// {
|
||||
// return !this.creative;
|
||||
// }
|
||||
|
||||
// /**
|
||||
// * returns true if player is in creative mode
|
||||
// */
|
||||
// public boolean isCreative()
|
||||
// {
|
||||
// return this.creative;
|
||||
// }
|
||||
|
||||
// /**
|
||||
// * Checks if the player is riding a horse, used to chose the GUI to open
|
||||
// */
|
||||
// public boolean isRidingHorse()
|
||||
// {
|
||||
// return ;
|
||||
// }
|
||||
|
||||
// public Gamemode getGamemode()
|
||||
// {
|
||||
// return this.gamemode;
|
||||
// }
|
||||
|
||||
/**
|
||||
* Return isHittingBlock
|
||||
*/
|
||||
public boolean getIsHittingBlock()
|
||||
{
|
||||
return this.isHittingBlock;
|
||||
}
|
||||
}
|
|
@ -1,30 +0,0 @@
|
|||
package client;
|
||||
|
||||
public class Timing {
|
||||
public static long tmr_timer;
|
||||
public static long tmr_start;
|
||||
public static long tmr_current;
|
||||
public static long tmr_last;
|
||||
|
||||
public static long tmr_delta;
|
||||
public static long tmr_update;
|
||||
public static long tmr_frames;
|
||||
public static long tmr_iters;
|
||||
|
||||
public static long tick_torun;
|
||||
public static long tick_done;
|
||||
public static long tick_total;
|
||||
public static long tick_time;
|
||||
public static long tick_stime;
|
||||
public static long tick_ftime;
|
||||
|
||||
public static long tick_ttime;
|
||||
public static long tick_update;
|
||||
|
||||
public static double tick_fraction;
|
||||
public static float framerate;
|
||||
public static float tickrate;
|
||||
public static float fdelta;
|
||||
public static int tickTarget;
|
||||
public static int tickFrame;
|
||||
}
|
|
@ -1,268 +0,0 @@
|
|||
package client.gui;
|
||||
|
||||
import java.io.File;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Collections;
|
||||
import java.util.Date;
|
||||
|
||||
import client.gui.element.ActButton;
|
||||
import client.gui.element.ButtonCallback;
|
||||
import client.gui.element.GuiList;
|
||||
import client.gui.element.ListEntry;
|
||||
import client.gui.element.NavButton;
|
||||
import client.gui.element.PressType;
|
||||
import client.renderer.Drawing;
|
||||
import common.color.TextColor;
|
||||
import common.init.Config;
|
||||
import common.log.Log;
|
||||
import common.network.IPlayer;
|
||||
import common.util.FileUtils;
|
||||
import common.util.Tuple;
|
||||
import common.util.Util;
|
||||
|
||||
public class GuiConnect extends GuiList<GuiConnect.ServerInfo> implements ButtonCallback {
|
||||
public class ServerInfo implements Comparable<ServerInfo>, ListEntry {
|
||||
private String name;
|
||||
private String address;
|
||||
private int port;
|
||||
private String user;
|
||||
private String password;
|
||||
private String access;
|
||||
private long lastConnected;
|
||||
|
||||
public ServerInfo(String name, String address, int port, String user, String password, String access, long lastConnected) {
|
||||
this.name = name;
|
||||
this.address = address;
|
||||
this.port = port;
|
||||
this.user = user;
|
||||
this.password = password;
|
||||
this.access = access;
|
||||
this.lastConnected = lastConnected;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return this.name;
|
||||
}
|
||||
|
||||
public String getAddress() {
|
||||
return this.address;
|
||||
}
|
||||
|
||||
public int getPort() {
|
||||
return this.port;
|
||||
}
|
||||
|
||||
public String getUser() {
|
||||
return this.user;
|
||||
}
|
||||
|
||||
public String getPassword() {
|
||||
return this.password;
|
||||
}
|
||||
|
||||
public String getAccess() {
|
||||
return this.access;
|
||||
}
|
||||
|
||||
public long getLastConnected() {
|
||||
return this.lastConnected;
|
||||
}
|
||||
|
||||
public void setData(String name, String address, int port, String user, String password, String access) {
|
||||
this.name = name;
|
||||
this.address = address;
|
||||
this.port = port;
|
||||
this.user = user;
|
||||
this.password = password;
|
||||
this.access = access;
|
||||
}
|
||||
|
||||
public void setLastConnected() {
|
||||
this.lastConnected = System.currentTimeMillis();
|
||||
}
|
||||
|
||||
public int compareTo(ServerInfo comp) {
|
||||
return this.lastConnected < comp.lastConnected ? 1 : (this.lastConnected > comp.lastConnected ? -1 : this.name.compareTo(comp.name));
|
||||
}
|
||||
|
||||
public void select(boolean isDoubleClick, int mouseX, int mouseY) {
|
||||
GuiConnect.this.selectButton.enabled = true;
|
||||
GuiConnect.this.deleteButton.enabled = true;
|
||||
GuiConnect.this.editButton.enabled = true;
|
||||
GuiConnect.this.copyButton.enabled = true;
|
||||
|
||||
if(isDoubleClick) {
|
||||
GuiConnect.this.use(GuiConnect.this.selectButton, PressType.PRIMARY);
|
||||
}
|
||||
}
|
||||
|
||||
public void draw(int x, int y, int mouseXIn, int mouseYIn, boolean hover) {
|
||||
Drawing.drawText(this.name + TextColor.GRAY + " - " + TextColor.RESET + this.user, x + 2, y, 0xffffffff);
|
||||
Drawing.drawText(this.address + TextColor.GRAY + " Port " + TextColor.RESET + this.port, x + 2, y + 18, 0xff808080);
|
||||
Drawing.drawText("Zuletzt verbunden: " + (this.lastConnected == -1L ? "nie" : DATE_FORMAT.format(new Date(this.lastConnected))), x + 2, y + 18 + 16, 0xff808080);
|
||||
}
|
||||
}
|
||||
|
||||
public static final GuiConnect INSTANCE = new GuiConnect();
|
||||
private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss");
|
||||
private static final File SERVERS_FILE = new File("servers.cfg");
|
||||
|
||||
private ActButton deleteButton;
|
||||
private ActButton selectButton;
|
||||
private ActButton copyButton;
|
||||
private ActButton editButton;
|
||||
private ActButton createButton;
|
||||
|
||||
private GuiConnect() {
|
||||
}
|
||||
|
||||
public void init(int width, int height) {
|
||||
super.init(width, height);
|
||||
this.setDimensions(width, height, 32, height - 32);
|
||||
this.elements.clear();
|
||||
if(SERVERS_FILE.exists()) {
|
||||
try {
|
||||
String[] lines = FileUtils.read(SERVERS_FILE).split("\n");
|
||||
String name = "";
|
||||
String address = "";
|
||||
int port = -1;
|
||||
String user = "";
|
||||
String password = "";
|
||||
String access = "";
|
||||
long time = -1L;
|
||||
for(int z = 0; z <= lines.length; z++) {
|
||||
String line = z == lines.length ? null : lines[z];
|
||||
if(line == null || (line.startsWith("[") && line.endsWith("]"))) {
|
||||
if(!name.isEmpty() && !address.isEmpty() && !user.isEmpty() && user.length() < IPlayer.MAX_USER_LENGTH && IPlayer.isValidUser(user) && password.length() < IPlayer.MAX_PASS_LENGTH && access.length() < IPlayer.MAX_PASS_LENGTH && address.length() < 128 && name.length() < 128 && port >= 0 && port < 65536)
|
||||
this.elements.add(new ServerInfo(name, address, port, user, password, access, time));
|
||||
if(line != null) {
|
||||
address = "";
|
||||
port = -1;
|
||||
user = "";
|
||||
password = "";
|
||||
access = "";
|
||||
time = -1L;
|
||||
name = line.substring(1, line.length() - 1);
|
||||
}
|
||||
}
|
||||
else {
|
||||
Tuple<String, String> value = Util.getKeyValue(line);
|
||||
if(value.first.equals("address"))
|
||||
address = value.second;
|
||||
else if(value.first.equals("port"))
|
||||
try {
|
||||
port = Integer.parseInt(value.second);
|
||||
}
|
||||
catch(NumberFormatException e) {
|
||||
}
|
||||
else if(value.first.equals("user"))
|
||||
user = value.second;
|
||||
else if(value.first.equals("password"))
|
||||
password = value.second;
|
||||
else if(value.first.equals("access"))
|
||||
access = value.second;
|
||||
else if(value.first.equals("connected"))
|
||||
try {
|
||||
time = Long.parseLong(value.second);
|
||||
}
|
||||
catch(NumberFormatException e) {
|
||||
}
|
||||
}
|
||||
}
|
||||
Collections.sort(this.elements);
|
||||
}
|
||||
catch(Exception e) {
|
||||
Log.IO.error("Konnte Serverliste nicht laden", e);
|
||||
this.elements.clear();
|
||||
}
|
||||
}
|
||||
|
||||
this.add(this.selectButton = new ActButton(width / 2 - 383, height - 28, 150, 24, this, "Verbinden"));
|
||||
this.add(this.createButton = new ActButton(width - 204, 4, 200, 24, this, "Server hinzufügen ..."));
|
||||
this.add(this.deleteButton = new ActButton(width / 2 - 75, height - 28, 150, 24, this, "Löschen"));
|
||||
this.add(this.editButton = new ActButton(width / 2 + 79, height - 28, 150, 24, this, "Bearbeiten"));
|
||||
this.add(this.copyButton = new ActButton(width / 2 - 229, height - 28, 150, 24, this, "Kopieren"));
|
||||
this.add(new NavButton(width / 2 + 233, height - 28, 150, 24, GuiMenu.INSTANCE, "Abbrechen"));
|
||||
|
||||
this.selectButton.enabled = false;
|
||||
this.deleteButton.enabled = false;
|
||||
this.editButton.enabled = false;
|
||||
this.copyButton.enabled = false;
|
||||
}
|
||||
|
||||
public void onGuiClosed() {
|
||||
this.save();
|
||||
}
|
||||
|
||||
public void applyServer(ServerInfo server) {
|
||||
if(this.selectedElement < 0)
|
||||
this.elements.add(server);
|
||||
this.save();
|
||||
this.gm.displayGuiScreen(this);
|
||||
}
|
||||
|
||||
private void save() {
|
||||
try {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
for(ServerInfo server : this.elements) {
|
||||
if(sb.length() > 0)
|
||||
sb.append("\n");
|
||||
sb.append("[" + server.getName() + "]\n");
|
||||
sb.append("address " + server.getAddress() + "\n");
|
||||
sb.append("port " + server.getPort() + "\n");
|
||||
sb.append("user " + server.getUser() + "\n");
|
||||
sb.append("password " + server.getPassword() + "\n");
|
||||
sb.append("access " + server.getAccess() + "\n");
|
||||
sb.append("connected " + server.getLastConnected());
|
||||
}
|
||||
FileUtils.write(SERVERS_FILE, sb.toString());
|
||||
}
|
||||
catch(Exception e) {
|
||||
Log.IO.error("Konnte Serverliste nicht speichern", e);
|
||||
}
|
||||
}
|
||||
|
||||
public String getTitle() {
|
||||
return "Server auswählen";
|
||||
}
|
||||
|
||||
public int getListWidth() {
|
||||
return 660;
|
||||
}
|
||||
|
||||
public int getSlotHeight() {
|
||||
return 56;
|
||||
}
|
||||
|
||||
public void use(ActButton button, PressType mode) {
|
||||
if(button == this.deleteButton) {
|
||||
if(this.selectedElement >= 0) {
|
||||
this.elements.remove(this.selectedElement);
|
||||
this.gm.displayGuiScreen(this);
|
||||
}
|
||||
}
|
||||
else if(button == this.selectButton) {
|
||||
ServerInfo server = this.getSelected();
|
||||
if(server != null) {
|
||||
server.setLastConnected();
|
||||
this.gm.connect(server.address, server.port, server.user, server.password, server.access);
|
||||
}
|
||||
}
|
||||
else if(button == this.createButton) {
|
||||
this.setSelected(-1);
|
||||
this.gm.displayGuiScreen(new GuiServer(new ServerInfo("", "", Config.PORT, "", "", "", -1L)));
|
||||
}
|
||||
else if(button == this.editButton) {
|
||||
ServerInfo server = this.getSelected();
|
||||
if(server != null)
|
||||
this.gm.displayGuiScreen(new GuiServer(server));
|
||||
}
|
||||
else if(button == this.copyButton) {
|
||||
ServerInfo server = this.getSelected();
|
||||
if(server != null) {
|
||||
this.setSelected(-1);
|
||||
this.gm.displayGuiScreen(new GuiServer(new ServerInfo(server.name, server.address, server.port, server.user, server.password, server.access, -1L)));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,149 +0,0 @@
|
|||
package client.gui;
|
||||
|
||||
import client.gui.GuiConnect.ServerInfo;
|
||||
import client.gui.element.ActButton;
|
||||
import client.gui.element.ButtonCallback;
|
||||
import client.gui.element.Label;
|
||||
import client.gui.element.NavButton;
|
||||
import client.gui.element.PressType;
|
||||
import client.gui.element.FieldAction;
|
||||
import client.gui.element.Field;
|
||||
import client.gui.element.FieldCallback;
|
||||
import client.vars.CVarCategory;
|
||||
import client.vars.Variable;
|
||||
import common.color.TextColor;
|
||||
import common.init.Config;
|
||||
import common.network.IPlayer;
|
||||
|
||||
public class GuiServer extends Gui implements FieldCallback {
|
||||
public static final GuiServer INSTANCE = new GuiServer(null);
|
||||
|
||||
private final ServerInfo server;
|
||||
|
||||
private Field nameBox;
|
||||
private Field addrBox;
|
||||
private Field portBox;
|
||||
private Field userBox;
|
||||
private Field passBox;
|
||||
private Field accBox;
|
||||
private Label nameLabel;
|
||||
private Label addrLabel;
|
||||
private Label portLabel;
|
||||
private Label userLabel;
|
||||
private Label passLabel;
|
||||
private Label accLabel;
|
||||
|
||||
public GuiServer(ServerInfo server) {
|
||||
this.server = server;
|
||||
}
|
||||
|
||||
@Variable(name = "srv_last_address", category = CVarCategory.SYSTEM, min = 1, max = 128, display = "Letzte Server-Adresse")
|
||||
private String lastAddr = "";
|
||||
@Variable(name = "srv_last_port", category = CVarCategory.SYSTEM, min = 0, max = 65535, display = "Letzter Server-Port")
|
||||
private int lastPort = Config.PORT;
|
||||
@Variable(name = "srv_last_user", category = CVarCategory.SYSTEM, max = IPlayer.MAX_USER_LENGTH, display = "Letzter Server-Nutzer", validator = IPlayer.UserValidator.class)
|
||||
private String lastUser = "";
|
||||
@Variable(name = "srv_last_password", category = CVarCategory.SYSTEM, max = IPlayer.MAX_PASS_LENGTH, display = "Letztes Server-Passwort")
|
||||
private String lastPass = "";
|
||||
@Variable(name = "srv_last_access", category = CVarCategory.SYSTEM, max = IPlayer.MAX_PASS_LENGTH, display = "Letzter Server-Zugang")
|
||||
private String lastAcc = "";
|
||||
|
||||
public void init(int width, int height) {
|
||||
if(this.server != null)
|
||||
this.nameBox = this.add(new Field(0, -50, 400, 24, 128, this, this.server.getName()));
|
||||
this.addrBox = this.add(new Field(0, 20, 400, 24, 128, this, this.server == null ? this.lastAddr : this.server.getAddress()));
|
||||
this.portBox = this.add(new Field(404, 20, 76, 24, 5, this, "" + (this.server == null ? this.lastPort : this.server.getPort())));
|
||||
this.userBox = this.add(new Field(0, 70, 220, 24, IPlayer.MAX_USER_LENGTH, this, IPlayer.VALID_USER, this.server == null ? this.lastUser : this.server.getUser()));
|
||||
this.passBox = this.add(new Field(0, 120, 480, 24, IPlayer.MAX_PASS_LENGTH, this, this.server == null ? this.lastPass : this.server.getPassword()));
|
||||
this.accBox = this.add(new Field(0, 170, 480, 24, IPlayer.MAX_PASS_LENGTH, this, this.server == null ? this.lastAcc : this.server.getAccess()));
|
||||
this.add(new ActButton(0, 220, 480, 24, new ButtonCallback() {
|
||||
public void use(ActButton elem, PressType action) {
|
||||
GuiServer.this.connect();
|
||||
}
|
||||
}, this.server == null ? "Verbinden" : (this.server.getName().isEmpty() ? "Hinzufügen" : "Übernehmen")));
|
||||
this.add(new NavButton(0, 250, 480, 24, this.server != null ? GuiConnect.INSTANCE : GuiMenu.INSTANCE, "Zurück"));
|
||||
if(this.server != null)
|
||||
this.nameLabel = this.add(new Label(0, -70, 410, 20, "Name", true));
|
||||
this.addrLabel = this.add(new Label(0, 0, 410, 20, "Adresse", true));
|
||||
this.portLabel = this.add(new Label(414, 0, 66, 20, "Port", true));
|
||||
this.userLabel = this.add(new Label(0, 50, 220, 20, "Nutzer", true));
|
||||
this.passLabel = this.add(new Label(0, 100, 480, 20, "Passwort", true));
|
||||
this.accLabel = this.add(new Label(0, 150, 480, 20, "Zugang", true));
|
||||
this.shift();
|
||||
}
|
||||
|
||||
public String getTitle() {
|
||||
return this.server == null ? "Mit Server verbinden" : (this.server.getName().isEmpty() ? "Server hinzufügen" : "Server bearbeiten");
|
||||
}
|
||||
|
||||
private void connect() {
|
||||
if(this.gm.world != null)
|
||||
return;
|
||||
String name = null;
|
||||
if(this.server != null) {
|
||||
name = this.nameBox.getText();
|
||||
if(name.isEmpty()) {
|
||||
this.nameLabel.setText(TextColor.RED + "Name");
|
||||
return;
|
||||
}
|
||||
}
|
||||
String addr = this.addrBox.getText();
|
||||
if(addr.isEmpty()) {
|
||||
this.addrLabel.setText(TextColor.RED + "Adresse");
|
||||
return;
|
||||
}
|
||||
int port = -1;
|
||||
if(this.portBox.getText().isEmpty()) {
|
||||
this.portLabel.setText(TextColor.RED + "Port");
|
||||
return;
|
||||
}
|
||||
else {
|
||||
try {
|
||||
port = Integer.parseInt(this.portBox.getText());
|
||||
}
|
||||
catch(NumberFormatException e) {
|
||||
}
|
||||
if(port < 0 || port > 65535) {
|
||||
this.portLabel.setText(TextColor.RED + "Port");
|
||||
return;
|
||||
}
|
||||
}
|
||||
String user = this.userBox.getText();
|
||||
if(user.isEmpty()) {
|
||||
this.userLabel.setText(TextColor.RED + "Nutzer");
|
||||
return;
|
||||
}
|
||||
String pass = this.passBox.getText();
|
||||
String acc = this.accBox.getText();
|
||||
if(this.server == null) {
|
||||
this.lastAddr = addr;
|
||||
this.lastPort = port;
|
||||
this.lastUser = user;
|
||||
this.lastPass = pass;
|
||||
this.lastAcc = acc;
|
||||
this.gm.setDirty();
|
||||
this.gm.connect(addr, port, user, pass, acc);
|
||||
}
|
||||
else {
|
||||
this.server.setData(name, addr, port, user, pass, acc);
|
||||
GuiConnect.INSTANCE.applyServer(this.server);
|
||||
}
|
||||
}
|
||||
|
||||
public void use(Field elem, FieldAction value) {
|
||||
if(value == FieldAction.SEND) {
|
||||
elem.setDeselected();
|
||||
this.connect();
|
||||
}
|
||||
else if(value == FieldAction.FOCUS) {
|
||||
if(elem == this.addrBox)
|
||||
this.addrLabel.setText("Adresse");
|
||||
else if(elem == this.portBox)
|
||||
this.portLabel.setText("Port");
|
||||
else if(elem == this.userBox)
|
||||
this.userLabel.setText("Nutzer");
|
||||
else if(this.server != null && elem == this.nameBox)
|
||||
this.nameLabel.setText("Name");
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,42 +0,0 @@
|
|||
package client.gui.container;
|
||||
|
||||
import common.inventory.ContainerWorkbench;
|
||||
import common.inventory.InventoryPlayer;
|
||||
import common.util.BlockPos;
|
||||
import common.world.World;
|
||||
|
||||
public class GuiCrafting extends GuiContainer
|
||||
{
|
||||
// private static final String craftingTableGuiTextures = "textures/gui/crafting_table.png";
|
||||
|
||||
public GuiCrafting(InventoryPlayer playerInv, World worldIn)
|
||||
{
|
||||
this(playerInv, worldIn, BlockPos.ORIGIN);
|
||||
}
|
||||
|
||||
public GuiCrafting(InventoryPlayer playerInv, World worldIn, BlockPos blockPosition)
|
||||
{
|
||||
super(new ContainerWorkbench(playerInv, worldIn, blockPosition));
|
||||
}
|
||||
|
||||
/**
|
||||
* Draw the foreground layer for the GuiContainer (everything in front of the items). Args : mouseX, mouseY
|
||||
*/
|
||||
public void drawGuiContainerForegroundLayer()
|
||||
{
|
||||
this.drawString("Handwerk", 28, 6);
|
||||
this.drawString("Inventar", 8, this.ySize - 96 + 2);
|
||||
}
|
||||
|
||||
// /**
|
||||
// * Args : renderPartialTicks, mouseX, mouseY
|
||||
// */
|
||||
// protected void drawGuiContainerBackgroundLayer(int mouseX, int mouseY)
|
||||
// {
|
||||
// GlState.color(1.0F, 1.0F, 1.0F, 1.0F);
|
||||
// this.gm.getTextureManager().bindTexture(craftingTableGuiTextures);
|
||||
// int i = (this.width - this.xSize) / 2;
|
||||
// int j = (this.height - this.ySize) / 2;
|
||||
//// this.rect(i, j, 0, 0, this.xSize, this.ySize);
|
||||
// }
|
||||
}
|
|
@ -1,44 +0,0 @@
|
|||
package client.gui.container;
|
||||
|
||||
import client.Client;
|
||||
import common.inventory.ContainerMachine;
|
||||
import common.inventory.IInventory;
|
||||
import common.inventory.InventoryPlayer;
|
||||
import common.tileentity.TileEntityMachine;
|
||||
|
||||
|
||||
public class GuiMachine extends GuiContainer
|
||||
{
|
||||
// private final String texture;
|
||||
private final IInventory playerInv;
|
||||
private final IInventory machineInv;
|
||||
private final TileEntityMachine machine;
|
||||
|
||||
public GuiMachine(InventoryPlayer player, IInventory inv, TileEntityMachine machine)
|
||||
{
|
||||
super(new ContainerMachine(player, machine, inv, Client.CLIENT.player));
|
||||
this.playerInv = player;
|
||||
this.machineInv = machine;
|
||||
// this.allowUserInput = false;
|
||||
this.ySize = 153;
|
||||
// this.texture = "textures/gui/" + texture + ".png";
|
||||
this.machine = machine;
|
||||
}
|
||||
|
||||
public void drawGuiContainerForegroundLayer()
|
||||
{
|
||||
this.drawString(this.machine.getStatus().color + this.machineInv.getCommandName() + " - " + this.machine.getStatus().name, 8, 6);
|
||||
this.drawString(this.playerInv.getCommandName(), 8, this.ySize - 96 + 2);
|
||||
this.drawString(String.format("Temperatur: %d °", this.machine.getTemperature()), 8, 18);
|
||||
this.drawString(this.machine.formatDisplay(), 8, 28);
|
||||
}
|
||||
|
||||
// protected void drawGuiContainerBackgroundLayer(int mouseX, int mouseY)
|
||||
// {
|
||||
// GlState.color(1.0F, 1.0F, 1.0F, 1.0F);
|
||||
// this.gm.getTextureManager().bindTexture(this.texture);
|
||||
// int i = (this.width - this.xSize) / 2;
|
||||
// int j = (this.height - this.ySize) / 2;
|
||||
//// this.rect(i, j, 0, 0, this.xSize, this.ySize);
|
||||
// }
|
||||
}
|
|
@ -1,413 +0,0 @@
|
|||
package client.gui.element;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
import client.gui.Gui;
|
||||
import client.renderer.DefaultVertexFormats;
|
||||
import client.renderer.Drawing;
|
||||
import client.renderer.GlState;
|
||||
import client.renderer.RenderBuffer;
|
||||
import client.renderer.Tessellator;
|
||||
import client.window.Button;
|
||||
import common.collect.Lists;
|
||||
import common.util.ExtMath;
|
||||
|
||||
public abstract class GuiList<T extends ListEntry> extends Gui
|
||||
{
|
||||
protected final List<T> elements = Lists.newArrayList();
|
||||
|
||||
protected int width;
|
||||
protected int height;
|
||||
|
||||
protected int top;
|
||||
protected int bottom;
|
||||
protected int right;
|
||||
protected int left;
|
||||
protected int mouseX;
|
||||
protected int mouseY;
|
||||
protected int initialClickY = -2;
|
||||
protected float scrollMultiplier;
|
||||
protected float amountScrolled;
|
||||
protected int selectedElement = -1;
|
||||
protected long lastClicked;
|
||||
|
||||
public abstract int getListWidth(); // 220
|
||||
|
||||
public abstract int getSlotHeight();
|
||||
|
||||
protected int getScrollBarX()
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
public void setDimensions(int widthIn, int heightIn, int topIn, int bottomIn)
|
||||
{
|
||||
this.width = widthIn;
|
||||
this.height = heightIn;
|
||||
this.top = topIn;
|
||||
this.bottom = bottomIn;
|
||||
this.left = 0;
|
||||
this.right = widthIn;
|
||||
}
|
||||
|
||||
public void init(int width, int height) {
|
||||
|
||||
this.selectedElement = -1;
|
||||
}
|
||||
|
||||
public void setSlotXBoundsFromLeft(int leftIn)
|
||||
{
|
||||
this.left = leftIn;
|
||||
this.right = leftIn + this.width;
|
||||
}
|
||||
|
||||
public final T getListEntry(int index) {
|
||||
return this.elements.get(index);
|
||||
}
|
||||
|
||||
public final T getSelected() {
|
||||
return this.selectedElement < 0 ? null : this.elements.get(this.selectedElement);
|
||||
}
|
||||
|
||||
public final int getSize() {
|
||||
return this.elements.size();
|
||||
}
|
||||
|
||||
public final void setSelected(int index) {
|
||||
this.selectedElement = index;
|
||||
}
|
||||
|
||||
protected int getContentHeight()
|
||||
{
|
||||
return this.getSize() * this.getSlotHeight();
|
||||
}
|
||||
|
||||
public int getSlotIndexFromScreenCoords(int x, int y)
|
||||
{
|
||||
int i = this.left + this.width / 2 - this.getListWidth() / 2;
|
||||
int j = this.left + this.width / 2 + this.getListWidth() / 2;
|
||||
int k = y - this.top + (int)this.amountScrolled - 4;
|
||||
int l = k / this.getSlotHeight();
|
||||
return this.isInList(x, y) && x >= i && x <= j && l >= 0 && k >= 0 && l < this.getSize() ? l : -1;
|
||||
}
|
||||
|
||||
protected boolean isInList(int x, int y)
|
||||
{
|
||||
return x >= this.getScrollBarX() + 6; // x < this.getScrollBarX();
|
||||
}
|
||||
|
||||
protected final boolean isSelected(int slotIndex)
|
||||
{
|
||||
return slotIndex == this.selectedElement;
|
||||
}
|
||||
|
||||
protected void bindAmountScrolled()
|
||||
{
|
||||
this.amountScrolled = ExtMath.clampf(this.amountScrolled, 0.0F, (float)this.getMaxScroll());
|
||||
}
|
||||
|
||||
public int getMaxScroll()
|
||||
{
|
||||
return Math.max(0, this.getContentHeight() - (this.bottom - this.top - 4));
|
||||
}
|
||||
|
||||
public int getAmountScrolled()
|
||||
{
|
||||
return (int)this.amountScrolled;
|
||||
}
|
||||
|
||||
public boolean isMouseYWithinSlotBounds(int p_148141_1_)
|
||||
{
|
||||
return p_148141_1_ >= this.top && p_148141_1_ <= this.bottom && this.mouseX >= this.left && this.mouseX <= this.right;
|
||||
}
|
||||
|
||||
public void scrollBy(int amount)
|
||||
{
|
||||
this.amountScrolled += (float)amount;
|
||||
this.bindAmountScrolled();
|
||||
this.initialClickY = -2;
|
||||
}
|
||||
|
||||
// public void actionPerformed(Button button)
|
||||
// {
|
||||
// if (button.enabled)
|
||||
// {
|
||||
// if (button.id == this.scrollUpButtonID)
|
||||
// {
|
||||
// this.amountScrolled -= (float)(this.slotHeight * 2 / 3);
|
||||
// this.initialClickY = -2;
|
||||
// this.bindAmountScrolled();
|
||||
// }
|
||||
// else if (button.id == this.scrollDownButtonID)
|
||||
// {
|
||||
// this.amountScrolled += (float)(this.slotHeight * 2 / 3);
|
||||
// this.initialClickY = -2;
|
||||
// this.bindAmountScrolled();
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
public void draw()
|
||||
{
|
||||
int mouseXIn = this.gm.mouse_x;
|
||||
int mouseYIn = this.gm.mouse_y;
|
||||
this.mouseX = mouseXIn;
|
||||
this.mouseY = mouseYIn;
|
||||
this.drawBackground();
|
||||
int i = this.getScrollBarX();
|
||||
int j = i + 6;
|
||||
this.bindAmountScrolled();
|
||||
GlState.disableLighting();
|
||||
GlState.disableFog();
|
||||
GlState.enableTexture2D();
|
||||
RenderBuffer worldrenderer = Tessellator.getBuffer();
|
||||
this.gm.getTextureManager().bindTexture(Gui.DIRT_BACKGROUND);
|
||||
GlState.color(1.0F, 1.0F, 1.0F, 1.0F);
|
||||
|
||||
float f = 32.0F;
|
||||
worldrenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX_COLOR);
|
||||
worldrenderer.pos((double)0, (double)this.bottom, 0.0D).tex((double)((float)0 / f), (double)((float)(this.bottom + (int)this.amountScrolled) / f)).color(32, 32, 32, 255).endVertex();
|
||||
worldrenderer.pos((double)this.gm.fb_x, (double)this.bottom, 0.0D).tex((double)((float)this.gm.fb_x / f), (double)((float)(this.bottom + (int)this.amountScrolled) / f)).color(32, 32, 32, 255).endVertex();
|
||||
worldrenderer.pos((double)this.gm.fb_x, (double)this.top, 0.0D).tex((double)((float)this.gm.fb_x / f), (double)((float)(this.top + (int)this.amountScrolled) / f)).color(32, 32, 32, 255).endVertex();
|
||||
worldrenderer.pos((double)0, (double)this.top, 0.0D).tex((double)((float)0 / f), (double)((float)(this.top + (int)this.amountScrolled) / f)).color(32, 32, 32, 255).endVertex();
|
||||
Tessellator.draw();
|
||||
|
||||
int x = this.left + this.width / 2 - this.getListWidth() / 2 + 2;
|
||||
int y = this.top + 4 - (int)this.amountScrolled;
|
||||
|
||||
this.drawSelectionBox(x, y, mouseXIn, mouseYIn);
|
||||
GlState.disableDepth();
|
||||
|
||||
this.overlayBackground(0, this.top, 255, 255);
|
||||
this.overlayBackground(this.bottom, this.height, 255, 255);
|
||||
|
||||
GlState.enableBlend();
|
||||
GlState.tryBlendFuncSeparate(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, GL11.GL_ZERO, GL11.GL_ONE);
|
||||
GlState.disableAlpha();
|
||||
GlState.shadeModel(GL11.GL_SMOOTH);
|
||||
GlState.disableTexture2D();
|
||||
|
||||
int i1 = 4;
|
||||
worldrenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX_COLOR);
|
||||
worldrenderer.pos((double)0, (double)(this.top + i1), 0.0D).tex(0.0D, 1.0D).color(0, 0, 0, 0).endVertex();
|
||||
worldrenderer.pos((double)this.gm.fb_x, (double)(this.top + i1), 0.0D).tex(1.0D, 1.0D).color(0, 0, 0, 0).endVertex();
|
||||
worldrenderer.pos((double)this.gm.fb_x, (double)this.top, 0.0D).tex(1.0D, 0.0D).color(0, 0, 0, 255).endVertex();
|
||||
worldrenderer.pos((double)0, (double)this.top, 0.0D).tex(0.0D, 0.0D).color(0, 0, 0, 255).endVertex();
|
||||
Tessellator.draw();
|
||||
worldrenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX_COLOR);
|
||||
worldrenderer.pos((double)0, (double)this.bottom, 0.0D).tex(0.0D, 1.0D).color(0, 0, 0, 255).endVertex();
|
||||
worldrenderer.pos((double)this.gm.fb_x, (double)this.bottom, 0.0D).tex(1.0D, 1.0D).color(0, 0, 0, 255).endVertex();
|
||||
worldrenderer.pos((double)this.gm.fb_x, (double)(this.bottom - i1), 0.0D).tex(1.0D, 0.0D).color(0, 0, 0, 0).endVertex();
|
||||
worldrenderer.pos((double)0, (double)(this.bottom - i1), 0.0D).tex(0.0D, 0.0D).color(0, 0, 0, 0).endVertex();
|
||||
Tessellator.draw();
|
||||
|
||||
int j1 = this.getMaxScroll();
|
||||
|
||||
if (j1 > 0)
|
||||
{
|
||||
int k1 = (this.bottom - this.top) * (this.bottom - this.top) / this.getContentHeight();
|
||||
k1 = ExtMath.clampi(k1, 32, this.bottom - this.top - 8);
|
||||
int l1 = (int)this.amountScrolled * (this.bottom - this.top - k1) / j1 + this.top;
|
||||
|
||||
if (l1 < this.top)
|
||||
{
|
||||
l1 = this.top;
|
||||
}
|
||||
|
||||
worldrenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX_COLOR);
|
||||
worldrenderer.pos((double)i, (double)this.bottom, 0.0D).tex(0.0D, 1.0D).color(0, 0, 0, 255).endVertex();
|
||||
worldrenderer.pos((double)j, (double)this.bottom, 0.0D).tex(1.0D, 1.0D).color(0, 0, 0, 255).endVertex();
|
||||
worldrenderer.pos((double)j, (double)this.top, 0.0D).tex(1.0D, 0.0D).color(0, 0, 0, 255).endVertex();
|
||||
worldrenderer.pos((double)i, (double)this.top, 0.0D).tex(0.0D, 0.0D).color(0, 0, 0, 255).endVertex();
|
||||
Tessellator.draw();
|
||||
worldrenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX_COLOR);
|
||||
worldrenderer.pos((double)i, (double)(l1 + k1), 0.0D).tex(0.0D, 1.0D).color(128, 128, 128, 255).endVertex();
|
||||
worldrenderer.pos((double)j, (double)(l1 + k1), 0.0D).tex(1.0D, 1.0D).color(128, 128, 128, 255).endVertex();
|
||||
worldrenderer.pos((double)j, (double)l1, 0.0D).tex(1.0D, 0.0D).color(128, 128, 128, 255).endVertex();
|
||||
worldrenderer.pos((double)i, (double)l1, 0.0D).tex(0.0D, 0.0D).color(128, 128, 128, 255).endVertex();
|
||||
Tessellator.draw();
|
||||
worldrenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX_COLOR);
|
||||
worldrenderer.pos((double)i, (double)(l1 + k1 - 1), 0.0D).tex(0.0D, 1.0D).color(192, 192, 192, 255).endVertex();
|
||||
worldrenderer.pos((double)(j - 1), (double)(l1 + k1 - 1), 0.0D).tex(1.0D, 1.0D).color(192, 192, 192, 255).endVertex();
|
||||
worldrenderer.pos((double)(j - 1), (double)l1, 0.0D).tex(1.0D, 0.0D).color(192, 192, 192, 255).endVertex();
|
||||
worldrenderer.pos((double)i, (double)l1, 0.0D).tex(0.0D, 0.0D).color(192, 192, 192, 255).endVertex();
|
||||
Tessellator.draw();
|
||||
}
|
||||
|
||||
GlState.enableTexture2D();
|
||||
GlState.shadeModel(GL11.GL_FLAT);
|
||||
GlState.enableAlpha();
|
||||
GlState.disableBlend();
|
||||
|
||||
super.draw();
|
||||
}
|
||||
|
||||
public void handleMouseInput()
|
||||
{
|
||||
if (this.isMouseYWithinSlotBounds(this.mouseY))
|
||||
{
|
||||
// if (Button.MOUSE_LEFT.isDown() && this.getEnabled())
|
||||
// {
|
||||
if (this.initialClickY == -1)
|
||||
{
|
||||
boolean flag1 = true;
|
||||
|
||||
if (this.mouseY >= this.top && this.mouseY <= this.bottom)
|
||||
{
|
||||
int j2 = (this.width - this.getListWidth()) / 2;
|
||||
int k2 = (this.width + this.getListWidth()) / 2;
|
||||
int l2 = this.mouseY - this.top + (int)this.amountScrolled - 4;
|
||||
int i1 = l2 / this.getSlotHeight();
|
||||
|
||||
if (i1 < this.getSize() && this.mouseX >= j2 && this.mouseX <= k2 && i1 >= 0 && l2 >= 0)
|
||||
{
|
||||
}
|
||||
else if (this.mouseX >= j2 && this.mouseX <= k2 && l2 < 0)
|
||||
{
|
||||
flag1 = false;
|
||||
}
|
||||
|
||||
int i3 = this.getScrollBarX();
|
||||
int j1 = i3 + 6;
|
||||
|
||||
if (this.mouseX >= i3 && this.mouseX <= j1)
|
||||
{
|
||||
this.scrollMultiplier = -1.0F;
|
||||
int k1 = this.getMaxScroll();
|
||||
|
||||
if (k1 < 1)
|
||||
{
|
||||
k1 = 1;
|
||||
}
|
||||
|
||||
int l1 = (int)((float)((this.bottom - this.top) * (this.bottom - this.top)) / (float)this.getContentHeight());
|
||||
l1 = ExtMath.clampi(l1, 32, this.bottom - this.top - 8);
|
||||
this.scrollMultiplier /= (float)(this.bottom - this.top - l1) / (float)k1;
|
||||
}
|
||||
else
|
||||
{
|
||||
this.scrollMultiplier = 1.0F;
|
||||
}
|
||||
|
||||
if (flag1)
|
||||
{
|
||||
this.initialClickY = this.mouseY;
|
||||
}
|
||||
else
|
||||
{
|
||||
this.initialClickY = -2;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
this.initialClickY = -2;
|
||||
}
|
||||
}
|
||||
else if (this.initialClickY >= 0)
|
||||
{
|
||||
this.amountScrolled -= (float)(this.mouseY - this.initialClickY) * this.scrollMultiplier;
|
||||
this.initialClickY = this.mouseY;
|
||||
}
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// this.initialClickY = -1;
|
||||
// }
|
||||
}
|
||||
}
|
||||
|
||||
protected void drawSelectionBox(int x, int y, int mouseXIn, int mouseYIn)
|
||||
{
|
||||
int size = this.getSize();
|
||||
RenderBuffer rb = Tessellator.getBuffer();
|
||||
|
||||
for (int z = 0; z < size; z++)
|
||||
{
|
||||
int y1 = y + z * this.getSlotHeight();
|
||||
int h = this.getSlotHeight() - 4;
|
||||
|
||||
if (this.isSelected(z))
|
||||
{
|
||||
int x1 = this.left + (this.width / 2 - this.getListWidth() / 2);
|
||||
int x2 = this.left + this.width / 2 + this.getListWidth() / 2;
|
||||
GlState.color(1.0F, 1.0F, 1.0F, 1.0F);
|
||||
GlState.disableTexture2D();
|
||||
rb.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX_COLOR);
|
||||
rb.pos((double)x1, (double)(y1 + h + 2), 0.0D).tex(0.0D, 1.0D).color(128, 128, 128, 255).endVertex();
|
||||
rb.pos((double)x2, (double)(y1 + h + 2), 0.0D).tex(1.0D, 1.0D).color(128, 128, 128, 255).endVertex();
|
||||
rb.pos((double)x2, (double)(y1 - 2), 0.0D).tex(1.0D, 0.0D).color(128, 128, 128, 255).endVertex();
|
||||
rb.pos((double)x1, (double)(y1 - 2), 0.0D).tex(0.0D, 0.0D).color(128, 128, 128, 255).endVertex();
|
||||
rb.pos((double)(x1 + 1), (double)(y1 + h + 1), 0.0D).tex(0.0D, 1.0D).color(0, 0, 0, 255).endVertex();
|
||||
rb.pos((double)(x2 - 1), (double)(y1 + h + 1), 0.0D).tex(1.0D, 1.0D).color(0, 0, 0, 255).endVertex();
|
||||
rb.pos((double)(x2 - 1), (double)(y1 - 1), 0.0D).tex(1.0D, 0.0D).color(0, 0, 0, 255).endVertex();
|
||||
rb.pos((double)(x1 + 1), (double)(y1 - 1), 0.0D).tex(0.0D, 0.0D).color(0, 0, 0, 255).endVertex();
|
||||
Tessellator.draw();
|
||||
GlState.enableTexture2D();
|
||||
}
|
||||
|
||||
boolean hover = this.getSlotIndexFromScreenCoords(mouseXIn, mouseYIn) == z;
|
||||
this.getListEntry(z).draw(x, y1, mouseXIn - x, mouseYIn - y1, hover);
|
||||
if(hover)
|
||||
Drawing.drawRect(x - 2, y1 - 2, this.getListWidth(), this.getSlotHeight(), Gui.HOVER_COLOR);
|
||||
}
|
||||
}
|
||||
|
||||
protected void overlayBackground(int startY, int endY, int startAlpha, int endAlpha)
|
||||
{
|
||||
RenderBuffer rb = Tessellator.getBuffer();
|
||||
this.gm.getTextureManager().bindTexture(Gui.DIRT_BACKGROUND);
|
||||
GlState.color(1.0F, 1.0F, 1.0F, 1.0F);
|
||||
float f = 32.0F;
|
||||
rb.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX_COLOR);
|
||||
rb.pos((double)0, (double)endY, 0.0D).tex(0.0D, (double)((float)endY / 32.0F)).color(64, 64, 64, endAlpha).endVertex();
|
||||
rb.pos((double)this.gm.fb_x, (double)endY, 0.0D).tex((double)((float)this.gm.fb_x / 32.0F), (double)((float)endY / 32.0F)).color(64, 64, 64, endAlpha).endVertex();
|
||||
rb.pos((double)this.gm.fb_x, (double)startY, 0.0D).tex((double)((float)this.gm.fb_x / 32.0F), (double)((float)startY / 32.0F)).color(64, 64, 64, startAlpha).endVertex();
|
||||
rb.pos((double)0, (double)startY, 0.0D).tex(0.0D, (double)((float)startY / 32.0F)).color(64, 64, 64, startAlpha).endVertex();
|
||||
Tessellator.draw();
|
||||
}
|
||||
|
||||
public void mouse(Button btn, int x, int y, boolean ctrl, boolean shift)
|
||||
{
|
||||
super.mouse(btn, x, y, ctrl, shift);
|
||||
if (this.isMouseYWithinSlotBounds(y))
|
||||
{
|
||||
int i = this.getSlotIndexFromScreenCoords(x, y);
|
||||
|
||||
if (i >= 0)
|
||||
{
|
||||
int j = this.left + this.width / 2 - this.getListWidth() / 2 + 2;
|
||||
int k = this.top + 4 - this.getAmountScrolled() + i * this.getSlotHeight();
|
||||
int l = x - j;
|
||||
int i1 = y - k;
|
||||
|
||||
boolean flag = i == this.selectedElement && System.currentTimeMillis() - this.lastClicked < (long)this.gm.dclickDelay;
|
||||
this.selectedElement = i;
|
||||
this.lastClicked = System.currentTimeMillis();
|
||||
|
||||
this.getListEntry(i).select(flag, l, i1);
|
||||
}
|
||||
}
|
||||
if(btn == Button.MOUSE_LEFT && this.clicked(x, y) == null)
|
||||
this.handleMouseInput();
|
||||
}
|
||||
|
||||
public void mouserel(Button btn, int x, int y) {
|
||||
super.mouserel(btn, x, y);
|
||||
if(btn == Button.MOUSE_LEFT)
|
||||
this.initialClickY = -1;
|
||||
}
|
||||
|
||||
public void scroll(int scr_x, int scr_y, int x, int y, boolean ctrl, boolean shift) {
|
||||
super.scroll(scr_x, scr_y, x, y, ctrl, shift);
|
||||
if(scr_y != 0 && this.clicked(x, y) == null)
|
||||
this.amountScrolled -= (float)(ExtMath.clampi(scr_y, -1, 1) * this.getSlotHeight() / 2);
|
||||
}
|
||||
|
||||
public void drag(int x, int y) {
|
||||
super.drag(x, y);
|
||||
if(this.selected == null && Button.MOUSE_LEFT.isDown())
|
||||
this.handleMouseInput();
|
||||
}
|
||||
}
|
|
@ -1,20 +0,0 @@
|
|||
package client.gui.element;
|
||||
|
||||
import client.renderer.Drawing;
|
||||
import common.util.Util;
|
||||
|
||||
public class PasswordField extends Field {
|
||||
public PasswordField(int x, int y, int w, int h, int cap, FieldCallback callback, String text) {
|
||||
super(x, y, w, h, cap, callback, text);
|
||||
}
|
||||
|
||||
protected void drawForeground(int x1, int y1, int x2, int y2) {
|
||||
Drawing.txt_draw(x1 + this.text_x, y1 + this.text_y,
|
||||
x1 + this.text_x, y1 + this.text_y,
|
||||
Integer.MAX_VALUE, Integer.MAX_VALUE, this.enabled ? this.gm.style.text_field : Util.mulColor(this.gm.style.text_field, 0.5f), this.text.isEmpty() ? "" : "****");
|
||||
}
|
||||
|
||||
protected int getCursorX(int x1, int x2) {
|
||||
return x1;
|
||||
}
|
||||
}
|
|
@ -1,106 +0,0 @@
|
|||
package client.gui.options;
|
||||
|
||||
import client.gui.Formatter;
|
||||
import client.gui.element.Dropdown;
|
||||
import client.gui.element.DropdownCallback;
|
||||
import client.gui.element.Element;
|
||||
import client.gui.element.Fill;
|
||||
import client.gui.element.Slider;
|
||||
import client.gui.element.SliderCallback;
|
||||
import client.gui.element.Toggle;
|
||||
import client.gui.element.ToggleCallback;
|
||||
import client.window.Button;
|
||||
import client.window.DisplayMode;
|
||||
import client.window.Window;
|
||||
import common.color.TextColor;
|
||||
|
||||
public class GuiDisplay extends GuiOptions {
|
||||
private static final String[] DISTANCES = new String[] {"Gruselig", "Winzig", "Gering", "Normal", "Weit"};
|
||||
|
||||
private Element distanceSlider;
|
||||
|
||||
protected GuiDisplay() {
|
||||
}
|
||||
|
||||
public void init(int width, int height) {
|
||||
DisplayMode[] dmodes = Window.getDisplayModes();
|
||||
if(dmodes != null && dmodes.length > 0) {
|
||||
int offset = 0;
|
||||
int pos = 0;
|
||||
int num = dmodes.length;
|
||||
if(dmodes.length > DisplayMode.VID_MODES) {
|
||||
offset = dmodes.length - DisplayMode.VID_MODES;
|
||||
num = DisplayMode.VID_MODES;
|
||||
}
|
||||
DisplayMode[] modes = new DisplayMode[num];
|
||||
DisplayMode selected = dmodes[num + offset - 1];
|
||||
for(int z = 0; z < num; z++) {
|
||||
modes[z] = dmodes[z + offset];
|
||||
if(modes[z].equals(this.gm.vidMode))
|
||||
selected = modes[z];
|
||||
}
|
||||
this.add(new Dropdown<DisplayMode>(30, 80, 440, 24, false, modes, modes[modes.length - 1], selected, new DropdownCallback<DisplayMode>() {
|
||||
public void use(Dropdown<DisplayMode> elem, DisplayMode value) {
|
||||
GuiDisplay.this.gm.vidMode = value;
|
||||
GuiDisplay.this.gm.full(true);
|
||||
}
|
||||
}, "Auflösung"));
|
||||
}
|
||||
else {
|
||||
this.add(new Fill(30, 80, 440, 24, TextColor.RED + "Auflösung: <?>"));
|
||||
}
|
||||
|
||||
this.add(new Toggle(490, 80, 440, 24, false, GuiDisplay.this.gm.fullscreen, new ToggleCallback() {
|
||||
public void use(Toggle elem, boolean value) {
|
||||
GuiDisplay.this.gm.full(value);
|
||||
}
|
||||
}, "Vollbild"));
|
||||
this.add(new Slider(30, 120, 440, 24, 0, 0, 360 - 8, 0, (this.gm.sync < 0) ? (360 - 8) : (this.gm.sync != 0 ? ((this.gm.sync < 10) ? 1 : (this.gm.sync - 9)) : 0), new SliderCallback() {
|
||||
public void use(Slider elem, int value) {
|
||||
GuiDisplay.this.gm.getVar("win_sync").parse("" + ((value > 0 && value < 360 - 8) ? (value + 9) : (value != 0 ? -1 : 0)));
|
||||
GuiDisplay.this.gm.setDirty();
|
||||
}
|
||||
}, new Formatter<Slider>() {
|
||||
public String use(Slider elem) {
|
||||
int value = elem.getValue();
|
||||
return "Max. Bildrate: " + (value > 0 && value < (360 - 8) ? (value + 9) + " FPS" : (value != 0 ? "Unbegrenzt" : "VSync"));
|
||||
}
|
||||
}));
|
||||
this.addSelector("gl_vsync_flush", 490, 120, 440, 24);
|
||||
|
||||
this.addSelector("overlay_enabled", 30, 200, 440, 24);
|
||||
this.addSelector("overlay_opacity", 490, 200, 440, 24);
|
||||
|
||||
this.addSelector("overlay_fadeout", 30, 240, 440, 24);
|
||||
this.addSelector("chat_permanent", 490, 240, 440, 24);
|
||||
|
||||
this.addSelector("console_size", 30, 280, 440, 24);
|
||||
this.addSelector("chat_size", 490, 280, 440, 24);
|
||||
|
||||
this.addSelector("feed_size", 30, 320, 440, 24);
|
||||
this.addSelector("hotbar_size", 490, 320, 440, 24);
|
||||
|
||||
this.addSelector("gl_fov", 30, 400, 440, 24);
|
||||
this.distanceSlider = this.addSelector("chunk_view_distance", 30, 440, 440, 24);
|
||||
this.addSelector("chunk_build_time", 490, 440, 440, 24);
|
||||
super.init(width, height);
|
||||
}
|
||||
|
||||
public String getTitle() {
|
||||
return "Grafik und Anzeige";
|
||||
}
|
||||
|
||||
private String getDistanceName() {
|
||||
int distance = this.gm.renderDistance;
|
||||
distance = distance > 16 ? 16 : distance;
|
||||
String str = distance < 0 ? DISTANCES[0] : DISTANCES[(distance + 1) / 4];
|
||||
if(distance > 2 && (((distance + 1) / 2) & 1) == 1)
|
||||
str = str + "+";
|
||||
return String.format("Sichtweite: %d Chunks [%d Blöcke, %s]", this.gm.renderDistance, this.gm.renderDistance * 16, str);
|
||||
}
|
||||
|
||||
public void updateScreen() {
|
||||
if(!Button.isMouseDown())
|
||||
this.distanceSlider.setText(this.getDistanceName());
|
||||
}
|
||||
}
|
|
@ -1,69 +0,0 @@
|
|||
package client.network;
|
||||
|
||||
import java.security.PublicKey;
|
||||
|
||||
import javax.crypto.SecretKey;
|
||||
|
||||
import client.Client;
|
||||
import common.network.IClientLoginHandler;
|
||||
import common.network.NetConnection;
|
||||
import common.network.NetHandler;
|
||||
import common.network.PacketRegistry;
|
||||
import common.packet.LPacketPasswordResponse;
|
||||
import common.packet.LPacketStartEncrypt;
|
||||
import common.packet.RPacketDisconnect;
|
||||
import common.packet.RPacketEnableCompression;
|
||||
import common.packet.RPacketLoginSuccess;
|
||||
import common.packet.RPacketRequestEncrypt;
|
||||
import common.util.EncryptUtil;
|
||||
import io.netty.util.concurrent.Future;
|
||||
import io.netty.util.concurrent.GenericFutureListener;
|
||||
|
||||
public class ClientLoginHandler extends NetHandler implements IClientLoginHandler {
|
||||
private final Client gm;
|
||||
private final NetConnection networkManager;
|
||||
private final String user;
|
||||
private final String access;
|
||||
private final String password;
|
||||
|
||||
public ClientLoginHandler(NetConnection conn, Client gmIn, String userIn, String accessIn, String passwordIn) {
|
||||
this.networkManager = conn;
|
||||
this.gm = gmIn;
|
||||
this.user = userIn;
|
||||
this.access = accessIn;
|
||||
this.password = passwordIn;
|
||||
}
|
||||
|
||||
public void onDisconnect(String reason)
|
||||
{
|
||||
this.gm.disconnected(reason);
|
||||
}
|
||||
|
||||
public void handleDisconnect(RPacketDisconnect packetIn)
|
||||
{
|
||||
this.networkManager.closeChannel(packetIn.getReason());
|
||||
}
|
||||
|
||||
public void handleEncrypt(RPacketRequestEncrypt packet) {
|
||||
final SecretKey secret = EncryptUtil.createNewSharedKey();
|
||||
PublicKey pubkey = packet.getKey();
|
||||
this.networkManager.sendPacket(new LPacketStartEncrypt(secret, pubkey, packet.getToken()), new GenericFutureListener < Future <? super Void >> () {
|
||||
public void operationComplete(Future <? super Void > u) throws Exception {
|
||||
ClientLoginHandler.this.networkManager.startEncryption(secret);
|
||||
ClientLoginHandler.this.networkManager.sendPacket(new LPacketPasswordResponse(ClientLoginHandler.this.user, ClientLoginHandler.this.access, ClientLoginHandler.this.password));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void handleLoginSuccess(RPacketLoginSuccess packetIn)
|
||||
{
|
||||
this.gm.debugWorld = packetIn.isDebug();
|
||||
this.networkManager.setConnectionState(PacketRegistry.PLAY);
|
||||
this.networkManager.setNetHandler(new ClientPlayer(this.gm, this.networkManager));
|
||||
}
|
||||
|
||||
public void handleEnableCompression(RPacketEnableCompression packetIn)
|
||||
{
|
||||
this.networkManager.setCompressionTreshold(packetIn.getValue());
|
||||
}
|
||||
}
|
|
@ -1,156 +0,0 @@
|
|||
package client.renderer;
|
||||
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
import common.log.Log;
|
||||
|
||||
public class VertexFormatElement
|
||||
{
|
||||
private final VertexFormatElement.EnumType type;
|
||||
private final VertexFormatElement.EnumUsage usage;
|
||||
private int index;
|
||||
private int elementCount;
|
||||
|
||||
public VertexFormatElement(int indexIn, VertexFormatElement.EnumType typeIn, VertexFormatElement.EnumUsage usageIn, int count)
|
||||
{
|
||||
if (!this.isValid(indexIn, usageIn))
|
||||
{
|
||||
Log.JNI.warn("Mehrere Vertex-Elemente des gleichen Typs außer UVs sind nicht unterstützt. Erzwinge Typ UV.");
|
||||
this.usage = VertexFormatElement.EnumUsage.UV;
|
||||
}
|
||||
else
|
||||
{
|
||||
this.usage = usageIn;
|
||||
}
|
||||
|
||||
this.type = typeIn;
|
||||
this.index = indexIn;
|
||||
this.elementCount = count;
|
||||
}
|
||||
|
||||
private final boolean isValid(int index, VertexFormatElement.EnumUsage usage)
|
||||
{
|
||||
return index == 0 || usage == VertexFormatElement.EnumUsage.UV;
|
||||
}
|
||||
|
||||
public final VertexFormatElement.EnumType getType()
|
||||
{
|
||||
return this.type;
|
||||
}
|
||||
|
||||
public final VertexFormatElement.EnumUsage getUsage()
|
||||
{
|
||||
return this.usage;
|
||||
}
|
||||
|
||||
public final int getElementCount()
|
||||
{
|
||||
return this.elementCount;
|
||||
}
|
||||
|
||||
public final int getIndex()
|
||||
{
|
||||
return this.index;
|
||||
}
|
||||
|
||||
public String toString()
|
||||
{
|
||||
return this.elementCount + "," + this.usage.getDisplayName() + "," + this.type.getDisplayName();
|
||||
}
|
||||
|
||||
public final int getSize()
|
||||
{
|
||||
return this.type.getSize() * this.elementCount;
|
||||
}
|
||||
|
||||
public final boolean isPositionElement()
|
||||
{
|
||||
return this.usage == VertexFormatElement.EnumUsage.POSITION;
|
||||
}
|
||||
|
||||
public boolean equals(Object p_equals_1_)
|
||||
{
|
||||
if (this == p_equals_1_)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else if (p_equals_1_ != null && this.getClass() == p_equals_1_.getClass())
|
||||
{
|
||||
VertexFormatElement vertexformatelement = (VertexFormatElement)p_equals_1_;
|
||||
return this.elementCount != vertexformatelement.elementCount ? false : (this.index != vertexformatelement.index ? false : (this.type != vertexformatelement.type ? false : this.usage == vertexformatelement.usage));
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public int hashCode()
|
||||
{
|
||||
int i = this.type.hashCode();
|
||||
i = 31 * i + this.usage.hashCode();
|
||||
i = 31 * i + this.index;
|
||||
i = 31 * i + this.elementCount;
|
||||
return i;
|
||||
}
|
||||
|
||||
public static enum EnumType
|
||||
{
|
||||
FLOAT(4, "Float", GL11.GL_FLOAT),
|
||||
UBYTE(1, "Unsigned Byte", GL11.GL_UNSIGNED_BYTE),
|
||||
BYTE(1, "Byte", GL11.GL_BYTE),
|
||||
USHORT(2, "Unsigned Short", GL11.GL_UNSIGNED_SHORT),
|
||||
SHORT(2, "Short", GL11.GL_SHORT),
|
||||
UINT(4, "Unsigned Int", GL11.GL_UNSIGNED_INT),
|
||||
INT(4, "Int", GL11.GL_INT);
|
||||
|
||||
private final int size;
|
||||
private final String displayName;
|
||||
private final int glConstant;
|
||||
|
||||
private EnumType(int sizeIn, String displayNameIn, int glConstantIn)
|
||||
{
|
||||
this.size = sizeIn;
|
||||
this.displayName = displayNameIn;
|
||||
this.glConstant = glConstantIn;
|
||||
}
|
||||
|
||||
public int getSize()
|
||||
{
|
||||
return this.size;
|
||||
}
|
||||
|
||||
public String getDisplayName()
|
||||
{
|
||||
return this.displayName;
|
||||
}
|
||||
|
||||
public int getGlConstant()
|
||||
{
|
||||
return this.glConstant;
|
||||
}
|
||||
}
|
||||
|
||||
public static enum EnumUsage
|
||||
{
|
||||
POSITION("Position"),
|
||||
NORMAL("Normal"),
|
||||
COLOR("Vertex Color"),
|
||||
UV("UV"),
|
||||
// MATRIX("Bone Matrix"),
|
||||
// BLEND_WEIGHT("Blend Weight"),
|
||||
PADDING("Padding");
|
||||
|
||||
private final String displayName;
|
||||
|
||||
private EnumUsage(String displayNameIn)
|
||||
{
|
||||
this.displayName = displayNameIn;
|
||||
}
|
||||
|
||||
public String getDisplayName()
|
||||
{
|
||||
return this.displayName;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,153 +0,0 @@
|
|||
package client.renderer.blockmodel;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import client.renderer.texture.TextureAtlasSprite;
|
||||
import common.collect.Lists;
|
||||
import common.model.Transforms;
|
||||
import common.util.Facing;
|
||||
|
||||
public class BakedModel implements IBakedModel
|
||||
{
|
||||
protected final List<BakedQuad> generalQuads;
|
||||
protected final List<List<BakedQuad>> faceQuads;
|
||||
protected final boolean ambientOcclusion;
|
||||
protected final boolean gui3d;
|
||||
protected final TextureAtlasSprite texture;
|
||||
protected final Transforms cameraTransforms;
|
||||
|
||||
public BakedModel(List<BakedQuad> generalQuadsIn, List<List<BakedQuad>> faceQuadsIn, boolean ambientOcclusionIn, boolean gui3dIn, TextureAtlasSprite textureIn, Transforms cameraTransformsIn)
|
||||
{
|
||||
this.generalQuads = generalQuadsIn;
|
||||
this.faceQuads = faceQuadsIn;
|
||||
this.ambientOcclusion = ambientOcclusionIn;
|
||||
this.gui3d = gui3dIn;
|
||||
this.texture = textureIn;
|
||||
this.cameraTransforms = cameraTransformsIn;
|
||||
}
|
||||
|
||||
public List<BakedQuad> getFaceQuads(Facing facing)
|
||||
{
|
||||
return this.faceQuads.get(facing.ordinal());
|
||||
}
|
||||
|
||||
public List<BakedQuad> getGeneralQuads()
|
||||
{
|
||||
return this.generalQuads;
|
||||
}
|
||||
|
||||
public boolean isAmbientOcclusion()
|
||||
{
|
||||
return this.ambientOcclusion;
|
||||
}
|
||||
|
||||
public boolean isGui3d()
|
||||
{
|
||||
return this.gui3d;
|
||||
}
|
||||
|
||||
public boolean isBuiltInRenderer()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
public TextureAtlasSprite getParticleTexture()
|
||||
{
|
||||
return this.texture;
|
||||
}
|
||||
|
||||
public Transforms getItemCameraTransforms()
|
||||
{
|
||||
return this.cameraTransforms;
|
||||
}
|
||||
|
||||
public static class Builder
|
||||
{
|
||||
private final List<BakedQuad> builderGeneralQuads;
|
||||
private final List<List<BakedQuad>> builderFaceQuads;
|
||||
private final boolean builderAmbientOcclusion;
|
||||
private TextureAtlasSprite builderTexture;
|
||||
private boolean builderGui3d;
|
||||
private Transforms builderCameraTransforms;
|
||||
|
||||
public Builder(ModelBlock model)
|
||||
{
|
||||
this(model.isAmbientOcclusion(), model.isGui3d(), model.getTransform());
|
||||
}
|
||||
|
||||
public Builder(IBakedModel bakedModel, TextureAtlasSprite texture)
|
||||
{
|
||||
this(bakedModel.isAmbientOcclusion(), bakedModel.isGui3d(), bakedModel.getItemCameraTransforms());
|
||||
this.builderTexture = bakedModel.getParticleTexture();
|
||||
|
||||
for (Facing enumfacing : Facing.values())
|
||||
{
|
||||
this.addFaceBreakingFours(bakedModel, texture, enumfacing);
|
||||
}
|
||||
|
||||
this.addGeneralBreakingFours(bakedModel, texture);
|
||||
}
|
||||
|
||||
private void addFaceBreakingFours(IBakedModel bakedModel, TextureAtlasSprite texture, Facing facing)
|
||||
{
|
||||
for (BakedQuad bakedquad : bakedModel.getFaceQuads(facing))
|
||||
{
|
||||
this.addFaceQuad(facing, new BreakingFour(bakedquad, texture));
|
||||
}
|
||||
}
|
||||
|
||||
private void addGeneralBreakingFours(IBakedModel p_177647_1_, TextureAtlasSprite texture)
|
||||
{
|
||||
for (BakedQuad bakedquad : p_177647_1_.getGeneralQuads())
|
||||
{
|
||||
this.addGeneralQuad(new BreakingFour(bakedquad, texture));
|
||||
}
|
||||
}
|
||||
|
||||
private Builder(boolean ambientOcclusion, boolean gui3d, Transforms cameraTransforms)
|
||||
{
|
||||
this.builderGeneralQuads = Lists.<BakedQuad>newArrayList();
|
||||
this.builderFaceQuads = new ArrayList<List<BakedQuad>>(6);
|
||||
|
||||
for (Facing enumfacing : Facing.values())
|
||||
{
|
||||
this.builderFaceQuads.add(Lists.<BakedQuad>newArrayList());
|
||||
}
|
||||
|
||||
this.builderAmbientOcclusion = ambientOcclusion;
|
||||
this.builderGui3d = gui3d;
|
||||
this.builderCameraTransforms = cameraTransforms;
|
||||
}
|
||||
|
||||
public BakedModel.Builder addFaceQuad(Facing facing, BakedQuad quad)
|
||||
{
|
||||
((List)this.builderFaceQuads.get(facing.ordinal())).add(quad);
|
||||
return this;
|
||||
}
|
||||
|
||||
public BakedModel.Builder addGeneralQuad(BakedQuad quad)
|
||||
{
|
||||
this.builderGeneralQuads.add(quad);
|
||||
return this;
|
||||
}
|
||||
|
||||
public BakedModel.Builder setTexture(TextureAtlasSprite texture)
|
||||
{
|
||||
this.builderTexture = texture;
|
||||
return this;
|
||||
}
|
||||
|
||||
public BakedModel makeBakedModel()
|
||||
{
|
||||
if (this.builderTexture == null)
|
||||
{
|
||||
throw new RuntimeException("Missing particle!");
|
||||
}
|
||||
else
|
||||
{
|
||||
return new BakedModel(this.builderGeneralQuads, this.builderFaceQuads, this.builderAmbientOcclusion, this.builderGui3d, this.builderTexture, this.builderCameraTransforms);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,52 +0,0 @@
|
|||
package client.renderer.blockmodel;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import client.renderer.texture.TextureAtlasSprite;
|
||||
import common.model.Transforms;
|
||||
import common.util.Facing;
|
||||
|
||||
public class BuiltInModel implements IBakedModel
|
||||
{
|
||||
private Transforms cameraTransforms;
|
||||
|
||||
public BuiltInModel(Transforms p_i46086_1_)
|
||||
{
|
||||
this.cameraTransforms = p_i46086_1_;
|
||||
}
|
||||
|
||||
public List<BakedQuad> getFaceQuads(Facing facing)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
public List<BakedQuad> getGeneralQuads()
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
public boolean isAmbientOcclusion()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean isGui3d()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
public boolean isBuiltInRenderer()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
public TextureAtlasSprite getParticleTexture()
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
public Transforms getItemCameraTransforms()
|
||||
{
|
||||
return this.cameraTransforms;
|
||||
}
|
||||
}
|
|
@ -1,24 +0,0 @@
|
|||
package client.renderer.blockmodel;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import client.renderer.texture.TextureAtlasSprite;
|
||||
import common.model.Transforms;
|
||||
import common.util.Facing;
|
||||
|
||||
public interface IBakedModel
|
||||
{
|
||||
List<BakedQuad> getFaceQuads(Facing facing);
|
||||
|
||||
List<BakedQuad> getGeneralQuads();
|
||||
|
||||
boolean isAmbientOcclusion();
|
||||
|
||||
boolean isGui3d();
|
||||
|
||||
boolean isBuiltInRenderer();
|
||||
|
||||
TextureAtlasSprite getParticleTexture();
|
||||
|
||||
Transforms getItemCameraTransforms();
|
||||
}
|
|
@ -1,36 +0,0 @@
|
|||
package client.renderer.model;
|
||||
|
||||
import common.entity.Entity;
|
||||
|
||||
public class ModelHumanoidHead extends ModelHead
|
||||
{
|
||||
private final ModelRenderer head = new ModelRenderer(this, 32, 0);
|
||||
|
||||
public ModelHumanoidHead()
|
||||
{
|
||||
super(0, 0, 64, 64);
|
||||
this.head.addBox(-4.0F, -8.0F, -4.0F, 8, 8, 8, 0.25F);
|
||||
this.head.setRotationPoint(0.0F, 0.0F, 0.0F);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the models various rotation angles then renders the model.
|
||||
*/
|
||||
public void render(Entity entityIn, float p_78088_2_, float p_78088_3_, float p_78088_4_, float p_78088_5_, float p_78088_6_, float scale)
|
||||
{
|
||||
super.render(entityIn, p_78088_2_, p_78088_3_, p_78088_4_, p_78088_5_, p_78088_6_, scale);
|
||||
this.head.render(scale);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the model's various rotation angles. For bipeds, par1 and par2 are used for animating the movement of arms
|
||||
* and legs, where par1 represents the time(so that arms and legs swing back and forth) and par2 represents how
|
||||
* "far" arms and legs can swing at most.
|
||||
*/
|
||||
public void setRotationAngles(float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scaleFactor, Entity entityIn)
|
||||
{
|
||||
super.setRotationAngles(limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scaleFactor, entityIn);
|
||||
this.head.rotateAngleY = this.mainHead.rotateAngleY;
|
||||
this.head.rotateAngleX = this.mainHead.rotateAngleX;
|
||||
}
|
||||
}
|
|
@ -1,76 +0,0 @@
|
|||
package client.renderer.tileentity;
|
||||
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
import client.renderer.GlState;
|
||||
import common.block.Block;
|
||||
import common.init.Blocks;
|
||||
import common.init.Items;
|
||||
import common.item.ItemStack;
|
||||
import common.tileentity.TileEntityBanner;
|
||||
import common.tileentity.TileEntityChest;
|
||||
import common.tileentity.TileEntitySkull;
|
||||
import common.util.Facing;
|
||||
|
||||
public class TileEntityItemStackRenderer
|
||||
{
|
||||
public static TileEntityItemStackRenderer instance = new TileEntityItemStackRenderer();
|
||||
private TileEntityChest field_147717_b = new TileEntityChest(0);
|
||||
private TileEntityChest field_147718_c = new TileEntityChest(1);
|
||||
// private TileEntityWarpChest warpChest = new TileEntityWarpChest();
|
||||
private TileEntityBanner banner = new TileEntityBanner();
|
||||
private TileEntitySkull skull = new TileEntitySkull();
|
||||
|
||||
public void renderByItem(ItemStack itemStackIn)
|
||||
{
|
||||
if (itemStackIn.getItem() == Items.banner)
|
||||
{
|
||||
this.banner.setItemValues(itemStackIn);
|
||||
TileEntityRendererDispatcher.instance.renderTileEntityAt(this.banner, 0.0D, 0.0D, 0.0D, 0.0F);
|
||||
}
|
||||
else if (itemStackIn.getItem() == Items.skull)
|
||||
{
|
||||
// String user = null;
|
||||
//
|
||||
// if (itemStackIn.hasTagCompound())
|
||||
// {
|
||||
// NBTTagCompound nbttagcompound = itemStackIn.getTagCompound();
|
||||
//
|
||||
// if (nbttagcompound.hasKey("SkullOwner", 8) && nbttagcompound.getString("SkullOwner").length() > 0)
|
||||
// {
|
||||
// user = nbttagcompound.getString("SkullOwner");
|
||||
// }
|
||||
// }
|
||||
|
||||
if (TileEntitySkullRenderer.instance != null)
|
||||
{
|
||||
GL11.glPushMatrix();
|
||||
GL11.glTranslatef(-0.5F, 0.0F, -0.5F);
|
||||
GL11.glScalef(2.0F, 2.0F, 2.0F);
|
||||
boolean flag = GlState.isCullEnabled();
|
||||
GlState.disableCull();
|
||||
TileEntitySkullRenderer.instance.renderSkull(0.0F, 0.0F, 0.0F, Facing.UP, 0.0F, -1);
|
||||
if(flag)
|
||||
GlState.enableCull();
|
||||
GL11.glPopMatrix();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Block block = itemStackIn.getItem().getBlock();
|
||||
|
||||
// if (block == Blocks.warp_chest)
|
||||
// {
|
||||
// TileEntityRendererDispatcher.instance.renderTileEntityAt(this.warpChest, 0.0D, 0.0D, 0.0D, 0.0F);
|
||||
// }
|
||||
if (block == Blocks.trapped_chest)
|
||||
{
|
||||
TileEntityRendererDispatcher.instance.renderTileEntityAt(this.field_147718_c, 0.0D, 0.0D, 0.0D, 0.0F);
|
||||
}
|
||||
else
|
||||
{
|
||||
TileEntityRendererDispatcher.instance.renderTileEntityAt(this.field_147717_b, 0.0D, 0.0D, 0.0D, 0.0F);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,38 +0,0 @@
|
|||
package client.renderer.tileentity;
|
||||
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
import client.Client;
|
||||
import common.entity.Entity;
|
||||
import common.tileentity.TileEntityMobSpawner;
|
||||
|
||||
public class TileEntityMobSpawnerRenderer extends TileEntitySpecialRenderer<TileEntityMobSpawner>
|
||||
{
|
||||
public void renderTileEntityAt(TileEntityMobSpawner te, double x, double y, double z, float partialTicks, int destroyStage)
|
||||
{
|
||||
GL11.glPushMatrix();
|
||||
GL11.glTranslatef((float)x + 0.5F, (float)y, (float)z + 0.5F);
|
||||
renderMob(te, x, y, z, partialTicks);
|
||||
GL11.glPopMatrix();
|
||||
}
|
||||
|
||||
/**
|
||||
* Render the mob inside the mob spawner.
|
||||
*/
|
||||
public static void renderMob(TileEntityMobSpawner mobSpawnerLogic, double posX, double posY, double posZ, float partialTicks)
|
||||
{
|
||||
Entity entity = mobSpawnerLogic.createRenderEntity(mobSpawnerLogic.getWorld());
|
||||
|
||||
if (entity != null)
|
||||
{
|
||||
float f = 0.4375F;
|
||||
GL11.glTranslatef(0.0F, 0.4F, 0.0F);
|
||||
GL11.glRotatef((float)(mobSpawnerLogic.getPrevMobRotation() + (mobSpawnerLogic.getMobRotation() - mobSpawnerLogic.getPrevMobRotation()) * (double)partialTicks) * 10.0F, 0.0F, 1.0F, 0.0F);
|
||||
GL11.glRotatef(-30.0F, 1.0F, 0.0F, 0.0F);
|
||||
GL11.glTranslatef(0.0F, -0.4F, 0.0F);
|
||||
GL11.glScalef(f, f, f);
|
||||
entity.setLocationAndAngles(posX, posY, posZ, 0.0F, 0.0F);
|
||||
Client.CLIENT.getRenderManager().renderEntity(entity, 0.0D, 0.0D, 0.0D, partialTicks);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,124 +0,0 @@
|
|||
package client.renderer.tileentity;
|
||||
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
import client.renderer.GlState;
|
||||
import client.renderer.model.ModelHumanoidHead;
|
||||
import common.tileentity.TileEntitySkull;
|
||||
import common.util.Facing;
|
||||
|
||||
|
||||
public class TileEntitySkullRenderer extends TileEntitySpecialRenderer<TileEntitySkull>
|
||||
{
|
||||
private static final String TEXTURE_SKULL = "textures/entity/skull.png";
|
||||
public static TileEntitySkullRenderer instance;
|
||||
|
||||
private final ModelHumanoidHead humanoidHead = new ModelHumanoidHead();
|
||||
|
||||
public void renderTileEntityAt(TileEntitySkull te, double x, double y, double z, float partialTicks, int destroyStage)
|
||||
{
|
||||
Facing enumfacing = Facing.getFront(te.getBlockMetadata() & 7);
|
||||
this.renderSkull((float)x, (float)y, (float)z, enumfacing, (float)(te.getSkullRotation() * 360) / 16.0F, destroyStage);
|
||||
}
|
||||
|
||||
public void setRendererDispatcher(TileEntityRendererDispatcher rendererDispatcherIn)
|
||||
{
|
||||
super.setRendererDispatcher(rendererDispatcherIn);
|
||||
instance = this;
|
||||
}
|
||||
|
||||
public void renderSkull(float x, float y, float z, Facing dir, float rot, int destroyStage)
|
||||
{
|
||||
// ModelBase modelbase = this.skeletonHead;
|
||||
|
||||
if (destroyStage >= 0)
|
||||
{
|
||||
this.bindTexture(DESTROY_STAGES[destroyStage]);
|
||||
GL11.glMatrixMode(GL11.GL_TEXTURE);
|
||||
GL11.glPushMatrix();
|
||||
GL11.glScalef(4.0F, 2.0F, 1.0F);
|
||||
GL11.glTranslatef(0.0625F, 0.0625F, 0.0625F);
|
||||
GL11.glMatrixMode(GL11.GL_MODELVIEW);
|
||||
}
|
||||
else
|
||||
{
|
||||
// switch (p_180543_6_)
|
||||
// {
|
||||
// case 0:
|
||||
// default:
|
||||
// this.bindTexture(SKELETON_TEXTURES);
|
||||
// break;
|
||||
//
|
||||
// case 1:
|
||||
// this.bindTexture(WITHER_SKELETON_TEXTURES);
|
||||
// break;
|
||||
//
|
||||
// case 2:
|
||||
// this.bindTexture(ZOMBIE_TEXTURES);
|
||||
// modelbase = this.humanoidHead;
|
||||
// break;
|
||||
//
|
||||
// case 3:
|
||||
// modelbase = this.humanoidHead;
|
||||
// String tex = TEXTURE_SKULL; // EntitySkinManager.TEXTURE_DEF;
|
||||
|
||||
// if (user != null && EntityTexManager.getModel(user) == ModelType.HUMANOID)
|
||||
// {
|
||||
// tex = EntityTexManager.getSkin(user, ModelType.HUMANOID);
|
||||
// }
|
||||
|
||||
this.bindTexture(TEXTURE_SKULL);
|
||||
// break;
|
||||
//
|
||||
// case 4:
|
||||
// this.bindTexture(CREEPER_TEXTURES);
|
||||
// }
|
||||
}
|
||||
|
||||
GL11.glPushMatrix();
|
||||
GlState.disableCull();
|
||||
|
||||
if (dir != Facing.UP)
|
||||
{
|
||||
switch (dir)
|
||||
{
|
||||
case NORTH:
|
||||
GL11.glTranslatef(x + 0.5F, y + 0.25F, z + 0.74F);
|
||||
break;
|
||||
|
||||
case SOUTH:
|
||||
GL11.glTranslatef(x + 0.5F, y + 0.25F, z + 0.26F);
|
||||
rot = 180.0F;
|
||||
break;
|
||||
|
||||
case WEST:
|
||||
GL11.glTranslatef(x + 0.74F, y + 0.25F, z + 0.5F);
|
||||
rot = 270.0F;
|
||||
break;
|
||||
|
||||
case EAST:
|
||||
default:
|
||||
GL11.glTranslatef(x + 0.26F, y + 0.25F, z + 0.5F);
|
||||
rot = 90.0F;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
GL11.glTranslatef(x + 0.5F, y, z + 0.5F);
|
||||
}
|
||||
|
||||
float f = 0.0625F;
|
||||
GlState.enableRescaleNormal();
|
||||
GL11.glScalef(-1.0F, -1.0F, 1.0F);
|
||||
GlState.enableAlpha();
|
||||
this.humanoidHead.render(null, 0.0F, 0.0F, 0.0F, rot, 0.0F, f);
|
||||
GL11.glPopMatrix();
|
||||
|
||||
if (destroyStage >= 0)
|
||||
{
|
||||
GL11.glMatrixMode(GL11.GL_TEXTURE);
|
||||
GL11.glPopMatrix();
|
||||
GL11.glMatrixMode(GL11.GL_MODELVIEW);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,13 +0,0 @@
|
|||
package client.window;
|
||||
|
||||
public class WindowEvent {
|
||||
public final WindowAction action;
|
||||
public final int param1;
|
||||
public final int param2;
|
||||
|
||||
public WindowEvent(WindowAction action, int p1, int p2) {
|
||||
this.action = action;
|
||||
this.param1 = p1;
|
||||
this.param2 = p2;
|
||||
}
|
||||
}
|
|
@ -1,102 +0,0 @@
|
|||
package client.world;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.function.Predicate;
|
||||
|
||||
import common.block.Block;
|
||||
import common.entity.Entity;
|
||||
import common.init.Blocks;
|
||||
import common.tileentity.TileEntity;
|
||||
import common.util.BlockPos;
|
||||
import common.util.BoundingBox;
|
||||
import common.world.Chunk;
|
||||
import common.world.LightType;
|
||||
|
||||
public class EmptyChunk extends Chunk {
|
||||
public EmptyChunk(WorldClient world) {
|
||||
super(world, 0, 0);
|
||||
}
|
||||
|
||||
public int getHeight(int x, int z) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
public void genHeights() {
|
||||
}
|
||||
|
||||
public void genSkyLight() {
|
||||
}
|
||||
|
||||
public Block getBlock(BlockPos pos) {
|
||||
return Blocks.air;
|
||||
}
|
||||
|
||||
public int getOpacity(BlockPos pos) {
|
||||
return 255;
|
||||
}
|
||||
|
||||
public int getMeta(BlockPos pos) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
public int getLight(LightType type, BlockPos pos) {
|
||||
return type.defValue;
|
||||
}
|
||||
|
||||
public void setLight(LightType type, BlockPos pos, int value) {
|
||||
}
|
||||
|
||||
public int getLightSub(BlockPos pos, int amount) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
public void addEntity(Entity entity) {
|
||||
}
|
||||
|
||||
public void removeEntity(Entity entity) {
|
||||
}
|
||||
|
||||
public boolean canSeeSky(BlockPos pos) {
|
||||
return false;
|
||||
}
|
||||
|
||||
public TileEntity getTileEntity(BlockPos pos, TileEntity.EnumCreateEntityType type) {
|
||||
return null;
|
||||
}
|
||||
|
||||
public void addTileEntity(TileEntity tile) {
|
||||
}
|
||||
|
||||
public void addTileEntity(BlockPos pos, TileEntity tile) {
|
||||
}
|
||||
|
||||
public void removeTileEntity(BlockPos pos) {
|
||||
}
|
||||
|
||||
public void onChunkLoad() {
|
||||
}
|
||||
|
||||
public void onChunkUnload() {
|
||||
}
|
||||
|
||||
public void setModified() {
|
||||
}
|
||||
|
||||
public void getEntities(Entity exclude, BoundingBox bb, List<Entity> list, Predicate<? super Entity> pred) {
|
||||
}
|
||||
|
||||
public <T extends Entity> void getEntities(Class<? extends T> clazz, BoundingBox bb, List<T> list, Predicate<? super T> pred) {
|
||||
}
|
||||
|
||||
public boolean isDirty() {
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean isEmpty() {
|
||||
return true;
|
||||
}
|
||||
|
||||
public boolean isEmpty(int bottom, int top) {
|
||||
return true;
|
||||
}
|
||||
}
|
File diff suppressed because it is too large
Load diff
|
@ -11,7 +11,6 @@ import javax.sound.sampled.DataLine.Info;
|
|||
import common.collect.Lists;
|
||||
import common.log.Log;
|
||||
|
||||
import javax.sound.sampled.LineUnavailableException;
|
||||
import javax.sound.sampled.SourceDataLine;
|
||||
|
||||
public class AudioInterface implements Runnable {
|
||||
|
@ -138,12 +137,12 @@ public class AudioInterface implements Runnable {
|
|||
|
||||
public void run() {
|
||||
AudioFormat format = new AudioFormat(Encoding.PCM_SIGNED, 48000, 16, 2, 2 * 2, 48000, false);
|
||||
Info info = new Info(SourceDataLine.class, format, this.devbufsize);
|
||||
Info info = new Info(SourceDataLine.class, format, this.devbufsize == 0 ? AudioSystem.NOT_SPECIFIED : this.devbufsize);
|
||||
try {
|
||||
this.line = (SourceDataLine)AudioSystem.getLine(info);
|
||||
this.line.open(format, this.devbufsize);
|
||||
this.line.open(format, this.devbufsize == 0 ? AudioSystem.NOT_SPECIFIED : this.devbufsize);
|
||||
}
|
||||
catch(LineUnavailableException e) {
|
||||
catch(Exception e) {
|
||||
this.line = null;
|
||||
Log.SOUND.error(e, "Konnte Audiogerät nicht öffnen");
|
||||
}
|
|
@ -11,6 +11,7 @@ import java.util.Map;
|
|||
import java.util.Map.Entry;
|
||||
|
||||
import client.Client;
|
||||
import client.util.FileUtils;
|
||||
import common.collect.BiMap;
|
||||
import common.collect.HashBiMap;
|
||||
import common.collect.Lists;
|
||||
|
@ -22,7 +23,6 @@ import common.rng.Random;
|
|||
import common.sound.MovingSound;
|
||||
import common.sound.Sound;
|
||||
import common.util.ExtMath;
|
||||
import common.util.FileUtils;
|
||||
|
||||
public class SoundManager {
|
||||
private class Source {
|
||||
|
@ -238,8 +238,8 @@ public class SoundManager {
|
|||
this.sources.put(s, new Source(getBuffer(sound.getSoundLocation()), Volume.getByType(sound.getChannelType()), sound.canRepeat(), s, sound.getXPosF(), sound.getYPosF(), sound.getZPosF(), sound.getAttenuationType(), attn, volume));
|
||||
this.playingSoundsStopTime.put(s, this.playTime + 20);
|
||||
this.playingSounds.put(s, sound);
|
||||
if (sound instanceof MovingSound)
|
||||
this.tickableSounds.add((MovingSound)sound);
|
||||
if (sound instanceof MovingSound moving)
|
||||
this.tickableSounds.add(moving);
|
||||
}
|
||||
}
|
||||
|
|
@ -8,13 +8,14 @@ import org.lwjgl.opengl.GL11;
|
|||
|
||||
import client.renderer.GlState;
|
||||
import client.renderer.texture.TextureUtil;
|
||||
import client.util.FileUtils;
|
||||
import common.log.Log;
|
||||
import common.util.FileUtils;
|
||||
|
||||
public class Font {
|
||||
public static final FontChar[] SIZES = new FontChar[256];
|
||||
public static final int XGLYPH = 12;
|
||||
public static final int YGLYPH = 18;
|
||||
|
||||
public static int XGLYPH = 12;
|
||||
public static int YGLYPH = 14;
|
||||
|
||||
private static int texture;
|
||||
|
||||
|
@ -72,10 +73,12 @@ public class Font {
|
|||
}
|
||||
}
|
||||
|
||||
public static void load() {
|
||||
public static void load(boolean tiny) {
|
||||
XGLYPH = tiny ? 6 : 12;
|
||||
YGLYPH = tiny ? 7 : 14;
|
||||
BufferedImage img = null;
|
||||
try {
|
||||
img = TextureUtil.readImage(FileUtils.getResource("textures/font.png"));
|
||||
img = TextureUtil.readImage(FileUtils.getResource("textures/font" + (tiny ? "_tiny" : "") + ".png"));
|
||||
}
|
||||
catch(FileNotFoundException e) {
|
||||
Log.IO.error("Konnte Font-Textur nicht laden: Datei nicht vorhanden");
|
|
@ -16,7 +16,7 @@ import client.window.Keysym;
|
|||
import common.collect.Lists;
|
||||
|
||||
public abstract class Gui {
|
||||
public static final String DIRT_BACKGROUND = "textures/background.png";
|
||||
public static final String BACKGROUND = "textures/background.png";
|
||||
public static final int HOVER_COLOR = 0x288080ff;
|
||||
public static final int PRESS_COLOR = 0x30afafff;
|
||||
|
||||
|
@ -176,8 +176,8 @@ public abstract class Gui {
|
|||
this.min_y = Math.min(this.min_y, elem.getY());
|
||||
this.max_x = Math.max(this.max_x, elem.getX() + elem.getWidth());
|
||||
this.max_y = Math.max(this.max_y, elem.getY() + elem.getHeight());
|
||||
if(elem instanceof Dropdown)
|
||||
this.add(((Dropdown)elem).getHandle());
|
||||
if(elem instanceof Dropdown drop)
|
||||
this.add(drop.getHandle());
|
||||
return elem;
|
||||
}
|
||||
|
||||
|
@ -307,7 +307,7 @@ public abstract class Gui {
|
|||
Drawing.drawGradient(0, 0, this.gm.fb_x, this.gm.fb_y, 0xc0101010, 0xd0101010);
|
||||
}
|
||||
else {
|
||||
Drawing.drawScaled(this.gm, DIRT_BACKGROUND);
|
||||
Drawing.drawScaled(this.gm, BACKGROUND);
|
||||
}
|
||||
}
|
||||
|
|
@ -3,19 +3,20 @@ package client.gui;
|
|||
import client.gui.element.ActButton;
|
||||
import client.gui.element.ButtonCallback;
|
||||
import client.gui.element.Label;
|
||||
import client.gui.element.MultiLabel;
|
||||
import client.gui.element.PressType;
|
||||
import client.gui.element.TransparentArea;
|
||||
|
||||
public class GuiConfirm extends Gui implements ButtonCallback {
|
||||
public static interface Callback {
|
||||
void confirm(boolean confirmed);
|
||||
}
|
||||
|
||||
protected Callback callback;
|
||||
protected String messageLine1;
|
||||
private String messageLine2;
|
||||
protected String confirmButtonText;
|
||||
protected String cancelButtonText;
|
||||
private final Callback callback;
|
||||
private final String messageLine1;
|
||||
private final String messageLine2;
|
||||
private final String confirmButtonText;
|
||||
private final String cancelButtonText;
|
||||
|
||||
private ActButton confirmBtn;
|
||||
private ActButton cancelBtn;
|
||||
|
||||
|
@ -28,10 +29,10 @@ public class GuiConfirm extends Gui implements ButtonCallback {
|
|||
}
|
||||
|
||||
public void init(int width, int height) {
|
||||
this.add(new Label(0, 0, 500, 24, this.messageLine1, true));
|
||||
this.add(new TransparentArea(0, 80, 500, 300, this.messageLine2, this.gm.world != null && !this.gm.charEditor));
|
||||
this.confirmBtn = this.add(new ActButton(48, 500, 200, 24, this, this.confirmButtonText));
|
||||
this.cancelBtn = this.add(new ActButton(252, 500, 200, 24, this, this.cancelButtonText));
|
||||
this.add(new Label(0, 0, 700, 0, this.messageLine1));
|
||||
this.add(new MultiLabel(0, 40, 700, 300, this.messageLine2, true));
|
||||
this.confirmBtn = this.add(new ActButton(100, 400, 245, 0, this, this.confirmButtonText));
|
||||
this.cancelBtn = this.add(new ActButton(355, 400, 245, 0, this, this.cancelButtonText));
|
||||
this.shift();
|
||||
}
|
||||
|
379
client/src/main/java/client/gui/GuiConnect.java
Normal file
379
client/src/main/java/client/gui/GuiConnect.java
Normal file
|
@ -0,0 +1,379 @@
|
|||
package client.gui;
|
||||
|
||||
import java.io.File;
|
||||
import java.security.KeyPair;
|
||||
import java.security.PrivateKey;
|
||||
import java.security.PublicKey;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Collections;
|
||||
import java.util.Date;
|
||||
|
||||
import client.gui.element.ActButton;
|
||||
import client.gui.element.ButtonCallback;
|
||||
import client.gui.element.GuiList;
|
||||
import client.gui.element.ListEntry;
|
||||
import client.gui.element.NavButton;
|
||||
import client.gui.element.PressType;
|
||||
import client.renderer.Drawing;
|
||||
import client.util.FileUtils;
|
||||
import common.color.TextColor;
|
||||
import common.log.Log;
|
||||
import common.network.IPlayer;
|
||||
import common.util.EncryptUtil;
|
||||
import common.util.Pair;
|
||||
import common.util.Util;
|
||||
|
||||
public class GuiConnect extends GuiList<GuiConnect.ServerInfo> implements ButtonCallback {
|
||||
public class ServerInfo implements Comparable<ServerInfo>, ListEntry {
|
||||
private final boolean direct;
|
||||
|
||||
private String name;
|
||||
private String address;
|
||||
private int port;
|
||||
private String user;
|
||||
private String password;
|
||||
private String access;
|
||||
private KeyPair keypair;
|
||||
private String keyDigest;
|
||||
private PublicKey serverKey;
|
||||
private String serverDigest;
|
||||
private boolean enforceEncryption;
|
||||
private long lastConnected;
|
||||
|
||||
public ServerInfo(String address, int port, String user, String password, String access) {
|
||||
this.direct = true;
|
||||
this.name = DIRECT_NAME;
|
||||
this.address = address;
|
||||
this.port = port;
|
||||
this.user = user;
|
||||
this.password = password;
|
||||
this.access = access;
|
||||
this.lastConnected = -1L;
|
||||
}
|
||||
|
||||
public ServerInfo(String name, String address, int port, String user, String password, String access, KeyPair keypair, long lastConnected, PublicKey serverKey, boolean enforceEnc) {
|
||||
this.direct = false;
|
||||
this.name = name;
|
||||
this.address = address;
|
||||
this.port = port;
|
||||
this.user = user;
|
||||
this.password = password;
|
||||
this.access = access;
|
||||
this.keypair = keypair;
|
||||
this.lastConnected = lastConnected;
|
||||
this.serverKey = serverKey;
|
||||
this.enforceEncryption = enforceEnc;
|
||||
if(this.keypair != null)
|
||||
this.keyDigest = EncryptUtil.getXorSha512Hash(this.keypair.getPublic().getEncoded());
|
||||
if(this.serverKey != null)
|
||||
this.serverDigest = EncryptUtil.getXorSha512Hash(this.serverKey.getEncoded());
|
||||
}
|
||||
|
||||
public boolean isDirect() {
|
||||
return this.direct;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return this.name;
|
||||
}
|
||||
|
||||
public String getAddress() {
|
||||
return this.address;
|
||||
}
|
||||
|
||||
public int getPort() {
|
||||
return this.port;
|
||||
}
|
||||
|
||||
public String getUser() {
|
||||
return this.user;
|
||||
}
|
||||
|
||||
public String getPassword() {
|
||||
return this.password;
|
||||
}
|
||||
|
||||
public String getAccess() {
|
||||
return this.access;
|
||||
}
|
||||
|
||||
public KeyPair getKeypair() {
|
||||
return this.keypair;
|
||||
}
|
||||
|
||||
public PublicKey getServerKey() {
|
||||
return this.serverKey;
|
||||
}
|
||||
|
||||
public boolean requiresEncryption() {
|
||||
return this.enforceEncryption;
|
||||
}
|
||||
|
||||
public long getLastConnected() {
|
||||
return this.lastConnected;
|
||||
}
|
||||
|
||||
public void setData(String name, String address, int port, String user, String password, String access, KeyPair keypair, PublicKey serverKey, boolean encryptReq) {
|
||||
this.name = name;
|
||||
this.address = address;
|
||||
this.port = port;
|
||||
this.user = user;
|
||||
this.password = password;
|
||||
this.access = access;
|
||||
this.keypair = keypair;
|
||||
this.serverKey = serverKey;
|
||||
this.enforceEncryption = encryptReq;
|
||||
this.keyDigest = this.keypair != null ? EncryptUtil.getXorSha512Hash(this.keypair.getPublic().getEncoded()) : null;
|
||||
this.serverDigest = this.serverKey != null ? EncryptUtil.getXorSha512Hash(this.serverKey.getEncoded()) : null;
|
||||
}
|
||||
|
||||
public void setLastConnected() {
|
||||
this.lastConnected = System.currentTimeMillis();
|
||||
}
|
||||
|
||||
public void setServerKey(PublicKey key) {
|
||||
this.serverKey = key;
|
||||
this.serverDigest = this.serverKey != null ? EncryptUtil.getXorSha512Hash(this.serverKey.getEncoded()) : null;
|
||||
}
|
||||
|
||||
public int compareTo(ServerInfo comp) {
|
||||
return this.lastConnected < comp.lastConnected ? 1 : (this.lastConnected > comp.lastConnected ? -1 : this.name.compareTo(comp.name));
|
||||
}
|
||||
|
||||
public void select(boolean isDoubleClick, int mouseX, int mouseY) {
|
||||
GuiConnect.this.selectButton.enabled = true;
|
||||
GuiConnect.this.deleteButton.enabled = true;
|
||||
GuiConnect.this.editButton.enabled = true;
|
||||
GuiConnect.this.copyButton.enabled = true;
|
||||
|
||||
if(isDoubleClick) {
|
||||
GuiConnect.this.use(GuiConnect.this.selectButton, PressType.PRIMARY);
|
||||
}
|
||||
}
|
||||
|
||||
public void draw(int x, int y, int width, int height, int mouseXIn, int mouseYIn, boolean hover) {
|
||||
Drawing.drawText(this.name + TextColor.GRAY + " - " + TextColor.RESET + this.user, x + 2, y, 0xffffffff);
|
||||
if(this.keypair != null || !this.password.isEmpty())
|
||||
Drawing.drawTextRight(
|
||||
(this.keypair != null ? "Pubkey " + this.keyDigest : "") + (this.keypair != null && !this.password.isEmpty() ? " + " : "") + (!this.password.isEmpty() ? "Passwort" : ""),
|
||||
x + width - 2, y, 0xffffffff);
|
||||
Drawing.drawText(this.address + TextColor.GRAY + " Port " + TextColor.RESET + this.port + (this.enforceEncryption ? TextColor.GRAY + ", nur verschlüsselt" : ""),
|
||||
x + 2, y + height - Font.YGLYPH * 2, 0xffb0b0b0);
|
||||
if(!this.access.isEmpty())
|
||||
Drawing.drawTextRight((this.keypair != null || !this.password.isEmpty() ? "+ " : "") + "Server-Passwort", x + width - 2, y + height - Font.YGLYPH * 2, 0xffb0b0b0);
|
||||
Drawing.drawText("Zuletzt verbunden: " + (this.lastConnected == -1L ? "nie" : DATE_FORMAT.format(new Date(this.lastConnected))), x + 2, y + height - Font.YGLYPH, 0xffb0b0b0);
|
||||
if(this.serverDigest != null)
|
||||
Drawing.drawTextRight("Server-ID: " + this.serverDigest, x + width - 2, y + height - Font.YGLYPH, 0xffb0b0b0);
|
||||
}
|
||||
}
|
||||
|
||||
public static final GuiConnect INSTANCE = new GuiConnect();
|
||||
private static final String DIRECT_NAME = "<Direktverbindung>";
|
||||
private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss");
|
||||
private static final File SERVERS_FILE = new File("servers.cfg");
|
||||
|
||||
private ActButton deleteButton;
|
||||
private ActButton selectButton;
|
||||
private ActButton copyButton;
|
||||
private ActButton editButton;
|
||||
private ActButton createButton;
|
||||
|
||||
private GuiConnect() {
|
||||
}
|
||||
|
||||
public void init(int width, int height) {
|
||||
super.init(width, height);
|
||||
this.setDimensions(width, height, 32, height - 32);
|
||||
this.elements.clear();
|
||||
if(SERVERS_FILE.exists()) {
|
||||
try {
|
||||
String[] lines = FileUtils.read(SERVERS_FILE).split("\n");
|
||||
String name = "";
|
||||
String address = "";
|
||||
int port = -1;
|
||||
String user = "";
|
||||
String password = "";
|
||||
String access = "";
|
||||
byte[] key = null;
|
||||
byte[] pubkey = null;
|
||||
byte[] serverKey = null;
|
||||
boolean enforceEnc = false;
|
||||
long time = -1L;
|
||||
for(int z = 0; z <= lines.length; z++) {
|
||||
String line = z == lines.length ? null : lines[z];
|
||||
if(line == null || (line.startsWith("[") && line.endsWith("]"))) {
|
||||
if(!name.isEmpty() && !address.isEmpty() && !user.isEmpty() && user.length() < IPlayer.MAX_USER_LENGTH && IPlayer.isValidUser(user) &&
|
||||
password.length() < IPlayer.MAX_PASS_LENGTH && access.length() < IPlayer.MAX_PASS_LENGTH && address.length() < 128 && name.length() < 128 &&
|
||||
port >= 1024 && port <= 32767 && (password.length() >= 8 || password.isEmpty()) && (access.length() >= 8 || access.isEmpty()) && !this.isNameTaken(name)) {
|
||||
PrivateKey priv = key == null ? null : EncryptUtil.decodePrivateKey(key);
|
||||
PublicKey pub = pubkey == null ? null : EncryptUtil.decodePublicKey(pubkey);
|
||||
PublicKey serv = serverKey == null ? null : EncryptUtil.decodePublicKey(serverKey);
|
||||
this.elements.add(new ServerInfo(name, address, port, user, password, access, priv == null || pub == null ? null : new KeyPair(pub, priv), time, serv, enforceEnc));
|
||||
}
|
||||
if(line != null) {
|
||||
address = "";
|
||||
port = -1;
|
||||
user = "";
|
||||
password = "";
|
||||
access = "";
|
||||
key = null;
|
||||
pubkey = null;
|
||||
serverKey = null;
|
||||
enforceEnc = false;
|
||||
time = -1L;
|
||||
name = line.substring(1, line.length() - 1);
|
||||
}
|
||||
}
|
||||
else {
|
||||
Pair<String, String> value = Util.getKeyValue(line);
|
||||
if(value.first().equals("address"))
|
||||
address = value.second();
|
||||
else if(value.first().equals("port"))
|
||||
try {
|
||||
port = Integer.parseInt(value.second());
|
||||
}
|
||||
catch(NumberFormatException e) {
|
||||
}
|
||||
else if(value.first().equals("user"))
|
||||
user = value.second();
|
||||
else if(value.first().equals("password"))
|
||||
password = value.second();
|
||||
else if(value.first().equals("access"))
|
||||
access = value.second();
|
||||
else if(value.first().equals("connected"))
|
||||
try {
|
||||
time = Long.parseLong(value.second());
|
||||
}
|
||||
catch(NumberFormatException e) {
|
||||
}
|
||||
else if(value.first().equals("encryption_enforced"))
|
||||
enforceEnc = true;
|
||||
else if(value.first().equals("serverkey"))
|
||||
serverKey = Util.fromHexString(value.second());
|
||||
else if(value.first().equals("key"))
|
||||
key = Util.fromHexString(value.second());
|
||||
else if(value.first().equals("pubkey"))
|
||||
pubkey = Util.fromHexString(value.second());
|
||||
}
|
||||
}
|
||||
Collections.sort(this.elements);
|
||||
}
|
||||
catch(Exception e) {
|
||||
Log.IO.error("Konnte Serverliste nicht laden", e);
|
||||
this.elements.clear();
|
||||
}
|
||||
}
|
||||
|
||||
this.add(this.selectButton = new ActButton(width / 2 - 379, height - 30, 150, 0, this, "Verbinden"));
|
||||
this.add(this.createButton = new ActButton(width - 202, 12, 200, 0, this, "Server hinzufügen ..."));
|
||||
this.add(this.deleteButton = new ActButton(width / 2 - 75, height - 30, 150, 0, this, "Löschen"));
|
||||
this.add(this.editButton = new ActButton(width / 2 + 77, height - 30, 150, 0, this, "Bearbeiten"));
|
||||
this.add(this.copyButton = new ActButton(width / 2 - 227, height - 30, 150, 0, this, "Kopieren"));
|
||||
this.add(new NavButton(width / 2 + 229, height - 30, 150, 0, GuiMenu.INSTANCE, "Abbrechen"));
|
||||
|
||||
this.selectButton.enabled = false;
|
||||
this.deleteButton.enabled = false;
|
||||
this.editButton.enabled = false;
|
||||
this.copyButton.enabled = false;
|
||||
}
|
||||
|
||||
public void onGuiClosed() {
|
||||
this.save();
|
||||
}
|
||||
|
||||
public void applyServer(ServerInfo server) {
|
||||
if(this.selectedElement < 0)
|
||||
this.elements.add(server);
|
||||
this.save();
|
||||
this.gm.displayGuiScreen(this);
|
||||
}
|
||||
|
||||
public boolean isNameTaken(String name) {
|
||||
for(int z = 0; z < this.elements.size(); z++) {
|
||||
if(this.selectedElement != z && this.elements.get(z).getName().equals(name))
|
||||
return true;
|
||||
}
|
||||
return DIRECT_NAME.equals(name);
|
||||
}
|
||||
|
||||
public void editServer(ServerInfo server) {
|
||||
if(!server.isDirect())
|
||||
this.save();
|
||||
}
|
||||
|
||||
public void connect(String address, int port, String user, String pass, String access) {
|
||||
this.gm.connect(new ServerInfo(address, port, user, pass, access));
|
||||
}
|
||||
|
||||
private void save() {
|
||||
try {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
for(ServerInfo server : this.elements) {
|
||||
if(sb.length() > 0)
|
||||
sb.append("\n");
|
||||
sb.append("[" + server.getName() + "]");
|
||||
sb.append("\naddress " + server.getAddress());
|
||||
sb.append("\nport " + server.getPort());
|
||||
sb.append("\nuser " + server.getUser());
|
||||
if(!server.getPassword().isEmpty())
|
||||
sb.append("\npassword " + server.getPassword());
|
||||
if(!server.getAccess().isEmpty())
|
||||
sb.append("\naccess " + server.getAccess());
|
||||
if(server.getKeypair() != null) {
|
||||
sb.append("\nkey " + Util.getHexString(server.getKeypair().getPrivate().getEncoded()));
|
||||
sb.append("\npubkey " + Util.getHexString(server.getKeypair().getPublic().getEncoded()));
|
||||
}
|
||||
if(server.requiresEncryption())
|
||||
sb.append("\nencryption_enforced");
|
||||
if(server.getLastConnected() != -1L)
|
||||
sb.append("\nconnected " + server.getLastConnected());
|
||||
if(server.getServerKey() != null)
|
||||
sb.append("\nserverkey " + Util.getHexString(server.getServerKey().getEncoded()));
|
||||
}
|
||||
FileUtils.write(SERVERS_FILE, sb.toString());
|
||||
}
|
||||
catch(Exception e) {
|
||||
Log.IO.error("Konnte Serverliste nicht speichern", e);
|
||||
}
|
||||
}
|
||||
|
||||
public String getTitle() {
|
||||
return "Server auswählen";
|
||||
}
|
||||
|
||||
public int getSlotHeight() {
|
||||
return 56;
|
||||
}
|
||||
|
||||
public void use(ActButton button, PressType mode) {
|
||||
if(button == this.deleteButton) {
|
||||
if(this.selectedElement >= 0) {
|
||||
this.elements.remove(this.selectedElement);
|
||||
this.gm.displayGuiScreen(this);
|
||||
}
|
||||
}
|
||||
else if(button == this.selectButton) {
|
||||
ServerInfo server = this.getSelected();
|
||||
if(server != null) {
|
||||
server.setLastConnected();
|
||||
this.gm.connect(server);
|
||||
}
|
||||
}
|
||||
else if(button == this.createButton) {
|
||||
this.setSelected(-1);
|
||||
this.gm.displayGuiScreen(new GuiServer(new ServerInfo("", "", -1, "", "", "", null, -1L, null, false)));
|
||||
}
|
||||
else if(button == this.editButton) {
|
||||
ServerInfo server = this.getSelected();
|
||||
if(server != null)
|
||||
this.gm.displayGuiScreen(new GuiServer(server));
|
||||
}
|
||||
else if(button == this.copyButton) {
|
||||
ServerInfo server = this.getSelected();
|
||||
if(server != null) {
|
||||
this.setSelected(-1);
|
||||
this.gm.displayGuiScreen(new GuiServer(new ServerInfo(server.name, server.address, server.port, server.user, server.password, server.access, server.keypair, -1L, null, server.enforceEncryption)));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -5,12 +5,12 @@ import java.util.List;
|
|||
import client.Client;
|
||||
import client.gui.element.ActButton;
|
||||
import client.gui.element.ButtonCallback;
|
||||
import client.gui.element.Element;
|
||||
import client.gui.element.Fill;
|
||||
import client.gui.element.PressType;
|
||||
import client.gui.element.FieldAction;
|
||||
import client.gui.element.Field;
|
||||
import client.gui.element.FieldCallback;
|
||||
import client.network.ClientPlayer;
|
||||
import client.vars.BoolVar;
|
||||
import client.vars.CVar;
|
||||
import client.gui.element.TransparentArea;
|
||||
|
@ -48,20 +48,20 @@ public class GuiConsole extends Gui implements FieldCallback {
|
|||
|
||||
public void init(int width, int height) {
|
||||
if(this.full) {
|
||||
this.addSelector("con_autoclose", 0, 0, 160, 24);
|
||||
this.addSelector("con_timestamps", 160, 0, 160, 24);
|
||||
this.addSelector("con_loglevel", 320, 0, 160, 24);
|
||||
this.add(new ActButton(480, 0, 160, 24, new ButtonCallback() {
|
||||
this.addSelector("con_autoclose", 0, 0, 160, 0);
|
||||
this.addSelector("con_timestamps", 160, 0, 160, 0);
|
||||
this.addSelector("con_loglevel", 320, 0, 160, 0);
|
||||
this.add(new ActButton(480, 0, 160, 0, new ButtonCallback() {
|
||||
public void use(ActButton elem, PressType action) {
|
||||
GuiConsole.this.reset();
|
||||
GuiConsole.this.setLog(GuiConsole.this.gm.getBuffer());
|
||||
}
|
||||
}, "Löschen"));
|
||||
}
|
||||
this.logBox = this.add(new TransparentArea(0, this.full ? 24 : 0, width, height - (this.full ? 48 : 24), this.gm.getBuffer(), this.gm.world != null && !this.gm.charEditor));
|
||||
this.logBox = this.add(new TransparentArea(0, this.full ? Element.BASE_HEIGHT : 0, width, height - Element.BASE_HEIGHT * (this.full ? 2 : 1), this.gm.getBuffer(), this.gm.world != null && !this.gm.charEditor));
|
||||
if(this.full)
|
||||
this.add(new Fill(640, 0, width - 640, 24));
|
||||
this.inputField = this.add(new Field(0, height - 24, width, 24, IPlayer.MAX_CMD_LENGTH, this, ""));
|
||||
this.add(new Fill(640, 0, width - 640, 0));
|
||||
this.inputField = this.add(new Field(0, height - Element.BASE_HEIGHT, width, 0, IPlayer.MAX_CMD_LENGTH, this, ""));
|
||||
this.inputField.setSelected();
|
||||
this.sentHistoryCursor = this.sentMessages.size();
|
||||
}
|
||||
|
@ -218,7 +218,7 @@ public class GuiConsole extends Gui implements FieldCallback {
|
|||
s = argv[argv.length - 1];
|
||||
Iterable<String> res = pre.startsWith("#") ?
|
||||
(argv.length == 1 ? this.gm.getVars() : (argv.length == 2 ? getVarCompletion(argv[0].substring(1)) : Lists.newArrayList())) :
|
||||
(this.gm.player == null ? Lists.newArrayList() : ((ClientPlayer)this.gm.player.client).getPlayerNames());
|
||||
(this.gm.player == null ? Lists.newArrayList() : this.gm.playerList.keySet());
|
||||
if(argv.length == 1 && pre.startsWith("#"))
|
||||
s = s.substring(1);
|
||||
for(String s1 : res) {
|
|
@ -1,32 +1,35 @@
|
|||
package client.gui;
|
||||
|
||||
import client.Client;
|
||||
import client.gui.element.MultiLabel;
|
||||
import client.gui.element.NavButton;
|
||||
import client.gui.element.TransparentArea;
|
||||
import common.Version;
|
||||
import common.color.TextColor;
|
||||
import common.init.Config;
|
||||
import common.log.Log;
|
||||
import common.util.Util;
|
||||
|
||||
public class GuiInfo extends Gui {
|
||||
private static final String VER =
|
||||
TextColor.GREEN + "" + TextColor.BUG + "" + TextColor.BUG + "" + TextColor.BUG + " " + TextColor.VIOLET + "" + Config.CLIENT_VERSION + "" +
|
||||
TextColor.GREEN + " " + TextColor.BUG + "" + TextColor.BUG + "" + TextColor.BUG;
|
||||
TextColor.GREEN + "" + Util.repeatString(TextColor.BUG, Version.RELEASE.getId()) + TextColor.DVIOLET + "|-| " + TextColor.VIOLET + Client.VERSION + TextColor.DVIOLET + " |-|" +
|
||||
TextColor.GREEN + Util.repeatString(TextColor.BUG, Version.RELEASE.getId());
|
||||
|
||||
private static final String INFO = "Ein Spiel zur Simulation, zum Testen, für Rollenspiele, Mehrspieler und vieles mehr." + "\n" +
|
||||
"Optimiert für Geschwindigkeit, Stabilität und" + TextColor.UNKNOWN + "" + TextColor.UNKNOWN + " [Speicherzugriffsfehler]";
|
||||
private static final String HACKED = "Ein weiterer Release von WAAAAAAAAAAAAAAAAAAAAAAAAAAAAGHDRIVE!!!1!!!ONEoneOnetyone!1!!!" + "\n" +
|
||||
private static final String HACKED = "Ein weiterer Release von WAAAAAAAAAAAAGHDRIVE!!!1!!!ONEoneOnetyone!1!!!" + "\n" +
|
||||
"Update 0.2 - Läuft jetzt auch mit nur 512KB Fast-RAM!";
|
||||
|
||||
private static final String[] LIBRARIES = {
|
||||
"LWJGL 3.3.6+1 (GLFW + OpenGL)",
|
||||
"Netty 4.1.119-Final"
|
||||
"LWJGL 3.3.6",
|
||||
"LWJGL-GLFW 3.3.6",
|
||||
"LWJGL-OpenGL 3.3.6"
|
||||
};
|
||||
private static final String[] CODE = {
|
||||
"Albert Pham - WorldEdit (Snippets)",
|
||||
"Joonas Vali - NameGenerator",
|
||||
"LWJGL 2.9.4-nightly-20150209 - Project, Vector*, Matrix*",
|
||||
"Guava 17.0 - collect, future, Predicates",
|
||||
"JOrbis 20101023 (JCraft) - jogg, jorbis, CodecJOrbis",
|
||||
"MC 1.8.9"
|
||||
"Netty 4.0.23-Final - net.*",
|
||||
"JOrbis 20101023 (JCraft) - jogg, jorbis, CodecJOrbis"
|
||||
};
|
||||
|
||||
public static final GuiInfo INSTANCE = new GuiInfo("Über dieses Programm", getFormat(false));
|
||||
|
@ -36,12 +39,12 @@ public class GuiInfo extends Gui {
|
|||
private final String info;
|
||||
|
||||
private static String getFormat(boolean hax) {
|
||||
return getInfo(hax) + "\n\n" + getCredits(hax) + "\n\n" + getLibraries(hax) + "\n\n" + getCode(hax) + "\n\n" + getOldCredits(hax) + "\n\n" + getColors();
|
||||
return getInfo(hax) + "\n\n" + getCredits(hax) + "\n\n" + getLibraries(hax) + "\n\n" + getCode(hax) + "\n\n" + getColors();
|
||||
}
|
||||
|
||||
private static String getHeader(boolean hax, String normal, String hacked) {
|
||||
return (hax ? TextColor.RED : TextColor.YELLOW) + (hax ? hacked : normal) + "\n" +
|
||||
(hax ? TextColor.CYAN : TextColor.WHITE) + "==========================================+==========================================";
|
||||
(hax ? TextColor.CYAN : TextColor.WHITE) + "==========================+==========================";
|
||||
}
|
||||
|
||||
private static void addLines(StringBuilder sb, boolean hax, String alternate, String category, String... authors) {
|
||||
|
@ -61,7 +64,7 @@ public class GuiInfo extends Gui {
|
|||
private static String getLibraries(boolean hax) {
|
||||
StringBuilder sb = new StringBuilder(getHeader(hax, "Verwendete Programmbibliotheken", "U$3d 3xpl0its"));
|
||||
for(String lib : LIBRARIES) {
|
||||
sb.append("\n" + TextColor.LGRAY + "-> " + TextColor.NEON + lib);
|
||||
sb.append("\n" + TextColor.NEON + lib);
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
|
@ -69,7 +72,7 @@ public class GuiInfo extends Gui {
|
|||
private static String getCode(boolean hax) {
|
||||
StringBuilder sb = new StringBuilder(getHeader(hax, "Zusätzlicher Quellcode", "M0ar 3xpl01ts"));
|
||||
for(String lib : CODE) {
|
||||
sb.append("\n" + TextColor.LGRAY + "-> " + TextColor.NEON + lib);
|
||||
sb.append("\n" + TextColor.NEON + lib);
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
|
@ -78,37 +81,16 @@ public class GuiInfo extends Gui {
|
|||
StringBuilder sb = new StringBuilder();
|
||||
int num = 0;
|
||||
for(TextColor color : TextColor.values()) {
|
||||
if(num > 0)
|
||||
sb.append(' ');
|
||||
if(num == 14)
|
||||
sb.append('\n');
|
||||
if((color.code >= Log.CHR_COLORS1 && color.code <= Log.CHR_COLORE1) || (color.code >= Log.CHR_COLORS2 && color.code <= Log.CHR_COLORE2)) {
|
||||
sb.append(color + "#" + (char)(num < 10 ? ('0' + num) : ('A' + (num - 10))));
|
||||
sb.append(color + "#" + (char)(num < 10 ? ('0' + num) : ('A' + (num - 10))) + ' ');
|
||||
num++;
|
||||
}
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
private static String getOldCredits(boolean hax) {
|
||||
StringBuilder sb = new StringBuilder(getHeader(hax, "Ursprüngliche Mitwirkende", "Das Team -- Nicht TCQ"));
|
||||
|
||||
addLines(sb, hax, "Absolut größter Lamer des Universums", "Spielidee und ursprüngliche Umsetzung",
|
||||
"Markus Persson");
|
||||
addLines(sb, hax, "Crack und weitere Programmierung", "Spiel-Design, Programmierung und Grafiken",
|
||||
"Jens Bergensten", "Nathan Adams", "Ryan Holtz", "Michael Stoyke");
|
||||
addLines(sb, hax, "Entschlüsselung von Ressourcen", "Programmierung",
|
||||
"Erik Broes", "Paul Spooner", "Ryan Hitchman", "Elliot Segal");
|
||||
addLines(sb, hax, "Cracktro, Grafiken und Intromusik", "Töne und Geräusche",
|
||||
"Daniel Rosenfeld", "freesound.org");
|
||||
addLines(sb, hax, "Packing und Verbreitung", "Management, Administration und Spaß",
|
||||
"Carl Manneh", "Daniel Kaplan", "Lydia Winters");
|
||||
addLines(sb, hax, "Server und Hosting", "Zahlen und Statistiken",
|
||||
"Patrick Geuder");
|
||||
addLines(sb, hax, "Weiterer Dank und Grüße", "Entwickler von Mo' Creatures (Pferde usw.)",
|
||||
"John Olarte", "Kent Christian Jensen", "Dan Roque");
|
||||
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
private static String getCredits(boolean hax) {
|
||||
StringBuilder sb = new StringBuilder(getHeader(hax, "Mitwirkende dieses Programms", "Das Team -- TCQ"));
|
||||
|
||||
|
@ -125,8 +107,8 @@ public class GuiInfo extends Gui {
|
|||
}
|
||||
|
||||
public void init(int width, int height) {
|
||||
this.add(new TransparentArea(10, 10, width - 20, height - 44, this.info, this.gm.world != null && !this.gm.charEditor));
|
||||
this.add(new NavButton(0, height - 24, width, 24, GuiMenu.INSTANCE, "Zurück"));
|
||||
this.add(new MultiLabel(10, 10, width - 20, height - 44, this.info, false));
|
||||
this.add(new NavButton((width - 280) / 2, height - 20, 280, 0, GuiMenu.INSTANCE, "Zurück"));
|
||||
}
|
||||
|
||||
public String getTitle() {
|
|
@ -46,11 +46,11 @@ public class GuiLoading extends Gui {
|
|||
}
|
||||
|
||||
public void init(int width, int height) {
|
||||
this.taskLabel = this.add(new Label(0, 40, 500, 20, ""));
|
||||
this.progressBar1 = this.add(new Bar(0, 80, 500, 24));
|
||||
this.progressBar2 = this.add(new Bar(0, 120, 500, 24));
|
||||
this.taskLabel = this.add(new Label(0, 40, 500, 0, ""));
|
||||
this.progressBar1 = this.add(new Bar(0, 80, 500, 0));
|
||||
this.progressBar2 = this.add(new Bar(0, 120, 500, 0));
|
||||
this.shift();
|
||||
this.headerLabel = this.add(new Label(0, 40, width, 20, this.message));
|
||||
this.headerLabel = this.add(new Label(0, 40, width, 0, this.message));
|
||||
this.progressBar1.visible = false;
|
||||
this.progressBar2.visible = false;
|
||||
}
|
|
@ -1,6 +1,6 @@
|
|||
package client.gui;
|
||||
|
||||
import client.Timing;
|
||||
import client.Client;
|
||||
import client.gui.character.GuiChar;
|
||||
import client.gui.character.GuiCharacters;
|
||||
import client.gui.element.ActButton;
|
||||
|
@ -12,7 +12,6 @@ import client.gui.options.GuiOptions;
|
|||
import client.renderer.Drawing;
|
||||
import client.window.Keysym;
|
||||
import common.color.TextColor;
|
||||
import common.init.Config;
|
||||
import common.rng.Random;
|
||||
import common.util.ExtMath;
|
||||
|
||||
|
@ -26,7 +25,7 @@ public class GuiMenu extends Gui {
|
|||
if(this.gm.world != null)
|
||||
super.drawMainBackground();
|
||||
else
|
||||
this.gm.renderGlobal.renderStarField(this.gm.fb_x, this.gm.fb_y, 0x000000, 0xffffff, (float)this.ticks + (float)Timing.tick_fraction, this.rand);
|
||||
this.gm.renderGlobal.renderStarField(this.gm.fb_x, this.gm.fb_y, 0x000000, 0xffffff, (float)this.ticks + this.gm.getTickFraction(), this.rand);
|
||||
}
|
||||
|
||||
private final Random rand = new Random();
|
||||
|
@ -52,8 +51,12 @@ public class GuiMenu extends Gui {
|
|||
this.ticks = 0;
|
||||
this.hacked = 0;
|
||||
this.resetAnimation();
|
||||
this.add(new ActButton(0, -28, 400, 24, new ButtonCallback() {
|
||||
this.add(new ActButton(0, 0, 180, 0, new ButtonCallback() {
|
||||
public void use(ActButton elem, PressType action) {
|
||||
if(action == PressType.SECONDARY) {
|
||||
GuiMenu.this.gm.joinDebugWorld();
|
||||
return;
|
||||
}
|
||||
if(GuiMenu.this.hacked == 9) {
|
||||
GuiMenu.this.hacked++;
|
||||
GuiMenu.this.splashLabel.setText(TextColor.VIOLET + "Hax!");
|
||||
|
@ -63,20 +66,20 @@ public class GuiMenu extends Gui {
|
|||
}
|
||||
}
|
||||
}, "Server beitreten"));
|
||||
this.add(new NavButton(0, 0, 400, 24, GuiServer.INSTANCE, "Schnellverbindung"));
|
||||
this.add(new ActButton(0, 28, 400, 24, new ButtonCallback() {
|
||||
this.add(new ActButton(0, 20, 180, 0, new ButtonCallback() {
|
||||
public void use(ActButton elem, PressType action) {
|
||||
if(GuiMenu.this.hacked == 8)
|
||||
GuiMenu.this.hacked++;
|
||||
else
|
||||
GuiMenu.this.gm.displayGuiScreen(GuiOptions.getPage());
|
||||
GuiMenu.this.gm.displayGuiScreen(GuiServer.INSTANCE);
|
||||
}
|
||||
}, "Einstellungen"));
|
||||
this.infoButton = this.add(new ActButton(0, 56, 400, 24, new ButtonCallback() {
|
||||
}, "Schnellverbindung"));
|
||||
this.add(new NavButton(0, 40, 180, 0, GuiOptions.getPage(), "Einstellungen"));
|
||||
this.infoButton = this.add(new ActButton(0, 60, 180, 0, new ButtonCallback() {
|
||||
public void use(ActButton elem, PressType action) {
|
||||
GuiMenu.this.gm.displayGuiScreen(GuiMenu.this.hacked == 10 ? GuiInfo.HAX : GuiInfo.INSTANCE);
|
||||
}
|
||||
}, "Info / Über / Mitwirkende") {
|
||||
}, "Info / Mitwirkende") {
|
||||
public void drawHover() {
|
||||
if(GuiMenu.this.hacked == 10) {
|
||||
Drawing.drawRect(this.pos_x, this.pos_y, this.size_x, this.size_y, 0x287f00ff);
|
||||
|
@ -84,9 +87,9 @@ public class GuiMenu extends Gui {
|
|||
int width = Drawing.getWidth("Hax!");
|
||||
for(int z = 0; z < 64; z++) {
|
||||
Drawing.drawText("Hax!", GuiMenu.this.rand.zrange(Math.max(1, this.gm.fb_x - width)) +
|
||||
(int)(ExtMath.sin(((float)(GuiMenu.this.ticks + GuiMenu.this.rand.zrange(256)) + (float)Timing.tick_fraction) / 100.0f * (float)Math.PI * 2.0f) * 16.0f),
|
||||
(int)(ExtMath.sin(((float)(GuiMenu.this.ticks + GuiMenu.this.rand.zrange(256)) + this.gm.getTickFraction()) / 100.0f * (float)Math.PI * 2.0f) * 16.0f),
|
||||
GuiMenu.this.rand.zrange(Math.max(1, this.gm.fb_y - Font.YGLYPH)) +
|
||||
(int)(ExtMath.sin(((float)(GuiMenu.this.ticks + GuiMenu.this.rand.zrange(256)) + (float)Timing.tick_fraction) / 100.0f * (float)Math.PI * 2.0f) * 16.0f),
|
||||
(int)(ExtMath.sin(((float)(GuiMenu.this.ticks + GuiMenu.this.rand.zrange(256)) + this.gm.getTickFraction()) / 100.0f * (float)Math.PI * 2.0f) * 16.0f),
|
||||
0xff0000ff | (GuiMenu.this.rand.zrange(256) << 16));
|
||||
}
|
||||
}
|
||||
|
@ -95,27 +98,27 @@ public class GuiMenu extends Gui {
|
|||
}
|
||||
}
|
||||
});
|
||||
this.add(new ActButton(0, 102, 400, 24, new ButtonCallback() {
|
||||
this.add(new ActButton(0, 90, 180, 0, new ButtonCallback() {
|
||||
public void use(ActButton elem, PressType action) {
|
||||
GuiMenu.this.gm.interrupted = true;
|
||||
}
|
||||
}, "Client schließen"));
|
||||
this.shift();
|
||||
this.add(new Label(4, /* this.gm.fb_y - 2 */ 0, 200, 20, TextColor.VIOLET + Config.CLIENT_VERSION, true));
|
||||
this.splashLabel = this.add(new Label(0, 160, width, 24, ""));
|
||||
this.add(new Label(4, 4, 200, 0, TextColor.VIOLET + Client.VERSION, true));
|
||||
this.splashLabel = this.add(new Label(0, 100, width, 0, ""));
|
||||
this.pickSplash();
|
||||
}
|
||||
else {
|
||||
this.add(new NavButton(0, 0, 400, 24, this.gm.charEditor ? GuiChar.INSTANCE : null, this.gm.charEditor ? "Zurück zum Charakter-Editor" : "Zurück zum Spiel"));
|
||||
this.add(new NavButton(0, 28, this.gm.charEditor ? 400 : 198, 24, GuiOptions.getPage(), "Einstellungen"));
|
||||
this.add(new NavButton(0, 0, 180, 0, this.gm.charEditor ? GuiChar.INSTANCE : null, this.gm.charEditor ? "Zurück zum Editor" : "Zurück zum Spiel"));
|
||||
this.add(new NavButton(0, 20, 180, 0, GuiOptions.getPage(), "Einstellungen"));
|
||||
if(!this.gm.charEditor)
|
||||
this.add(new NavButton(202, 28, 198, 24, GuiCharacters.INSTANCE, "Charakter"));
|
||||
this.add(new ActButton(0, 102, 400, 24, new ButtonCallback() {
|
||||
this.add(new NavButton(0, 40, 180, 0, GuiCharacters.INSTANCE, "Charakter"));
|
||||
this.add(new ActButton(0, this.gm.charEditor ? 50 : 70, 180, 0, new ButtonCallback() {
|
||||
public void use(ActButton elem, PressType action) {
|
||||
GuiMenu.this.gm.unload(true);
|
||||
// GuiMenu.this.gm.displayGuiScreen(INSTANCE);
|
||||
}
|
||||
}, "Server verlassen und Verbindung trennen"));
|
||||
}, "Server verlassen"));
|
||||
this.shift();
|
||||
}
|
||||
}
|
||||
|
@ -289,7 +292,7 @@ public class GuiMenu extends Gui {
|
|||
public void drawOverlays() {
|
||||
super.drawOverlays();
|
||||
if(this.gm.world == null) {
|
||||
int y = 164;
|
||||
int y = 99;
|
||||
int h = 16;
|
||||
int n = Drawing.getWidth(this.splashLabel.getText());
|
||||
Drawing.drawRect(0, y, this.gm.fb_x / 2 - n / 2 - 10, h, 0x7f7f00ff);
|
279
client/src/main/java/client/gui/GuiServer.java
Normal file
279
client/src/main/java/client/gui/GuiServer.java
Normal file
|
@ -0,0 +1,279 @@
|
|||
package client.gui;
|
||||
|
||||
import java.security.KeyPair;
|
||||
import java.security.PublicKey;
|
||||
import client.gui.GuiConnect.ServerInfo;
|
||||
import client.gui.element.ActButton;
|
||||
import client.gui.element.ButtonCallback;
|
||||
import client.gui.element.Element;
|
||||
import client.gui.element.Label;
|
||||
import client.gui.element.NavButton;
|
||||
import client.gui.element.PasswordField;
|
||||
import client.gui.element.PressType;
|
||||
import client.gui.element.Toggle;
|
||||
import client.gui.element.FieldAction;
|
||||
import client.gui.element.Field;
|
||||
import client.gui.element.FieldCallback;
|
||||
import client.vars.CVarCategory;
|
||||
import client.vars.Variable;
|
||||
import client.window.Window;
|
||||
import common.color.TextColor;
|
||||
import common.network.IPlayer;
|
||||
import common.util.EncryptUtil;
|
||||
|
||||
public class GuiServer extends Gui implements FieldCallback {
|
||||
public static final GuiServer INSTANCE = new GuiServer(null);
|
||||
|
||||
private final ServerInfo server;
|
||||
|
||||
private Field nameBox;
|
||||
private Field addrBox;
|
||||
private Field portBox;
|
||||
private Field userBox;
|
||||
private PasswordField passBox;
|
||||
private PasswordField accBox;
|
||||
private Label nameLabel;
|
||||
private Label addrLabel;
|
||||
private Label portLabel;
|
||||
private Label rangeLabel;
|
||||
private Label userLabel;
|
||||
private Label passLabel;
|
||||
private Label accLabel;
|
||||
private Label keyLabel;
|
||||
private Label idLabel;
|
||||
private Toggle encToggle;
|
||||
private ActButton keyButton;
|
||||
private ActButton resetButton;
|
||||
private ActButton copyKeyButton;
|
||||
private ActButton copyIdButton;
|
||||
private KeyPair keypair;
|
||||
private String keyDigest;
|
||||
private PublicKey serverKey;
|
||||
private String serverDigest;
|
||||
|
||||
public GuiServer(ServerInfo server) {
|
||||
this.server = server;
|
||||
}
|
||||
|
||||
@Variable(name = "srv_last_address", category = CVarCategory.SYSTEM, min = 1, max = 128, display = "Letzte Server-Adresse")
|
||||
private String lastAddr = "";
|
||||
@Variable(name = "srv_last_port", category = CVarCategory.SYSTEM, min = 1024, max = 32767, display = "Letzter Server-Port")
|
||||
private int lastPort = -1;
|
||||
@Variable(name = "srv_last_user", category = CVarCategory.SYSTEM, max = IPlayer.MAX_USER_LENGTH, display = "Letzter Server-Nutzer", validator = IPlayer.UserValidator.class)
|
||||
private String lastUser = "";
|
||||
@Variable(name = "srv_last_password", category = CVarCategory.SYSTEM, max = IPlayer.MAX_PASS_LENGTH, display = "Letztes Server-Passwort")
|
||||
private String lastPass = "";
|
||||
@Variable(name = "srv_last_access", category = CVarCategory.SYSTEM, max = IPlayer.MAX_PASS_LENGTH, display = "Letzter Server-Zugang")
|
||||
private String lastAcc = "";
|
||||
|
||||
public void init(int width, int height) {
|
||||
if(this.server != null) {
|
||||
this.nameBox = this.add(new Field(0, 0, 400, 0, 128, this, this.server.getName()));
|
||||
this.nameLabel = this.add(new Label(0, 0, 410, "Name in der Liste", true));
|
||||
this.keypair = this.server.getKeypair();
|
||||
this.keyDigest = this.keypair == null ? null : EncryptUtil.getXorSha512Hash(this.keypair.getPublic().getEncoded());
|
||||
}
|
||||
this.addrBox = this.add(new Field(0, 34, 400, 0, 128, this, this.server == null ? this.lastAddr : this.server.getAddress()));
|
||||
this.addrLabel = this.add(new Label(0, 34, 410, "Adresse / Hostname", true));
|
||||
int port = this.server == null ? this.lastPort : this.server.getPort();
|
||||
this.portBox = this.add(new Field(404, 34, 76, 0, 5, this, port < 0 ? "" : "" + port));
|
||||
this.portLabel = this.add(new Label(404, 34, 76, "Port", true));
|
||||
this.rangeLabel = this.add(new Label(370, 34 + Element.BASE_HEIGHT, 110, 0, "[1024..32767]", true));
|
||||
this.userBox = this.add(new Field(0, 68, 220, 0, IPlayer.MAX_USER_LENGTH, this, IPlayer.VALID_USER, this.server == null ? this.lastUser : this.server.getUser()));
|
||||
this.userLabel = this.add(new Label(0, 68, 220, "Benutzername", true));
|
||||
this.passBox = this.add(new PasswordField(0, this.server == null ? 102 : 136, 480, 0, IPlayer.MAX_PASS_LENGTH, this, this.server == null ? this.lastPass : this.server.getPassword()));
|
||||
this.passLabel = this.add(new Label(0, this.server == null ? 102 : 136, 480, (this.keypair == null ? "Anmelde" : "Ersatz") + "-Passwort (mind. 8 Zeichen)", true));
|
||||
this.accBox = this.add(new PasswordField(0, this.server == null ? 136 : 170, 480, 0, IPlayer.MAX_PASS_LENGTH, this, this.server == null ? this.lastAcc : this.server.getAccess()));
|
||||
this.accLabel = this.add(new Label(0, this.server == null ? 136 : 170, 480, "Server-Passwort (mind. 8 Zeichen)", true));
|
||||
this.add(new ActButton(241, this.server == null ? 166 : 254, 239, 0, new ButtonCallback() {
|
||||
public void use(ActButton elem, PressType action) {
|
||||
GuiServer.this.connect();
|
||||
}
|
||||
}, this.server == null ? "Verbinden" : (this.server.getName().isEmpty() ? "Hinzufügen" : "Übernehmen")));
|
||||
this.add(new NavButton(0, this.server == null ? 166 : 254, 239, 0, this.server != null ? GuiConnect.INSTANCE : GuiMenu.INSTANCE, "Zurück"));
|
||||
if(this.server != null) {
|
||||
this.keyButton = this.add(new ActButton(0, 102, 391, 0, new ButtonCallback() {
|
||||
public void use(ActButton elem, PressType action) {
|
||||
if(GuiServer.this.keypair == null) {
|
||||
GuiServer.this.keypair = EncryptUtil.createKeypair();
|
||||
GuiServer.this.keyDigest = EncryptUtil.getXorSha512Hash(GuiServer.this.keypair.getPublic().getEncoded());
|
||||
GuiServer.this.keyLabel.setText("Anmelde-Pubkey: " + EncryptUtil.KEY_ALGO_DISPLAY + " " + GuiServer.this.keyDigest);
|
||||
GuiServer.this.keyButton.setText("Schlüsselpaar entfernen");
|
||||
GuiServer.this.passLabel.setText("Ersatz-Passwort (mind. 8 Zeichen)");
|
||||
GuiServer.this.copyKeyButton.enabled = true;
|
||||
}
|
||||
else {
|
||||
final String name = GuiServer.this.nameBox.getText();
|
||||
final String addr = GuiServer.this.addrBox.getText();
|
||||
final String port = GuiServer.this.portBox.getText();
|
||||
final String pass = GuiServer.this.passBox.getText();
|
||||
final String acc = GuiServer.this.accBox.getText();
|
||||
final boolean reqEnc = GuiServer.this.encToggle.getValue();
|
||||
final KeyPair keys = GuiServer.this.keypair;
|
||||
final PublicKey key = GuiServer.this.serverKey;
|
||||
final String digest = GuiServer.this.keyDigest;
|
||||
final String sdigest = GuiServer.this.serverDigest;
|
||||
GuiServer.this.gm.displayGuiScreen(new GuiConfirm(new GuiConfirm.Callback() {
|
||||
public void confirm(boolean confirmed) {
|
||||
GuiServer.this.gm.displayGuiScreen(GuiServer.this);
|
||||
GuiServer.this.nameBox.setText(name);
|
||||
GuiServer.this.addrBox.setText(addr);
|
||||
GuiServer.this.portBox.setText(port);
|
||||
GuiServer.this.passBox.setText(pass);
|
||||
GuiServer.this.accBox.setText(acc);
|
||||
GuiServer.this.encToggle.setValue(reqEnc);
|
||||
GuiServer.this.serverKey = key;
|
||||
GuiServer.this.serverDigest = sdigest;
|
||||
GuiServer.this.idLabel.setText("Server-Pubkey: " + (key != null ? EncryptUtil.KEY_ALGO_DISPLAY + " " + GuiServer.this.serverDigest : "nicht vorhanden"));
|
||||
GuiServer.this.resetButton.enabled = key != null;
|
||||
GuiServer.this.copyIdButton.enabled = key != null;
|
||||
GuiServer.this.copyKeyButton.enabled = !confirmed;
|
||||
if(confirmed) {
|
||||
GuiServer.this.keypair = null;
|
||||
GuiServer.this.keyDigest = null;
|
||||
GuiServer.this.keyLabel.setText("Anmelde-Pubkey: nicht vorhanden");
|
||||
GuiServer.this.keyButton.setText("Neues Schlüsselpaar generieren");
|
||||
GuiServer.this.passLabel.setText("Anmelde-Passwort (mind. 8 Zeichen)");
|
||||
}
|
||||
else {
|
||||
GuiServer.this.keypair = keys;
|
||||
GuiServer.this.keyDigest = digest;
|
||||
GuiServer.this.keyLabel.setText("Anmelde-Pubkey: " + EncryptUtil.KEY_ALGO_DISPLAY + " " + GuiServer.this.keyDigest);
|
||||
GuiServer.this.keyButton.setText("Schlüsselpaar entfernen");
|
||||
GuiServer.this.passLabel.setText("Ersatz-Passwort (mind. 8 Zeichen)");
|
||||
}
|
||||
}
|
||||
}, "Schlüsselpaar wirklich entfernen?", "Wenn das Schlüsselpaar gelöscht wird, ist es nicht mehr möglich, sich damit\nauf dem Server zu identifizieren und sich anzumelden.\nDamit könnte der Zugriff auf den Server unmöglich werden.", "Schlüsselpaar löschen", "Abbrechen"));
|
||||
}
|
||||
}
|
||||
}, this.keypair == null ? "Neues Schlüsselpaar generieren" : "Schlüsselpaar entfernen"));
|
||||
this.copyKeyButton = this.add(new ActButton(395, 102, 85, 0, new ButtonCallback() {
|
||||
public void use(ActButton elem, PressType action) {
|
||||
if(GuiServer.this.keypair != null)
|
||||
Window.setClipboard(EncryptUtil.getArmoredPubkey(GuiServer.this.keypair.getPublic(), GuiServer.this.userBox.getText()));
|
||||
}
|
||||
}, "Kopieren"));
|
||||
this.copyKeyButton.enabled = this.keypair != null;
|
||||
this.keyLabel = this.add(new Label(0, 102, 480, "Anmelde-Pubkey: " + (this.keypair != null ? EncryptUtil.KEY_ALGO_DISPLAY + " " + this.keyDigest : "nicht vorhanden"), true));
|
||||
this.encToggle = this.add(new Toggle(0, 190, 480, 0, false, this.server.requiresEncryption(), null, "Nur Verschlüsselte Verbindung akzeptieren"));
|
||||
this.serverKey = this.server.getServerKey();
|
||||
this.serverDigest = this.serverKey == null ? null : EncryptUtil.getXorSha512Hash(this.serverKey.getEncoded());
|
||||
this.resetButton = this.add(new ActButton(0, 224, 391, 0, new ButtonCallback() {
|
||||
public void use(ActButton elem, PressType action) {
|
||||
if(GuiServer.this.serverKey != null) {
|
||||
GuiServer.this.serverKey = null;
|
||||
GuiServer.this.serverDigest = null;
|
||||
GuiServer.this.idLabel.setText("Server-Pubkey: nicht vorhanden");
|
||||
GuiServer.this.resetButton.enabled = false;
|
||||
GuiServer.this.copyIdButton.enabled = false;
|
||||
}
|
||||
}
|
||||
}, "Server-Identifizierung / Pubkey zurücksetzen"));
|
||||
this.resetButton.enabled = this.serverKey != null;
|
||||
this.copyIdButton = this.add(new ActButton(395, 224, 85, 0, new ButtonCallback() {
|
||||
public void use(ActButton elem, PressType action) {
|
||||
if(GuiServer.this.serverKey != null)
|
||||
Window.setClipboard(EncryptUtil.getArmoredPubkey(GuiServer.this.serverKey, GuiServer.this.nameBox.getText()));
|
||||
}
|
||||
}, "Kopieren"));
|
||||
this.copyIdButton.enabled = this.serverKey != null;
|
||||
this.idLabel = this.add(new Label(0, 224, 480, "Server-Pubkey: " + (this.serverKey != null ? EncryptUtil.KEY_ALGO_DISPLAY + " " + this.serverDigest : "nicht vorhanden"), true));
|
||||
}
|
||||
this.shift();
|
||||
}
|
||||
|
||||
public String getTitle() {
|
||||
return this.server == null ? "Mit Server verbinden" : (this.server.getName().isEmpty() ? "Server hinzufügen" : "Server bearbeiten");
|
||||
}
|
||||
|
||||
private void connect() {
|
||||
if(this.gm.world != null)
|
||||
return;
|
||||
String name = null;
|
||||
if(this.server != null) {
|
||||
name = this.nameBox.getText();
|
||||
if(name.isEmpty()) {
|
||||
this.nameLabel.setText(TextColor.RED + "Name in der Liste");
|
||||
return;
|
||||
}
|
||||
if(GuiConnect.INSTANCE.isNameTaken(name)) {
|
||||
this.nameLabel.setText("Name in der Liste - " + TextColor.RED + "Bereits vorhanden");
|
||||
return;
|
||||
}
|
||||
}
|
||||
String addr = this.addrBox.getText();
|
||||
if(addr.isEmpty()) {
|
||||
this.addrLabel.setText(TextColor.RED + "Adresse / Hostname");
|
||||
return;
|
||||
}
|
||||
int port = -1;
|
||||
if(this.portBox.getText().isEmpty()) {
|
||||
this.portLabel.setText(TextColor.RED + "Port");
|
||||
return;
|
||||
}
|
||||
else {
|
||||
try {
|
||||
port = Integer.parseInt(this.portBox.getText());
|
||||
}
|
||||
catch(NumberFormatException e) {
|
||||
this.rangeLabel.setText("[" + TextColor.RED + "1024..32767" + TextColor.RESET + "]");
|
||||
return;
|
||||
}
|
||||
if(port < 1024 || port > 32767) {
|
||||
this.rangeLabel.setText("[" + (port < 1024 ? TextColor.RED + "1024" + TextColor.RESET + "..32767" : "1024.." + TextColor.RED + "32767" + TextColor.RESET) + "]");
|
||||
return;
|
||||
}
|
||||
}
|
||||
String user = this.userBox.getText();
|
||||
if(user.isEmpty()) {
|
||||
this.userLabel.setText(TextColor.RED + "Benutzername");
|
||||
return;
|
||||
}
|
||||
String pass = this.passBox.getText();
|
||||
if(!pass.isEmpty() && pass.length() < 8) {
|
||||
this.passLabel.setText((this.keypair == null ? "Anmelde" : "Ersatz") + "-Passwort (" + TextColor.RED + "mind. 8 Zeichen" + TextColor.RESET + ")");
|
||||
return;
|
||||
}
|
||||
String acc = this.accBox.getText();
|
||||
if(!acc.isEmpty() && acc.length() < 8) {
|
||||
this.accLabel.setText("Zugang (" + TextColor.RED + "mind. 8 Zeichen" + TextColor.RESET + ")");
|
||||
return;
|
||||
}
|
||||
if(this.server == null) {
|
||||
this.lastAddr = addr;
|
||||
this.lastPort = port;
|
||||
this.lastUser = user;
|
||||
this.lastPass = pass;
|
||||
this.lastAcc = acc;
|
||||
this.gm.setDirty();
|
||||
GuiConnect.INSTANCE.connect(addr, port, user, pass, acc);
|
||||
}
|
||||
else {
|
||||
this.server.setData(name, addr, port, user, pass, acc, this.keypair, this.serverKey, this.encToggle.getValue());
|
||||
GuiConnect.INSTANCE.applyServer(this.server);
|
||||
}
|
||||
}
|
||||
|
||||
public void use(Field elem, FieldAction value) {
|
||||
if(value == FieldAction.SEND) {
|
||||
elem.setDeselected();
|
||||
this.connect();
|
||||
}
|
||||
else if(value == FieldAction.FOCUS) {
|
||||
if(elem == this.addrBox)
|
||||
this.addrLabel.setText("Adresse / Hostname");
|
||||
else if(elem == this.portBox) {
|
||||
this.portLabel.setText("Port");
|
||||
this.rangeLabel.setText("[1024..32767]");
|
||||
}
|
||||
else if(elem == this.userBox)
|
||||
this.userLabel.setText("Benutzername");
|
||||
else if(elem == this.passBox)
|
||||
this.passLabel.setText((this.keypair == null ? "Anmelde" : "Ersatz") + "-Passwort (mind. 8 Zeichen)");
|
||||
else if(elem == this.accBox)
|
||||
this.accLabel.setText("Server-Passwort (mind. 8 Zeichen)");
|
||||
else if(this.server != null && elem == this.nameBox)
|
||||
this.nameLabel.setText("Name in der Liste");
|
||||
}
|
||||
}
|
||||
}
|
|
@ -2,35 +2,34 @@ package client.gui;
|
|||
|
||||
public abstract class Splashes {
|
||||
public static final String[] SPLASHES = {
|
||||
"Aus der TV-Werbung!",
|
||||
"Toll!",
|
||||
"Aus der Toiletten-Werbung!",
|
||||
"0% pur!",
|
||||
"Kann Nüsse enthalten!",
|
||||
"Besser als Crysis!",
|
||||
"Kann *.,-#+~ enthalten!",
|
||||
"Mehr Polygone!",
|
||||
"Sexy!",
|
||||
"Limitierte Edition!",
|
||||
"Blinkende Buchstaben!",
|
||||
"Erstellt von Notch!",
|
||||
"Es ist hier!",
|
||||
"Das Beste seiner Klasse!",
|
||||
"Es ist vollendet!",
|
||||
"Erstellt von Satan!",
|
||||
"Er ist hier!",
|
||||
"Das Schlimmste seiner Klasse!",
|
||||
"Es ist vollendet (nicht)!",
|
||||
"Mehr oder weniger frei von Drachen!",
|
||||
"Aufregung!",
|
||||
"Weniger als -5 verkauft!",
|
||||
"Einzigartig!",
|
||||
"Einen Haufen Scheiße auf YouTube!",
|
||||
"Indev!",
|
||||
"Dev!",
|
||||
"Alpha!",
|
||||
"Beta!",
|
||||
"Spinnen überall!",
|
||||
"Schau es dir an!",
|
||||
"Heilige Kuh, mann!",
|
||||
"Es ist ein Spiel!",
|
||||
"Hergestellt in Schweden!",
|
||||
"Hergestellt im Schattenland!",
|
||||
"Benutzt LWJGL!",
|
||||
"Retikulierende Splinen!",
|
||||
"Meine Kraft!",
|
||||
"Hurraaa!",
|
||||
"Einzelspieler!",
|
||||
"Tastatur ist kompatibel!",
|
||||
"Undokumentiert!",
|
||||
"Barren!",
|
||||
|
@ -41,17 +40,14 @@ public abstract class Splashes {
|
|||
"Überlebe!",
|
||||
"Verlies!",
|
||||
"Exklusiv!",
|
||||
"Die Knie der Biene!",
|
||||
"Weg mit O.P.P.!",
|
||||
"Mit Quellcode (mehr oder weniger)!",
|
||||
"Mit Klasse(n)!",
|
||||
"Wow!",
|
||||
"Immer noch nicht auf Steam - und das ist auch gut so!",
|
||||
"Niemals auf Steam - und das ist auch gut so!",
|
||||
"Oh, mann!",
|
||||
"Grauenvolle Community!",
|
||||
"Pixel!",
|
||||
"Teetsuuuuoooo!",
|
||||
"Kaaneeeedaaaa!",
|
||||
"Garfiiieeeeeeeld!",
|
||||
"Jetzt ohne Schwierigkeit!",
|
||||
"Verbessert!",
|
||||
"9% frei von Bugs!",
|
||||
|
@ -59,31 +55,26 @@ public abstract class Splashes {
|
|||
"13 Kräuter und Gewürze!",
|
||||
"Fettfrei!",
|
||||
"Absolut keine Memes!",
|
||||
"Kostenlose Zähne!",
|
||||
"Kostenlose Vampirzähne!",
|
||||
"Fragen Sie Ihnen Arzt oder Apotheker!",
|
||||
"Alle Bergleute sind willkommen!",
|
||||
"Cloud-Computing!",
|
||||
"Legal in Finnland!",
|
||||
"Frei von \"\"KI\"\"!",
|
||||
"Legal in Norwegen!",
|
||||
"Illegal in China!",
|
||||
"Schwer zu beschreiben!",
|
||||
"Technisch gesehen gut!",
|
||||
"Bringe den Speck nach Hause!",
|
||||
"Indie!",
|
||||
"GOTY!",
|
||||
"Ceci n'est pas une title screen!",
|
||||
"Euklidisch!",
|
||||
"Jetzt in 3D!",
|
||||
"Jetzt in 4D?!",
|
||||
"Bietet Inspiration!",
|
||||
"Herregud!",
|
||||
"Komplexe Zellvorgänge!",
|
||||
"Ja, Sir!",
|
||||
"Von Cowboys gespielt!",
|
||||
"Ja, Miss!",
|
||||
"Von Trollen gespielt!",
|
||||
"OpenGL 1.5 oder höher!",
|
||||
"Tausende von Farben!",
|
||||
"Millionen von Farben!",
|
||||
"Probiere es!",
|
||||
"Age of Wonders ist besser!",
|
||||
"Probiere die Pilzsuppe!",
|
||||
"Sensationell!",
|
||||
"Heiße Tamale, heiße heiße Tamale!",
|
||||
"Spiele ihn runter, Klavierkatze!",
|
||||
"Garantiert!",
|
||||
"Makroskopisch!",
|
||||
|
@ -94,27 +85,22 @@ public abstract class Splashes {
|
|||
"Von Melonen geliebt!",
|
||||
"Ultimative Edition!",
|
||||
"Merkwürdig!",
|
||||
"Du hast einen nagelneuen Schlüssel bekommen!",
|
||||
"Wasserfest!",
|
||||
"Nicht brennbar!",
|
||||
"Oha, du!",
|
||||
"Alles inklusive!",
|
||||
"Sag es deinen Freunden!",
|
||||
"NP ist nicht in P!",
|
||||
"Musik von C418 (DLC)!",
|
||||
"Viel zu oft live gestreamt!",
|
||||
"Heimgesucht!",
|
||||
"Polynomial!",
|
||||
"Terrestrisch!",
|
||||
"Alles ist voller Zerstörung!",
|
||||
"Voll mit Sternen, Planeten und Monden!",
|
||||
"Wissenschaftlich!",
|
||||
"Nicht so cool wie Spock!",
|
||||
"Trage nix bei und höre weg!",
|
||||
"Grabe niemals nach unten, wenn du keine Erze brauchst!",
|
||||
"Mache nie Pause!",
|
||||
"Nicht linear!",
|
||||
"Han hat zuerst geschossen!",
|
||||
"Schön dich zu sehen!",
|
||||
"Eimer mit Lava!",
|
||||
"Reite auf dem Schwein!",
|
||||
|
@ -124,25 +110,18 @@ public abstract class Splashes {
|
|||
"Holz schlagen!",
|
||||
"Von Klippen fallen!",
|
||||
"0% Zucker!",
|
||||
"150% hyperbol!",
|
||||
"Synecdoche!",
|
||||
"180% Alkohol!",
|
||||
"Lasst uns tanzne!",
|
||||
"Geheeimes Freitags-Update!",
|
||||
"Referenz-Implementation!",
|
||||
"Frei mit zwei.. äähhh fünf Typen mit Essen!",
|
||||
"Küsse den Himmel!",
|
||||
"20 GOTO 10!",
|
||||
"Verlet-Intregration!",
|
||||
"Peter Griffin!",
|
||||
"Verteile die Erde gut!",
|
||||
"Cogito ergo sum!",
|
||||
"4815162342 Zeilen Quellcode (287228 am 30.7.)!",
|
||||
"8263273626252622872652 Zeilen Quellcode (287228 am 30.7.)!",
|
||||
"Ein Skelett fiel heraus!",
|
||||
"Das Werk von Notch!",
|
||||
"Das Werk von Luzifer!",
|
||||
"Die Summe seiner Teile!",
|
||||
"BTAF war mal gut!",
|
||||
"Ich vermisse ADOM!",
|
||||
"umop-apisdn!",
|
||||
"mureh srednA!",
|
||||
"GTX750Ti!",
|
||||
"Bringe mir Mentos und Cola!",
|
||||
"Finger-leckend!",
|
||||
|
@ -162,25 +141,16 @@ public abstract class Splashes {
|
|||
"Doppelt gepuffert!",
|
||||
"Fan-Fiction!",
|
||||
"Flaxkikare!",
|
||||
"Jason! Jason! Jason!",
|
||||
"Heißer als die Sonne!",
|
||||
"Internet-Funktionalität!",
|
||||
"Autonom!",
|
||||
"Engagiere!",
|
||||
"Fantasie!",
|
||||
"DRR! DRR! DRR!",
|
||||
"Mau! Mau! Mau!",
|
||||
"Stoß es Wurzel runter!",
|
||||
"Regionale Ressourcen!",
|
||||
"Jaa, facepunch!",
|
||||
"Jaa, somethingawful!",
|
||||
"Jaa, /v/!",
|
||||
"Jaa, tigsource!",
|
||||
"Jaa, weinkraftforum!",
|
||||
"Jaa, worldofweinkraft!",
|
||||
"Buu, reddit!",
|
||||
"Jaa, 2pp!",
|
||||
"Goggle anllyticsed:DD :DDD:D!",
|
||||
"Unterstützt jetzt äöü!",
|
||||
"Unterstützt jetzt äöüß!",
|
||||
"Gebt uns Gordon!",
|
||||
"Gib deinem Kellner Trinkgeld!",
|
||||
"Macht viel Spaß!",
|
||||
|
@ -191,15 +161,12 @@ public abstract class Splashes {
|
|||
"Allmächtig!",
|
||||
"Huch!",
|
||||
"...!",
|
||||
"Bienen, Bienen, Bienen, Bienen!",
|
||||
"Jag känner en bot!",
|
||||
"Bienen, Mienen, Minen, W-!",
|
||||
"Dieser Text ist schwer bei der Standard-Auflösung zu lesen, aber auf 1080p ist es in Ordnung!",
|
||||
"Haha, LOL!",
|
||||
"Hampsterdance!",
|
||||
"Schalter und Erze!",
|
||||
"Menger-Schwamm!",
|
||||
"idspispopd!",
|
||||
"Eple (originale Version)!",
|
||||
"So frisch, so sauber!",
|
||||
"Schnell reagierende Portale!",
|
||||
"Probiere den Warp aus!",
|
||||
|
@ -207,10 +174,9 @@ public abstract class Splashes {
|
|||
"Oh, ok, NPCs!",
|
||||
"Endlich mit Leitern!",
|
||||
"Gruselig!",
|
||||
"Spiele Minenkraft, schaue Topgear, bekomme Schwein!",
|
||||
"Darüber gewittert!",
|
||||
"Spring hoch, spring hoch, und komme runter!",
|
||||
"Joel ist klasse!",
|
||||
"Strahlung ist klasse!",
|
||||
"Ein Rätsel, in einen Mythos verwoben!",
|
||||
"Riesige Landeszüge voll mit TNT!",
|
||||
"Willkommen zu deinem Ende! Muahahahahahaha!",
|
||||
|
@ -222,23 +188,21 @@ public abstract class Splashes {
|
|||
"\"Fast nie\" ist ein interessantes Konzept!",
|
||||
"Eine Menge Wahrheitigkeit!",
|
||||
"Der TNT-Block ist ein Spion!",
|
||||
"Turing-vollständig!",
|
||||
"Turing-unvollständig!",
|
||||
"Es ist bahnbrechend!",
|
||||
"Lasst unsere Schlachten beginnen!",
|
||||
"Der Himmel ist die Grenze - oder auch nicht!",
|
||||
"Jeb hat tolle Haare!",
|
||||
"Ryan hat auch tolle Haare!",
|
||||
"Dein PC hat tolle Haare, mach das Ding mal sauber!",
|
||||
"Shen hat auch tolle Haare!",
|
||||
"Gelegentliches Spielen!",
|
||||
"Unbesiegt!",
|
||||
"Ein Bisschen wie Lemmings!",
|
||||
"Folge dem Zug, CJ!",
|
||||
"Macht von Synergie Verwendung!",
|
||||
"Diese Nachricht wird niemals als Splash-Text erscheinen, ist das nicht komisch?",
|
||||
"DungeonQuest ist unfair!",
|
||||
"Diese Nachricht sollte niemals als Splash-Text erscheinen, oder etwa doch? Trololololol!",
|
||||
"0815!",
|
||||
"666!",
|
||||
"Geh zu den fernen Ländern und weiter!",
|
||||
"Tyrion würde es lieben!",
|
||||
"Probiere auch Stellaris!",
|
||||
"Probiere auch Garry's Mod!",
|
||||
"Probiere auch GZDoom!",
|
||||
|
@ -252,52 +216,43 @@ public abstract class Splashes {
|
|||
"Brot ist Schmerz!",
|
||||
"Lese mehr Bücher!",
|
||||
"Khaaaaaaaaan!",
|
||||
"Weniger süchtig machend als TV Tropes!",
|
||||
"Weniger süchtig machend als [zensiert da NSFW]!",
|
||||
"Mehr süchtig machend als Limonade!",
|
||||
"Größer als eine Brotkiste!",
|
||||
"Millionen von Pfirsichen!",
|
||||
"Fnord!",
|
||||
"Dies ist meine echte Gestalt! Muahahahaha!",
|
||||
"Habe Dre vollkommen vergessen!",
|
||||
"Verschwende keine Zeit mit den Klonen!",
|
||||
"Kürbiskopf!",
|
||||
"Hobo humping slobo babe!",
|
||||
"Erstellt von Jeb!",
|
||||
"Verschwende keine Zeit mit \"\"KI\"\"!",
|
||||
"Erstellt von einer Katze!",
|
||||
"Hat kein Ende!",
|
||||
"Endlich vollständig!",
|
||||
"Voll mit Features!",
|
||||
"Stiefel mit dem Fell!",
|
||||
"Stop, hammertime!",
|
||||
"Testificates!",
|
||||
"Test!",
|
||||
"Nicht konventionell!",
|
||||
"Homeomorphisch zu einer 3-Kugel!",
|
||||
"Nicht kommerziell!",
|
||||
"Vermeidet nicht doppelte Verneinung!",
|
||||
"Platziere ALL die Blöcke!",
|
||||
"Macht Walzen!",
|
||||
"Erfüllt Erwartungen!",
|
||||
"Spielen am PC seit 1873!",
|
||||
"Ghoughpteighbteau tchoghs!",
|
||||
"Spielen am PC seit 1992!",
|
||||
"Deja vu!",
|
||||
"Deja vu!",
|
||||
"Hab deine Nase!",
|
||||
"Haley liebt Elan!",
|
||||
"Hat keine Angst vor der großen, schwarzen Fledermaus!",
|
||||
"Benutzt nicht das U-Wort!",
|
||||
"Nicht wirklich leicht!",
|
||||
"Bis nächsten Freitag oder so!",
|
||||
"Von den Straßen von Södermalm!",
|
||||
"150 BPM für 400000 Minuten!",
|
||||
"Von den Straßen von Nibelheim!",
|
||||
"Technologisch!",
|
||||
"Funk Soul Bruder!",
|
||||
"Pumpa kungen!",
|
||||
"Hallo Japan!",
|
||||
"Hallo Japan!",
|
||||
"Hallo Korea!",
|
||||
"Hallo Wales!",
|
||||
"Hallo Polen!",
|
||||
"Hallo China!",
|
||||
"Hallo China!",
|
||||
"Hallo Russland!",
|
||||
"Hallo Griechenland!",
|
||||
"Mein Leben für Aiur!",
|
||||
"Mein Leben für Aiur (warte mal..)!",
|
||||
"Lenny lenny = new Lenny(\"(°^°)\");",
|
||||
"Ich sehe dein Wortschatz hat sich verbessert!",
|
||||
"Wer hat es dort hin getan?",
|
||||
|
@ -305,14 +260,14 @@ public abstract class Splashes {
|
|||
"if not ok then return end",
|
||||
"Mehrfarbig!",
|
||||
"FUNKY LOL",
|
||||
"SOPA bedeutet LOSER in Schwedisch!",
|
||||
"Copyright bedeutet LOSER in allen Sprachen!",
|
||||
"Große Spitze Zähne!",
|
||||
"Mein Shizun bewacht das Tor!",
|
||||
"Mmmph, mmph!",
|
||||
"Füttere keine Avocados an Papageien!",
|
||||
"Füttere keine Landminen an Piranhas!",
|
||||
"Schwerter für alle!",
|
||||
"Bitteee antworte meinem Tweet! (Nutzer wurde gebannt)",
|
||||
".party()!",
|
||||
".party().crash().commitWarcrimes().forTheEmperor()!",
|
||||
"Nehme ihr Kissen!",
|
||||
"Lege diesen Keks weg!",
|
||||
"Extrem gruselig!",
|
||||
|
@ -320,26 +275,21 @@ public abstract class Splashes {
|
|||
"Jetzt mit extra Sprengstoff!",
|
||||
"Nicht kompatibel zu Java 6!",
|
||||
"Oha.",
|
||||
"HURNERJSGER?",
|
||||
"Was'n los, Doc?",
|
||||
"Enthält jetzt 0 zufällige tägliche Katzen!",
|
||||
"Das ist Numberwang!",
|
||||
"((pls rt)) -- Der Vogel ist tot!",
|
||||
"Willst du meinem Server beitreten?",
|
||||
"Mach einen großen Zaun drum herum! Oder du wirst v-",
|
||||
"Lege eine Landmine drüber!",
|
||||
"Eines Tages, irgendwann in der Zukunft, wird mein Werk zitiert werden!",
|
||||
"Eines Tages, irgendwann in der Zukunft, wird mein Werk r3- ÄÄHHH kopiert werden!",
|
||||
"Jetzt mit zusätzlichem Zeug!",
|
||||
"Zusätzliche Dinge!",
|
||||
"Hurra, Atombomben für alle!",
|
||||
"So süß, wie ein schöner Bon-Bon!",
|
||||
"Poppende Tags!",
|
||||
"So süß, wie ein schöner ****!",
|
||||
"Sehr einflussreich in seinem Kreis!",
|
||||
"Jetzt mit Mehrspieler!",
|
||||
"Stehe aus deinem Grab auf!",
|
||||
"Warnung! Ein großes Kampfschiff \"SHEN\" nähert sich schnell!",
|
||||
"Der blaue Krieger hat das Essen beschossen!",
|
||||
"Renn, Feigling! Ich hunger!",
|
||||
"Geschmack ohne Würze!",
|
||||
"Seltsam, aber nicht fremd!",
|
||||
"Härter als Diamanten, Reich wie Creme!",
|
||||
|
@ -355,14 +305,13 @@ public abstract class Splashes {
|
|||
"Bau mir einen Tisch, einen funkigen Tisch!",
|
||||
"Nehm den Aufzug in die Hölle!",
|
||||
"Hör auf vernünftig zu sein, das hier ist das Internet!",
|
||||
"/give @a tnt 67108864 7",
|
||||
"/give * tnt 67108864 7",
|
||||
"Das ist gut für 3D Realms.",
|
||||
"Jeder Computer ist ein Laptop, wenn du tapfer genug bist!",
|
||||
"Mach es alles, jede Sache!",
|
||||
"Wo ist kein Licht, da kann Spinne!",
|
||||
"GNU Terry Pratchett",
|
||||
"Jetzt Java 8!",
|
||||
"MeinKraft!",
|
||||
"Jetzt Java 21!",
|
||||
"Immer noch zu viele Bugs!",
|
||||
"Wird nicht laggen!",
|
||||
"Er hat es ruiniert!",
|
||||
|
@ -370,7 +319,6 @@ public abstract class Splashes {
|
|||
"OpenGL 2.0+ (definitiv nicht unterstützt)!",
|
||||
"Keine Segfaults (nicht) möglich!",
|
||||
"Keine Abstürze (un)möglich!",
|
||||
"Alpha!",
|
||||
"Enthält Bugs!",
|
||||
"Enthält Mäuse!",
|
||||
"Enthält Gewalt!",
|
||||
|
@ -379,6 +327,7 @@ public abstract class Splashes {
|
|||
"Du hattest eine. aufgabe.",
|
||||
"Spinnen können TNT1 A 0 sein!",
|
||||
"RTFM!",
|
||||
"Hex, nur mit mehr Ameisen!",
|
||||
"Vorherrschaft des Imperiums!",
|
||||
"Vorherrschaft der Eldar!",
|
||||
"Vorherrschaft der Drukhari!",
|
||||
|
@ -409,6 +358,11 @@ public abstract class Splashes {
|
|||
"Eimer mit Wasser!",
|
||||
"Hergestellt in Deutschland!",
|
||||
"Hergestellt in China!",
|
||||
"Jetzt mit Einzelspieler!"
|
||||
"Jetzt ohne Einzelspieler!",
|
||||
"Jetzt mit tieferen Schluchten!",
|
||||
"Was bist du denn für ein hübsches Ding?",
|
||||
"[TEXT ZENSIERT]",
|
||||
"Mehr Energie!",
|
||||
"Maximale Energie!"
|
||||
};
|
||||
}
|
|
@ -17,9 +17,9 @@ public enum Style implements Identifyable, Displayable {
|
|||
this.name = name;
|
||||
}
|
||||
|
||||
@Variable(type = IntType.COLOR, name = "color_border_top", category = CVarCategory.GUI, display = "Umrahmung oben / l.")
|
||||
@Variable(type = IntType.COLOR, name = "color_border_top", category = CVarCategory.GUI, display = "Umrahmung A")
|
||||
public int brdr_top;
|
||||
@Variable(type = IntType.COLOR, name = "color_border_btm", category = CVarCategory.GUI, display = "Umrahmung unten / r.")
|
||||
@Variable(type = IntType.COLOR, name = "color_border_btm", category = CVarCategory.GUI, display = "Umrahmung B")
|
||||
public int brdr_btm;
|
||||
|
||||
@Variable(type = IntType.COLOR, name = "color_button_top", category = CVarCategory.GUI, display = "Knopf oben")
|
|
@ -16,14 +16,15 @@ import org.lwjgl.opengl.GL13;
|
|||
|
||||
import client.Client;
|
||||
import client.Client.FileMode;
|
||||
import client.SkinConverter;
|
||||
import client.gui.FileCallback;
|
||||
import client.gui.Font;
|
||||
import client.gui.GuiLoading;
|
||||
import client.gui.element.ActButton;
|
||||
import client.gui.element.Element;
|
||||
import client.gui.element.GuiList;
|
||||
import client.gui.element.Label;
|
||||
import client.gui.element.ListEntry;
|
||||
import client.gui.element.MultiLabel;
|
||||
import client.gui.element.NavButton;
|
||||
import client.gui.element.PressType;
|
||||
import client.gui.element.Slider;
|
||||
|
@ -33,12 +34,13 @@ import client.gui.element.Area;
|
|||
import client.gui.element.ButtonCallback;
|
||||
import client.gui.element.Field;
|
||||
import client.gui.element.FieldCallback;
|
||||
import client.gui.element.TransparentArea;
|
||||
import client.renderer.Drawing;
|
||||
import client.renderer.GlState;
|
||||
import client.renderer.ItemRenderer;
|
||||
import client.renderer.entity.RenderManager;
|
||||
import client.renderer.texture.EntityTexManager;
|
||||
import client.util.FileUtils;
|
||||
import client.util.SkinConverter;
|
||||
import client.vars.CVarCategory;
|
||||
import client.vars.EnumVar;
|
||||
import client.vars.Variable;
|
||||
|
@ -53,7 +55,7 @@ import common.entity.npc.EntityHuman;
|
|||
import common.entity.npc.EntityNPC;
|
||||
import common.entity.npc.SpeciesInfo;
|
||||
import common.entity.types.EntityLiving;
|
||||
import common.init.EntityEggInfo;
|
||||
import common.init.EntityInfo;
|
||||
import common.init.EntityRegistry;
|
||||
import common.init.SpeciesRegistry;
|
||||
import common.init.UniverseRegistry;
|
||||
|
@ -65,7 +67,6 @@ import common.packet.CPacketMessage;
|
|||
import common.packet.CPacketSkin;
|
||||
import common.rng.Random;
|
||||
import common.util.Displayable;
|
||||
import common.util.FileUtils;
|
||||
import common.util.Identifyable;
|
||||
import common.util.Util;
|
||||
|
||||
|
@ -101,7 +102,7 @@ public class GuiChar extends GuiList<GuiChar.SkinEntry>
|
|||
}
|
||||
}
|
||||
|
||||
public void draw(int x, int y, int mouseX, int mouseY, boolean hovered)
|
||||
public void draw(int x, int y, int width, int height, int mouseX, int mouseY, boolean hovered)
|
||||
{
|
||||
String str =
|
||||
(this.skinFile != null ? this.skinFile.getName() : (
|
||||
|
@ -113,7 +114,7 @@ public class GuiChar extends GuiList<GuiChar.SkinEntry>
|
|||
Drawing.drawText(str, x + 64 + 3, y, 0xff000000 | (this.charinfo == null ?
|
||||
0xffffff : this.charinfo.color1 | this.charinfo.color2));
|
||||
if(this.charinfo != null)
|
||||
Drawing.drawText(this.charinfo.skin, x + 64 + 3, y + 18, 0xffc0c0c0);
|
||||
Drawing.drawTextRight(this.charinfo.skin, x + width - 2, y + height - Font.YGLYPH, 0xffc0c0c0);
|
||||
|
||||
GlState.color(1.0F, 1.0F, 1.0F, 1.0F);
|
||||
|
||||
|
@ -252,7 +253,8 @@ public class GuiChar extends GuiList<GuiChar.SkinEntry>
|
|||
private ActButton templateButton;
|
||||
private DragAdjust adjust;
|
||||
private ActButton dimButton;
|
||||
private TransparentArea descLines;
|
||||
private MultiLabel descLines;
|
||||
private ActButton cancelButton;
|
||||
private float yaw = -15.0f;
|
||||
private float pitch = -15.0f;
|
||||
private boolean waiting = true;
|
||||
|
@ -269,7 +271,7 @@ public class GuiChar extends GuiList<GuiChar.SkinEntry>
|
|||
{
|
||||
super.init(width, height);
|
||||
this.waiting = true;
|
||||
this.setDimensions(400, height, 32, height - 32);
|
||||
this.setDimensions(390, height, 32, height - 32);
|
||||
if(this.gm.getRenderManager().gm == null) {
|
||||
this.unload();
|
||||
this.adjust = null;
|
||||
|
@ -277,7 +279,7 @@ public class GuiChar extends GuiList<GuiChar.SkinEntry>
|
|||
}
|
||||
this.currentSkin = this.gm.player != null && !EntityTexManager.hasCustomSkin(this.gm.player.getId()) ? this.gm.player.getChar() : null;
|
||||
this.load(this.gm.player == null ? ModelType.HUMANOID : this.gm.player.getModel(), this.gm.player != null ? this.gm.player.getSpecies() : SpeciesRegistry.CLASSES.get(EntityHuman.class));
|
||||
this.add(new ActButton(4, 4, 194, 24, new ButtonCallback() {
|
||||
this.add(new ActButton(2, 12, 193, 0, new ButtonCallback() {
|
||||
public void use(ActButton elem, PressType action) {
|
||||
GuiChar.this.gm.showFileDialog(FileMode.FILE_LOAD_MULTI, "Skin konvertieren", TEXTURE_FOLDER, new FileCallback() {
|
||||
public void selected(File file) {
|
||||
|
@ -287,7 +289,7 @@ public class GuiChar extends GuiList<GuiChar.SkinEntry>
|
|||
});
|
||||
}
|
||||
}, "Importieren: Standard"));
|
||||
this.add(new ActButton(202, 4, 194, 24, new ButtonCallback() {
|
||||
this.add(new ActButton(197, 12, 193, 0, new ButtonCallback() {
|
||||
public void use(ActButton elem, PressType action) {
|
||||
GuiChar.this.gm.showFileDialog(FileMode.FILE_LOAD_MULTI, "Skin konvertieren (schlank)", TEXTURE_FOLDER, new FileCallback() {
|
||||
public void selected(File file) {
|
||||
|
@ -297,13 +299,13 @@ public class GuiChar extends GuiList<GuiChar.SkinEntry>
|
|||
});
|
||||
}
|
||||
}, "Importieren: Schlank"));
|
||||
this.addSelector("char_filter_species", 400, 4, 300, 24);
|
||||
this.add(new ActButton(4, height - 28, 194, 24, new ButtonCallback() {
|
||||
this.addSelector("char_filter_species", 392, 12, 250, 0);
|
||||
this.add(new ActButton(2, height - 30, 193, 0, new ButtonCallback() {
|
||||
public void use(ActButton elem, PressType action) {
|
||||
GuiChar.this.gm.displayGuiScreen(GuiChar.this);
|
||||
}
|
||||
}, "Neu laden"));
|
||||
this.templateButton = this.add(new ActButton(202, height - 28, 194, 24, new ButtonCallback() {
|
||||
this.templateButton = this.add(new ActButton(197, height - 30, 193, 0, new ButtonCallback() {
|
||||
public void use(ActButton elem, PressType action) {
|
||||
SkinEntry skin = GuiChar.this.getSelected();
|
||||
if(skin != null && skin.getLocation() != null) {
|
||||
|
@ -320,9 +322,9 @@ public class GuiChar extends GuiList<GuiChar.SkinEntry>
|
|||
}
|
||||
catch(Exception e) {
|
||||
if(e instanceof FileNotFoundException)
|
||||
Log.JNI.warn("Textur ist nicht zum Kopieren vorhanden: " + EntityNPC.getSkinTexture(loc));
|
||||
Log.IO.warn("Textur ist nicht zum Kopieren vorhanden: " + EntityNPC.getSkinTexture(loc));
|
||||
else
|
||||
Log.JNI.error(e, "Konnte Textur nicht kopieren");
|
||||
Log.IO.error(e, "Konnte Textur nicht kopieren");
|
||||
}
|
||||
finally {
|
||||
if(in != null) {
|
||||
|
@ -337,20 +339,23 @@ public class GuiChar extends GuiList<GuiChar.SkinEntry>
|
|||
}
|
||||
}
|
||||
}, "Vorlage kopieren"));
|
||||
this.adjust = this.add(new DragAdjust(width / 2 - 230, height - 64 - 640, 460, 640));
|
||||
if(width >= 784 + 460 && height >= 128 + 640)
|
||||
this.adjust = this.add(new DragAdjust(width / 2 - 230, height - 64 - 640, 460, 640));
|
||||
else
|
||||
this.adjust = this.add(new DragAdjust(390 - 115 - 4, height - 32 - 160 - 4, 115, 160));
|
||||
|
||||
this.add(new Label(width - 396, 36, 392, 20, "Spezies: " + (this.gm.player == null ? "<?>" : this.gm.player.getSpecies().name), true));
|
||||
this.add(new NavButton(width - 396, 56, 392, 24, GuiSpecies.INSTANCE, "Spezies ändern"));
|
||||
this.add(new Label(width - 396, 36 + 92, 392, 20, "Klasse: " + (this.gm.player == null || this.gm.player.getSpecies().classEnum == null || this.gm.player.getNpcClass() == null || this.gm.player.getNpcClass().toString().isEmpty() ? "<Keine>" : this.gm.player.getNpcClass().toString()), true))
|
||||
this.add(new Label(width - 390, 48, 388, "Spezies: " + (this.gm.player == null ? "<?>" : this.gm.player.getSpecies().name), true));
|
||||
this.add(new NavButton(width - 390, 48, 388, 0, GuiSpecies.INSTANCE, "Spezies ändern"));
|
||||
this.add(new Label(width - 390, 82, 388, "Klasse: " + (this.gm.player == null || this.gm.player.getSpecies().classEnum == null || this.gm.player.getNpcClass() == null || this.gm.player.getNpcClass().toString().isEmpty() ? "<Keine>" : this.gm.player.getNpcClass().toString()), true))
|
||||
.enabled = this.gm.player != null && this.gm.player.getSpecies().classEnum != null;
|
||||
this.add(new NavButton(width - 396, 56 + 92, 392, 24, GuiClass.INSTANCE, "Klasse ändern"))
|
||||
this.add(new NavButton(width - 390, 82, 388, 0, GuiClass.INSTANCE, "Klasse ändern"))
|
||||
.enabled = this.gm.player != null && this.gm.player.getSpecies().classEnum != null;
|
||||
|
||||
final ActButton[] alignBtns = new ActButton[Alignment.values().length];
|
||||
for (int z = 0; z < Alignment.values().length; z++)
|
||||
{
|
||||
final Alignment align = Alignment.values()[z];
|
||||
alignBtns[z] = this.add(new ActButton(width - 396 + (z % 3) * 132, height - 32 - 28 * 3 + 28 * (z / 3), 128, 24, new ButtonCallback() {
|
||||
alignBtns[z] = this.add(new ActButton(width - 390 + (z % 3) * 130, height - 32 - 20 * 3 + 20 * (z / 3), 128, 0, new ButtonCallback() {
|
||||
public void use(ActButton elem, PressType action) {
|
||||
if(GuiChar.this.gm.player != null) {
|
||||
GuiChar.this.waiting = false;
|
||||
|
@ -363,7 +368,7 @@ public class GuiChar extends GuiList<GuiChar.SkinEntry>
|
|||
}, align.color + align.display));
|
||||
alignBtns[z].enabled = this.gm.player == null || this.gm.player.getAlignment() != align;
|
||||
}
|
||||
this.add(new Slider(width / 2 - 200, height - 28, 400, 24, 1, this.gm.player == null ? 120 : this.gm.player.getMinSize(), this.gm.player == null ? 320 : this.gm.player.getMaxSize(), this.gm.player == null ? 180 : this.gm.player.getDefaultSize(), this.gm.player == null ? 180 : this.gm.player.getCurrentSize(), new SliderCallback() {
|
||||
this.add(new Slider(width - 390, 136, 388, 0, 1, this.gm.player == null ? 120 : this.gm.player.getMinSize(), this.gm.player == null ? 320 : this.gm.player.getMaxSize(), this.gm.player == null ? 180 : this.gm.player.getDefaultSize(), this.gm.player == null ? 180 : this.gm.player.getCurrentSize(), new SliderCallback() {
|
||||
public void use(Slider elem, int value) {
|
||||
if(GuiChar.this.gm.player != null) {
|
||||
GuiChar.this.waiting = false;
|
||||
|
@ -371,10 +376,10 @@ public class GuiChar extends GuiList<GuiChar.SkinEntry>
|
|||
}
|
||||
}
|
||||
}, "Spieler-Größe", "cm")).enabled = this.gm.player == null || this.gm.player.getMinSize() != this.gm.player.getMaxSize();
|
||||
this.add(new Label(width / 2 - 200, 36, 400, 20, "Name", true));
|
||||
this.add(new Label(width - 396, height - 384, 392, 20, "Beschreibung", true));
|
||||
final Area descField = this.add(new Area(width - 396, height - 364, 392, 130, IPlayer.MAX_INFO_LENGTH, ""));
|
||||
this.add(new ActButton(width - 198, height - 28, 194, 24, new ButtonCallback() {
|
||||
this.add(new Label(width - 390, 116, 388, "Name", true));
|
||||
this.add(new Label(width - 390, 170, 388, "Beschreibung", true));
|
||||
final Area descField = this.add(new Area(width - 390, 170, 388, height - 328, IPlayer.MAX_INFO_LENGTH, ""));
|
||||
this.add(new ActButton(width - 195, height - 30, 193, 0, new ButtonCallback() {
|
||||
public void use(ActButton elem, PressType action) {
|
||||
if(GuiChar.this.gm.player != null) {
|
||||
GuiChar.this.gm.displayGuiScreen(GuiLoading.makeWaitTask("Lade Welt ..."));
|
||||
|
@ -384,7 +389,14 @@ public class GuiChar extends GuiList<GuiChar.SkinEntry>
|
|||
}
|
||||
}
|
||||
}, "Charakter erstellen"));
|
||||
this.add(new Field(width / 2 - 200, 36 + 20, 400, 24, IPlayer.MAX_NICK_LENGTH, new FieldCallback() {
|
||||
this.cancelButton = this.add(new ActButton(width - 390, height - 30, 193, 0, new ButtonCallback() {
|
||||
public void use(ActButton elem, PressType action) {
|
||||
if(GuiChar.this.gm.player != null)
|
||||
GuiChar.this.gm.displayGuiScreen(GuiCharacters.INSTANCE);
|
||||
}
|
||||
}, "Abbrechen"));
|
||||
this.setCharsAvailable();
|
||||
this.add(new Field(width - 390, 116, 388, 0, IPlayer.MAX_NICK_LENGTH, new FieldCallback() {
|
||||
public void use(Field elem, FieldAction value) {
|
||||
if(value == FieldAction.SEND || value == FieldAction.UNFOCUS) {
|
||||
String name = elem.getText();
|
||||
|
@ -399,9 +411,9 @@ public class GuiChar extends GuiList<GuiChar.SkinEntry>
|
|||
}, IPlayer.VALID_NICK, this.gm.player == null ? "" : this.gm.player.getCustomNameTag()));
|
||||
this.templateButton.enabled = false;
|
||||
this.dimension = new Random().zrange(UniverseRegistry.getBaseDimensions().size());
|
||||
EntityEggInfo egg = EntityRegistry.SPAWN_EGGS.get(this.gm.player == null ? EntityRegistry.getEntityString(EntityHuman.class) : EntityRegistry.getEntityString(this.gm.player));
|
||||
if(egg != null && egg.origin != null) {
|
||||
Dimension dim = UniverseRegistry.getDimension(egg.origin);
|
||||
EntityInfo egg = EntityRegistry.SPAWN_EGGS.get(this.gm.player == null ? EntityRegistry.getEntityString(EntityHuman.class) : EntityRegistry.getEntityString(this.gm.player));
|
||||
if(egg != null && egg.origin() != null) {
|
||||
Dimension dim = UniverseRegistry.getDimension(egg.origin());
|
||||
if(dim != null) {
|
||||
for(int z = 0; z < UniverseRegistry.getBaseDimensions().size(); z++) {
|
||||
if(UniverseRegistry.getBaseDimensions().get(z).getDimensionId() == dim.getDimensionId()) {
|
||||
|
@ -411,7 +423,7 @@ public class GuiChar extends GuiList<GuiChar.SkinEntry>
|
|||
}
|
||||
}
|
||||
}
|
||||
this.dimButton = this.add(new ActButton(width - 396, height - 220, 392, 24, new ButtonCallback() {
|
||||
this.dimButton = this.add(new ActButton(width - 390, height - 156, 388, 0, new ButtonCallback() {
|
||||
public void use(ActButton elem, PressType mode) {
|
||||
if(mode == PressType.TERTIARY) {
|
||||
GuiChar.this.dimension = new Random().zrange(UniverseRegistry.getBaseDimensions().size());
|
||||
|
@ -427,7 +439,7 @@ public class GuiChar extends GuiList<GuiChar.SkinEntry>
|
|||
GuiChar.this.setDimButton();
|
||||
}
|
||||
}, ""));
|
||||
this.descLines = this.add(new TransparentArea(width - 396, height - 220 + 24, 392, 66, "", false));
|
||||
this.descLines = this.add(new MultiLabel(width - 390, height - 156 + Element.BASE_HEIGHT, 388, 42, "", true));
|
||||
this.setDimButton();
|
||||
}
|
||||
|
||||
|
@ -449,8 +461,10 @@ public class GuiChar extends GuiList<GuiChar.SkinEntry>
|
|||
if(this.adjust != null) {
|
||||
float factor = this.gm.player.width > 2.15f ? 2.15f / this.gm.player.width : 1.0f;
|
||||
factor = this.gm.player.height > 3.0f && 3.0f / this.gm.player.height < factor ? 3.0f / this.gm.player.height : factor;
|
||||
drawEntity(400 + (this.gm.fb_x - 400 - 400) / 2, this.gm.fb_y - 160, 160.0f * factor
|
||||
, this.yaw, this.pitch, this.gm.player);
|
||||
if(this.gm.fb_x >= 784 + 460 && this.gm.fb_y >= 128 + 640)
|
||||
drawEntity(400 + (this.gm.fb_x - 400 - 400) / 2, this.gm.fb_y - 160, 160.0f * factor, this.yaw, this.pitch, this.gm.player);
|
||||
else
|
||||
drawEntity(390 - 4 - 115 / 2, this.gm.fb_y - 60, 40.0f * factor, this.yaw, this.pitch, this.gm.player);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -470,6 +484,11 @@ public class GuiChar extends GuiList<GuiChar.SkinEntry>
|
|||
return "Charakter anpassen";
|
||||
}
|
||||
|
||||
public void setCharsAvailable() {
|
||||
if(this.cancelButton != null)
|
||||
this.cancelButton.enabled = !this.gm.characterList.isEmpty();
|
||||
}
|
||||
|
||||
public static BufferedImage loadSkin(File file)
|
||||
{
|
||||
BufferedImage img = null;
|
||||
|
@ -537,11 +556,6 @@ public class GuiChar extends GuiList<GuiChar.SkinEntry>
|
|||
|
||||
this.elements.clear();
|
||||
}
|
||||
|
||||
public int getListWidth()
|
||||
{
|
||||
return 400 - 20;
|
||||
}
|
||||
|
||||
public int getSlotHeight()
|
||||
{
|
|
@ -1,18 +1,21 @@
|
|||
package client.gui.character;
|
||||
|
||||
import client.gui.Font;
|
||||
import client.gui.GuiConfirm;
|
||||
import client.gui.GuiMenu;
|
||||
import client.gui.element.ActButton;
|
||||
import client.gui.element.Area;
|
||||
import client.gui.element.ButtonCallback;
|
||||
import client.gui.element.GuiList;
|
||||
import client.gui.element.ListEntry;
|
||||
import client.gui.element.NavButton;
|
||||
import client.gui.element.PressType;
|
||||
import client.gui.element.TransparentArea;
|
||||
import client.renderer.Drawing;
|
||||
import common.color.TextColor;
|
||||
import common.entity.npc.PlayerCharacter;
|
||||
import common.packet.CPacketAction;
|
||||
import common.packet.CPacketAction.Action;
|
||||
import common.util.ExtMath;
|
||||
|
||||
public class GuiCharacters extends GuiList<GuiCharacters.CharacterEntry> implements ButtonCallback
|
||||
{
|
||||
|
@ -27,18 +30,18 @@ public class GuiCharacters extends GuiList<GuiCharacters.CharacterEntry> impleme
|
|||
this.initial = initial;
|
||||
}
|
||||
|
||||
public void draw(int x, int y, int mouseX, int mouseY, boolean hovered)
|
||||
public void draw(int x, int y, int width, int height, int mouseX, int mouseY, boolean hovered)
|
||||
{
|
||||
if(this.initial)
|
||||
Drawing.drawRect(x, y, 1, 36, 0xffaf0000);
|
||||
String str = this.character == null ? TextColor.BLUE + "[" + TextColor.CYAN + "+" + TextColor.BLUE + "]" :
|
||||
String.format(TextColor.GREEN + "Level " + TextColor.DGREEN + "%d " + TextColor.YELLOW + "%s " + TextColor.VIOLET + "%s" + TextColor.GRAY + " [%s%s" + TextColor.GRAY + "]",
|
||||
character.level, character.type, character.name, character.align.color, character.align.display);
|
||||
String.format(TextColor.GREEN + "Level " + TextColor.DGREEN + "%d " + TextColor.YELLOW + "%s " + TextColor.VIOLET + "%s",
|
||||
character.level(), character.type(), character.name());
|
||||
String pos = this.character == null ? TextColor.BROWN + "Neuen Charakter erstellen" :
|
||||
String.format(TextColor.NEON + "%s " + TextColor.GRAY + "bei " + TextColor.ACID + "%d" + TextColor.GRAY + ", " + TextColor.ACID + "%d" + TextColor.GRAY + ", " + TextColor.ACID + "%d",
|
||||
character.dim, character.pos.getX(), character.pos.getY(), character.pos.getZ());
|
||||
character.dim(), character.pos().getX(), character.pos().getY(), character.pos().getZ());
|
||||
Drawing.drawText(str, x + 3, y, 0xffffffff);
|
||||
Drawing.drawText(pos, x + 3, y + 16, 0xffffffff);
|
||||
Drawing.drawText(pos, x + 3, y + height - Font.YGLYPH, 0xffffffff);
|
||||
}
|
||||
|
||||
public void select(boolean dclick, int mx, int my)
|
||||
|
@ -51,7 +54,7 @@ public class GuiCharacters extends GuiList<GuiCharacters.CharacterEntry> impleme
|
|||
|
||||
public static final GuiCharacters INSTANCE = new GuiCharacters();
|
||||
|
||||
private TransparentArea descField;
|
||||
private Area descField;
|
||||
private ActButton actionButtom;
|
||||
private ActButton deleteButtom;
|
||||
|
||||
|
@ -60,40 +63,34 @@ public class GuiCharacters extends GuiList<GuiCharacters.CharacterEntry> impleme
|
|||
|
||||
private void updateButtons() {
|
||||
CharacterEntry entry = this.getSelected();
|
||||
this.descField.setText(entry == null ? "" : (entry.character == null ? "*neuer Charakter*" : (entry.character.info == null ? "*keine Beschreibung vorhanden*" : this.getSelected().character.info)));
|
||||
this.descField.setText(entry == null ? "" : (entry.character == null ? "*neuer Charakter*" : String.format(TextColor.GRAY + "[%s%s" + TextColor.GRAY + "]\n" + TextColor.RESET + "%s", entry.character.align().color, entry.character.align().display, entry.character.info() == null ? "*keine Beschreibung vorhanden*" : this.getSelected().character.info())));
|
||||
this.actionButtom.setText(entry != null && entry.character == null ? "Charakter erstellen" : "Charakter spielen");
|
||||
this.actionButtom.enabled = entry != null && !entry.initial;
|
||||
this.deleteButtom.enabled = entry != null && entry.character != null && !entry.initial;
|
||||
this.deleteButtom.enabled = !this.gm.charEditor && entry != null && entry.character != null && !entry.initial;
|
||||
}
|
||||
|
||||
public void init(int width, int height)
|
||||
{
|
||||
super.init(width, height);
|
||||
this.setDimensions(600, height, 32, height - 32);
|
||||
this.setDimensions(width - 300, height, 32, height - 32);
|
||||
this.elements.clear();
|
||||
if(this.gm.getNetHandler() != null) {
|
||||
int initialSelection = this.gm.getNetHandler().getSelectedCharacter();
|
||||
for(PlayerCharacter character : this.gm.getNetHandler().getCharacterList()) {
|
||||
this.elements.add(new CharacterEntry(initialSelection == this.elements.size() ? new PlayerCharacter(character.name, character.info, character.align, this.gm.player.worldObj.dimension.getFormattedName(false), this.gm.player.getPosition(), character.type, this.gm.player.experienceLevel) : character, initialSelection == this.elements.size()));
|
||||
}
|
||||
this.elements.add(new CharacterEntry(null, false));
|
||||
this.setSelected(initialSelection);
|
||||
}
|
||||
this.descField = this.add(new TransparentArea(width - 390, 62, 380, height - 124, "", false));
|
||||
this.deleteButtom = this.add(new ActButton(width / 2 - 304, height - 28, 200, 24, this, "Charakter löschen"));
|
||||
this.actionButtom = this.add(new ActButton(width / 2 - 100, height - 28, 200, 24, this, ""));
|
||||
this.add(new NavButton(width / 2 + 104, height - 28, 200, 24, GuiMenu.INSTANCE, "Abbrechen"));
|
||||
int selected = this.gm.selectedCharacter;
|
||||
for(PlayerCharacter character : this.gm.characterList) {
|
||||
this.elements.add(new CharacterEntry(selected == this.elements.size() ? new PlayerCharacter(character.name(), character.info(), character.align(), this.gm.player.worldObj.dimension.getFormattedName(false), this.gm.player.getPosition(), character.type(), this.gm.player.experienceLevel) : character, selected == this.elements.size()));
|
||||
}
|
||||
if(!this.gm.charEditor)
|
||||
this.elements.add(new CharacterEntry(null, false));
|
||||
this.setSelected(ExtMath.clampi(selected, -1, this.elements.size() - 1));
|
||||
this.descField = this.add(new Area(width - 300, 32, 300, height - 64, ""));
|
||||
this.deleteButtom = this.add(new ActButton(width / 2 - 302, height - 30, 200, 0, this, "Charakter löschen"));
|
||||
this.actionButtom = this.add(new ActButton(width / 2 - 100, height - 30, 200, 0, this, ""));
|
||||
this.add(new NavButton(width / 2 + 102, height - 30, 200, 0, this.gm.charEditor ? GuiChar.INSTANCE : GuiMenu.INSTANCE, this.gm.charEditor ? "Zurück" : "Abbrechen"));
|
||||
this.updateButtons();
|
||||
}
|
||||
|
||||
public String getTitle() {
|
||||
return "Charakter anpassen";
|
||||
return "Charakter auswählen";
|
||||
}
|
||||
|
||||
public int getListWidth()
|
||||
{
|
||||
return 560;
|
||||
}
|
||||
|
||||
public int getSlotHeight()
|
||||
{
|
||||
|
@ -107,7 +104,7 @@ public class GuiCharacters extends GuiList<GuiCharacters.CharacterEntry> impleme
|
|||
if(entry.character == null)
|
||||
this.gm.getNetHandler().addToSendQueue(new CPacketAction(CPacketAction.Action.OPEN_EDITOR));
|
||||
else
|
||||
this.gm.getNetHandler().addToSendQueue(new CPacketAction(CPacketAction.Action.SELECT_CHARACTER, this.selectedElement));
|
||||
this.gm.getNetHandler().addToSendQueue(new CPacketAction(GuiCharacters.this.gm.charEditor ? Action.CANCEL_EDITOR : CPacketAction.Action.SELECT_CHARACTER, this.selectedElement));
|
||||
}
|
||||
else if(elem == this.deleteButtom && entry.character != null) {
|
||||
this.gm.displayGuiScreen(new GuiConfirm(new GuiConfirm.Callback() {
|
||||
|
@ -116,7 +113,7 @@ public class GuiCharacters extends GuiList<GuiCharacters.CharacterEntry> impleme
|
|||
GuiCharacters.this.gm.getNetHandler().addToSendQueue(new CPacketAction(CPacketAction.Action.DELETE_CHARACTER, GuiCharacters.this.selectedElement));
|
||||
GuiCharacters.this.gm.displayGuiScreen(GuiCharacters.this);
|
||||
}
|
||||
}, "Möchtest du diesen Charakter wirklich löschen?", "Der Fortschritt, die Gegenstände und die Historie von \"" + entry.character.name + "\" werden für imer verloren sein!", "Löschen", "Abbrechen"));
|
||||
}, "Möchtest du diesen Charakter wirklich löschen?", "Der Fortschritt, die Gegenstände und die Historie\nvon \"" + entry.character.name() + "\" werden für immer verloren sein!", "Löschen", "Abbrechen"));
|
||||
}
|
||||
}
|
||||
}
|
|
@ -20,7 +20,7 @@ public class GuiClass extends GuiList<GuiClass.ClassEntry> implements ButtonCall
|
|||
this.clazz = clazz;
|
||||
}
|
||||
|
||||
public void draw(int x, int y, int mouseX, int mouseY, boolean hovered)
|
||||
public void draw(int x, int y, int width, int height, int mouseX, int mouseY, boolean hovered)
|
||||
{
|
||||
if(GuiClass.this.gm.player != null && this.clazz == GuiClass.this.gm.player.getNpcClass())
|
||||
Drawing.drawRect(x, y, 1, 44, 0xffaf0000);
|
||||
|
@ -44,24 +44,19 @@ public class GuiClass extends GuiList<GuiClass.ClassEntry> implements ButtonCall
|
|||
public void init(int width, int height)
|
||||
{
|
||||
super.init(width, height);
|
||||
this.setDimensions(400, height, 32, height - 32);
|
||||
this.setDimensions(width, height, 32, height - 32);
|
||||
this.elements.clear();
|
||||
if(this.gm.player != null && this.gm.player.getSpecies().classEnum != null)
|
||||
for(Enum clazz : this.gm.player.getSpecies().classEnum.getEnumConstants()) {
|
||||
this.elements.add(new ClassEntry(clazz));
|
||||
}
|
||||
this.add(new NavButton(width - 198 * 2, height - 28, 194, 24, GuiChar.INSTANCE, "Zurück"));
|
||||
this.selectButton = this.add(new ActButton(width - 198, height - 28, 194, 24, this, "Klasse ändern"));
|
||||
this.add(new NavButton(width / 2 - 195, height - 30, 194, 0, GuiChar.INSTANCE, "Zurück"));
|
||||
this.selectButton = this.add(new ActButton(width / 2 + 1, height - 30, 194, 0, this, "Klasse ändern"));
|
||||
}
|
||||
|
||||
public String getTitle() {
|
||||
return "Klasse wählen";
|
||||
}
|
||||
|
||||
public int getListWidth()
|
||||
{
|
||||
return 400 - 20;
|
||||
}
|
||||
|
||||
public int getSlotHeight()
|
||||
{
|
|
@ -23,7 +23,7 @@ public class GuiSpecies extends GuiList<GuiSpecies.SpeciesEntry> implements Butt
|
|||
this.species = species;
|
||||
}
|
||||
|
||||
public void draw(int x, int y, int mouseX, int mouseY, boolean hovered)
|
||||
public void draw(int x, int y, int width, int height, int mouseX, int mouseY, boolean hovered)
|
||||
{
|
||||
if(GuiSpecies.this.gm.player != null && this.species == GuiSpecies.this.gm.player.getSpecies())
|
||||
Drawing.drawRect(x, y, 1, 44, 0xffaf0000);
|
||||
|
@ -49,23 +49,18 @@ public class GuiSpecies extends GuiList<GuiSpecies.SpeciesEntry> implements Butt
|
|||
public void init(int width, int height)
|
||||
{
|
||||
super.init(width, height);
|
||||
this.setDimensions(400, height, 32, height - 32);
|
||||
this.setDimensions(width, height, 32, height - 32);
|
||||
this.elements.clear();
|
||||
for(SpeciesInfo species : SpeciesRegistry.SPECIMEN) {
|
||||
this.elements.add(new SpeciesEntry(species));
|
||||
}
|
||||
this.add(new NavButton(width - 198 * 2, height - 28, 194, 24, GuiChar.INSTANCE, "Zurück"));
|
||||
this.selectButton = this.add(new ActButton(width - 198, height - 28, 194, 24, this, "Spezies ändern"));
|
||||
this.add(new NavButton(width / 2 - 195, height - 30, 194, 0, GuiChar.INSTANCE, "Zurück"));
|
||||
this.selectButton = this.add(new ActButton(width / 2 + 1, height - 30, 194, 0, this, "Spezies ändern"));
|
||||
}
|
||||
|
||||
public String getTitle() {
|
||||
return "Spezies wählen";
|
||||
}
|
||||
|
||||
public int getListWidth()
|
||||
{
|
||||
return 400 - 20;
|
||||
}
|
||||
|
||||
public int getSlotHeight()
|
||||
{
|
|
@ -6,6 +6,7 @@ import java.util.Set;
|
|||
import org.lwjgl.opengl.GL11;
|
||||
import org.lwjgl.opengl.GL13;
|
||||
|
||||
import client.gui.Font;
|
||||
import client.gui.Gui;
|
||||
import client.gui.element.InventoryButton;
|
||||
import client.renderer.Drawing;
|
||||
|
@ -42,7 +43,7 @@ public abstract class GuiContainer extends Gui
|
|||
|
||||
private static final List<ItemStack> ITEM_LIST = Lists.<ItemStack>newArrayList();
|
||||
|
||||
private static CheatTab selectedTab = CheatTab.tabBlocks;
|
||||
private static CheatTab selectedTab = CheatTab.BLOCKS;
|
||||
// /** The location of the inventory background texture */
|
||||
// protected static final String inventoryBackground = "textures/gui/inventory.png";
|
||||
|
||||
|
@ -374,20 +375,20 @@ public abstract class GuiContainer extends Gui
|
|||
if (this.draggedStack != null && this.isRightMouseClick)
|
||||
{
|
||||
itemstack = itemstack.copy();
|
||||
itemstack.stackSize = ExtMath.ceilf((float)itemstack.stackSize / 2.0F);
|
||||
itemstack.size = ExtMath.ceilf((float)itemstack.size / 2.0F);
|
||||
}
|
||||
else if (this.dragSplitting && this.dragSplittingSlots.size() > 1)
|
||||
{
|
||||
itemstack = itemstack.copy();
|
||||
itemstack.stackSize = this.dragSplittingRemnant;
|
||||
itemstack.size = this.dragSplittingRemnant;
|
||||
|
||||
if (itemstack.stackSize == 0)
|
||||
if (itemstack.size == 0)
|
||||
{
|
||||
s = "" + TextColor.YELLOW + "0";
|
||||
}
|
||||
}
|
||||
else if(itemstack == this.cheatStack) {
|
||||
s = TextColor.DGREEN + "+" + TextColor.GREEN + ItemStack.formatAmount(itemstack.stackSize);
|
||||
s = TextColor.DGREEN + "+" + TextColor.GREEN + ItemStack.formatAmount(itemstack.size);
|
||||
}
|
||||
|
||||
this.drawItemStack(itemstack, mouseX - j2, mouseY - k2, s);
|
||||
|
@ -518,7 +519,7 @@ public abstract class GuiContainer extends Gui
|
|||
if (slotIn == this.clickedSlot && this.draggedStack != null && this.isRightMouseClick && itemstack != null)
|
||||
{
|
||||
itemstack = itemstack.copy();
|
||||
itemstack.stackSize /= 2;
|
||||
itemstack.size /= 2;
|
||||
}
|
||||
else if (this.dragSplitting && this.dragSplittingSlots.contains(slotIn) && itemstack1 != null)
|
||||
{
|
||||
|
@ -531,18 +532,18 @@ public abstract class GuiContainer extends Gui
|
|||
{
|
||||
itemstack = itemstack1.copy();
|
||||
flag = true;
|
||||
Container.computeStackSize(this.dragSplittingSlots, this.dragSplittingLimit, itemstack, slotIn.getStack() == null ? 0 : slotIn.getStack().stackSize);
|
||||
Container.computeStackSize(this.dragSplittingSlots, this.dragSplittingLimit, itemstack, slotIn.getStack() == null ? 0 : slotIn.getStack().size);
|
||||
|
||||
if (itemstack.stackSize > itemstack.getMaxStackSize())
|
||||
if (itemstack.size > itemstack.getMaxStackSize())
|
||||
{
|
||||
s = TextColor.YELLOW + ItemStack.formatAmount(itemstack.getMaxStackSize());
|
||||
itemstack.stackSize = itemstack.getMaxStackSize();
|
||||
itemstack.size = itemstack.getMaxStackSize();
|
||||
}
|
||||
|
||||
if (itemstack.stackSize > slotIn.getItemStackLimit(itemstack))
|
||||
if (itemstack.size > slotIn.getItemStackLimit(itemstack))
|
||||
{
|
||||
s = TextColor.YELLOW + ItemStack.formatAmount(slotIn.getItemStackLimit(itemstack));
|
||||
itemstack.stackSize = slotIn.getItemStackLimit(itemstack);
|
||||
itemstack.size = slotIn.getItemStackLimit(itemstack);
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -593,25 +594,25 @@ public abstract class GuiContainer extends Gui
|
|||
|
||||
if (itemstack != null && this.dragSplitting)
|
||||
{
|
||||
this.dragSplittingRemnant = itemstack.stackSize;
|
||||
this.dragSplittingRemnant = itemstack.size;
|
||||
|
||||
for (Slot slot : this.dragSplittingSlots)
|
||||
{
|
||||
ItemStack itemstack1 = itemstack.copy();
|
||||
int i = slot.getStack() == null ? 0 : slot.getStack().stackSize;
|
||||
int i = slot.getStack() == null ? 0 : slot.getStack().size;
|
||||
Container.computeStackSize(this.dragSplittingSlots, this.dragSplittingLimit, itemstack1, i);
|
||||
|
||||
if (itemstack1.stackSize > itemstack1.getMaxStackSize())
|
||||
if (itemstack1.size > itemstack1.getMaxStackSize())
|
||||
{
|
||||
itemstack1.stackSize = itemstack1.getMaxStackSize();
|
||||
itemstack1.size = itemstack1.getMaxStackSize();
|
||||
}
|
||||
|
||||
if (itemstack1.stackSize > slot.getItemStackLimit(itemstack1))
|
||||
if (itemstack1.size > slot.getItemStackLimit(itemstack1))
|
||||
{
|
||||
itemstack1.stackSize = slot.getItemStackLimit(itemstack1);
|
||||
itemstack1.size = slot.getItemStackLimit(itemstack1);
|
||||
}
|
||||
|
||||
this.dragSplittingRemnant -= itemstack1.stackSize - i;
|
||||
this.dragSplittingRemnant -= itemstack1.size - i;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -644,7 +645,7 @@ public abstract class GuiContainer extends Gui
|
|||
if(this.cheatStack != null) {
|
||||
Slot slot = this.getSlotAtPosition(mouseX, mouseY);
|
||||
if((mouseButton == 0 || mouseButton == 1) && slot != null && this.gm.player != null && slot.inventory == this.gm.player.inventory)
|
||||
this.gm.player.client.addToSendQueue(new CPacketCheat(this.cheatStack, slot.getIndex(), mouseButton == 0 && this.cheatStack.stackSize > 1));
|
||||
this.gm.player.client.addToSendQueue(new CPacketCheat(this.cheatStack, slot.getIndex(), mouseButton == 0 && this.cheatStack.size > 1));
|
||||
if(mouseButton != 1 && !this.gm.ctrl())
|
||||
this.cheatStack = null;
|
||||
return;
|
||||
|
@ -811,7 +812,7 @@ public abstract class GuiContainer extends Gui
|
|||
// }
|
||||
// }
|
||||
// else
|
||||
if (this.dragSplitting && slot != null && itemstack != null && itemstack.stackSize > this.dragSplittingSlots.size() && Container.canAddItemToSlot(slot, itemstack, true) && slot.isItemValid(itemstack) && this.inventorySlots.canDragIntoSlot(slot))
|
||||
if (this.dragSplitting && slot != null && itemstack != null && itemstack.size > this.dragSplittingSlots.size() && Container.canAddItemToSlot(slot, itemstack, true) && slot.isItemValid(itemstack) && this.inventorySlots.canDragIntoSlot(slot))
|
||||
{
|
||||
this.dragSplittingSlots.add(slot);
|
||||
this.updateDragSplitting();
|
||||
|
@ -1077,7 +1078,7 @@ public abstract class GuiContainer extends Gui
|
|||
|
||||
if (this.gm != null && this.gm.player != null && (!this.gm.player.isEntityAlive() || this.gm.player.dead))
|
||||
{
|
||||
this.gm.player.closeScreen();
|
||||
this.gm.displayGuiScreen(null);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1090,13 +1091,13 @@ public abstract class GuiContainer extends Gui
|
|||
{
|
||||
if (stack != null)
|
||||
{
|
||||
if (stack.stackSize != 1 || text != null)
|
||||
if (stack.size != 1 || text != null)
|
||||
{
|
||||
String s = text == null ? ItemStack.formatAmount(stack.stackSize) : text;
|
||||
String s = text == null ? ItemStack.formatAmount(stack.size) : text;
|
||||
|
||||
if (text == null && stack.stackSize < 1)
|
||||
if (text == null && stack.size < 1)
|
||||
{
|
||||
s = TextColor.RED + ItemStack.formatAmount(stack.stackSize);
|
||||
s = TextColor.RED + ItemStack.formatAmount(stack.size);
|
||||
}
|
||||
// this.drawString(s, , );
|
||||
// Vec2i size = Drawing.txt_size(0, 0, 0, 0, 65536, 65536, s);
|
||||
|
@ -1104,7 +1105,7 @@ public abstract class GuiContainer extends Gui
|
|||
// int y = ;
|
||||
// x = x * 2 + this.container_x;
|
||||
// y = y * 2 + this.container_y;
|
||||
Drawing.drawTextRight(s, xPosition + 32, yPosition + 17, 0xffffffff);
|
||||
Drawing.drawTextRight(s, xPosition + 32, yPosition + 33 - Font.YGLYPH, 0xffffffff);
|
||||
}
|
||||
|
||||
if (stack.isItemDamaged())
|
||||
|
@ -1151,7 +1152,7 @@ public abstract class GuiContainer extends Gui
|
|||
protected void drawTab(CheatTab tab)
|
||||
{
|
||||
this.itemRender.zLevel = 100.0F;
|
||||
ItemStack itemstack = tab.getIconItemStack();
|
||||
ItemStack itemstack = tab.getIcon();
|
||||
GlState.enableDepth();
|
||||
this.itemRender.renderItemAndEffectIntoGUI(itemstack, this.xSize + 2 + 18 * tab.getHorizontal() + 1, 9 * 18 + 4 + 20 * tab.getVertical() + 1);
|
||||
this.itemRender.zLevel = 0.0F;
|
||||
|
@ -1176,7 +1177,7 @@ public abstract class GuiContainer extends Gui
|
|||
selectedTab = tab;
|
||||
this.dragSplittingSlots.clear();
|
||||
ITEM_LIST.clear();
|
||||
tab.displayAllReleventItems(ITEM_LIST);
|
||||
tab.filter(ITEM_LIST);
|
||||
|
||||
this.currentScroll = 0.0F;
|
||||
}
|
||||
|
@ -1201,7 +1202,7 @@ public abstract class GuiContainer extends Gui
|
|||
}
|
||||
else {
|
||||
this.cheatStack = ITEM_LIST.get(i1).copy();
|
||||
this.cheatStack.stackSize = full ? this.cheatStack.getMaxStackSize() : 1;
|
||||
this.cheatStack.size = full ? this.cheatStack.getMaxStackSize() : 1;
|
||||
}
|
||||
return true;
|
||||
}
|
22
client/src/main/java/client/gui/container/GuiCrafting.java
Executable file
22
client/src/main/java/client/gui/container/GuiCrafting.java
Executable file
|
@ -0,0 +1,22 @@
|
|||
package client.gui.container;
|
||||
|
||||
import common.block.tech.BlockWorkbench;
|
||||
import common.inventory.ContainerWorkbench;
|
||||
import common.inventory.InventoryPlayer;
|
||||
import common.util.BlockPos;
|
||||
import common.world.World;
|
||||
|
||||
public class GuiCrafting extends GuiContainer {
|
||||
private final BlockWorkbench type;
|
||||
|
||||
public GuiCrafting(InventoryPlayer playerInv, World worldIn, BlockWorkbench type) {
|
||||
super(new ContainerWorkbench(playerInv, worldIn, BlockPos.ORIGIN, type));
|
||||
this.type = type;
|
||||
this.ySize = 112 + 18 * this.type.getSize();
|
||||
}
|
||||
|
||||
public void drawGuiContainerForegroundLayer() {
|
||||
this.drawString("Handwerk (" + this.type.getDisplay() + ")", 26, 6);
|
||||
this.drawString("Inventar", 8, this.ySize - 96 + 2);
|
||||
}
|
||||
}
|
|
@ -5,7 +5,7 @@ import common.enchantment.Enchantment;
|
|||
import common.inventory.ContainerEnchantment;
|
||||
import common.inventory.InventoryPlayer;
|
||||
import common.rng.Random;
|
||||
import common.tileentity.IWorldNameable;
|
||||
import common.util.Pair;
|
||||
import common.world.World;
|
||||
|
||||
public class GuiEnchant extends GuiContainer
|
||||
|
@ -19,7 +19,7 @@ public class GuiEnchant extends GuiContainer
|
|||
private final Random nameRand = new Random();
|
||||
private final Random random = new Random();
|
||||
private final ContainerEnchantment container;
|
||||
private final IWorldNameable table;
|
||||
private final String title;
|
||||
|
||||
// public int field_147073_u;
|
||||
// public float field_147071_v;
|
||||
|
@ -30,12 +30,12 @@ public class GuiEnchant extends GuiContainer
|
|||
// public float field_147076_A;
|
||||
// ItemStack field_147077_B;
|
||||
|
||||
public GuiEnchant(InventoryPlayer inventory, World worldIn, IWorldNameable table)
|
||||
public GuiEnchant(InventoryPlayer inventory, World worldIn, String title)
|
||||
{
|
||||
super(new ContainerEnchantment(inventory, worldIn));
|
||||
this.playerInventory = inventory;
|
||||
this.container = (ContainerEnchantment)this.inventorySlots;
|
||||
this.table = table;
|
||||
this.title = title;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -43,7 +43,7 @@ public class GuiEnchant extends GuiContainer
|
|||
*/
|
||||
public void drawGuiContainerForegroundLayer()
|
||||
{
|
||||
this.drawString(this.table.getCommandName(), 12, 5);
|
||||
this.drawString(this.title, 12, 5);
|
||||
this.drawString(this.playerInventory.getCommandName(), 8, this.ySize - 96 + 2);
|
||||
}
|
||||
|
||||
|
@ -89,14 +89,14 @@ public class GuiEnchant extends GuiContainer
|
|||
*/
|
||||
public void drawGuiContainerBackgroundLayer()
|
||||
{
|
||||
this.nameRand.setSeed((long)this.container.xpSeed);
|
||||
this.nameRand.setSeed((long)this.container.seed);
|
||||
|
||||
for (int l = 0; l < 3; ++l)
|
||||
{
|
||||
int i1 = 60;
|
||||
int j1 = i1 + 20;
|
||||
String s = this.getRandomName();
|
||||
int l1 = this.container.enchantLevels[l];
|
||||
int l1 = this.container.mana[l];
|
||||
|
||||
if (l1 == 0)
|
||||
{
|
||||
|
@ -107,7 +107,7 @@ public class GuiEnchant extends GuiContainer
|
|||
String s1 = "" + l1;
|
||||
int i2 = 6839882;
|
||||
|
||||
if (/* (k < l + 1 || */ this.gm.player.experienceLevel < l1) // && !this.gm.thePlayer.creative)
|
||||
if (/* (k < l + 1 || */ this.gm.player.getManaPoints() < l1) // && !this.gm.thePlayer.creative)
|
||||
{
|
||||
this.rect(i1, 14 + 19 * l, 108, 19, 0x400000);
|
||||
this.rect(i1 + 1, 15 + 19 * l, 16, 16, 0x200000);
|
||||
|
@ -150,19 +150,16 @@ public class GuiEnchant extends GuiContainer
|
|||
|
||||
for (int j = 0; j < 3; ++j)
|
||||
{
|
||||
int k = this.container.enchantLevels[j];
|
||||
int l = this.container.enchantmentIds[j];
|
||||
int k = this.container.mana[j];
|
||||
Pair<Enchantment, Integer> l = this.container.ench[j];
|
||||
int i1 = j + 1;
|
||||
|
||||
if (this.isPointInRegion(60, 14 + 19 * j, 108, 17, mouseX, mouseY) && k > 0 && l >= 0)
|
||||
if (this.isPointInRegion(60, 14 + 19 * j, 108, 17, mouseX, mouseY) && k > 0 && l != null)
|
||||
{
|
||||
StringBuilder sb = new StringBuilder();
|
||||
|
||||
if (l >= 0 && Enchantment.getEnchantmentById(l & 255) != null)
|
||||
{
|
||||
String s = Enchantment.getEnchantmentById(l & 255).getFormattedName((l & 65280) >> 8);
|
||||
sb.append(TextColor.WHITE + s + " . . . ?");
|
||||
}
|
||||
String s = l.first().getFormattedName(l.second());
|
||||
sb.append(TextColor.WHITE + s + " . . . ?");
|
||||
|
||||
// if (!flag)
|
||||
// {
|
||||
|
@ -171,9 +168,9 @@ public class GuiEnchant extends GuiContainer
|
|||
// sb.append("\n");
|
||||
// }
|
||||
|
||||
if (this.gm.player.experienceLevel < k)
|
||||
if (this.gm.player.getManaPoints() < k)
|
||||
{
|
||||
sb.append((sb.length() != 0 ? "\n" : "") + TextColor.RED + String.format("Erfahrungsstufe %d erforderlich", this.container.enchantLevels[j]));
|
||||
sb.append((sb.length() != 0 ? "\n" : "") + TextColor.RED + String.format("%d Mana erforderlich", this.container.mana[j]));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -199,11 +196,11 @@ public class GuiEnchant extends GuiContainer
|
|||
|
||||
if (i1 == 1)
|
||||
{
|
||||
s1 = "1 Erfahrungsstufe";
|
||||
s1 = "1 Manapunkt";
|
||||
}
|
||||
else
|
||||
{
|
||||
s1 = String.format("%d Erfahrungsstufen", i1);
|
||||
s1 = String.format("%d Manapunkte", i1);
|
||||
}
|
||||
|
||||
sb.append((sb.length() != 0 ? "\n" : "") + TextColor.LGRAY.toString() + "" + s1);
|
|
@ -1,45 +1,26 @@
|
|||
package client.gui.container;
|
||||
|
||||
import client.Client;
|
||||
import common.entity.animal.EntityHorse;
|
||||
import common.inventory.ContainerHorseInventory;
|
||||
import common.entity.Entity;
|
||||
import common.inventory.ContainerEntityInventory;
|
||||
import common.inventory.IInventory;
|
||||
|
||||
|
||||
public class GuiHorse extends GuiContainer
|
||||
public class GuiEntity extends GuiContainer
|
||||
{
|
||||
// private static final String horseGuiTextures = "textures/gui/horse.png";
|
||||
|
||||
/** The player inventory bound to this GUI. */
|
||||
private IInventory playerInventory;
|
||||
private IInventory entityInventory;
|
||||
|
||||
/** The horse inventory bound to this GUI. */
|
||||
private IInventory horseInventory;
|
||||
|
||||
// /** The EntityHorse whose inventory is currently being accessed. */
|
||||
// private EntityHorse horseEntity;
|
||||
|
||||
// /** The mouse x-position recorded during the last rendered frame. */
|
||||
// private float mousePosx;
|
||||
//
|
||||
// /** The mouse y-position recorded during the last renderered frame. */
|
||||
// private float mousePosY;
|
||||
|
||||
public GuiHorse(IInventory playerInv, IInventory horseInv, EntityHorse horse)
|
||||
public GuiEntity(IInventory playerInv, IInventory entityInv, Entity entity)
|
||||
{
|
||||
super(new ContainerHorseInventory(playerInv, horseInv, horse, Client.CLIENT.player));
|
||||
super(new ContainerEntityInventory(playerInv, entityInv, entity, Client.CLIENT.player));
|
||||
this.playerInventory = playerInv;
|
||||
this.horseInventory = horseInv;
|
||||
// this.horseEntity = horse;
|
||||
// this.allowUserInput = false;
|
||||
this.entityInventory = entityInv;
|
||||
}
|
||||
|
||||
/**
|
||||
* Draw the foreground layer for the GuiContainer (everything in front of the items). Args : mouseX, mouseY
|
||||
*/
|
||||
public void drawGuiContainerForegroundLayer()
|
||||
{
|
||||
this.drawString(this.horseInventory.getCommandName(), 8, 6);
|
||||
this.drawString(this.entityInventory.getCommandName(), 8, 6);
|
||||
this.drawString(this.playerInventory.getCommandName(), 8, this.ySize - 96 + 2);
|
||||
}
|
||||
|
|
@ -81,9 +81,9 @@ public class GuiMerchant extends GuiContainer
|
|||
if (merchantrecipelist != null && !merchantrecipelist.isEmpty()) {
|
||||
int k = this.selectedMerchantRecipe;
|
||||
MerchantRecipe merchantrecipe = (MerchantRecipe)merchantrecipelist.get(k);
|
||||
ItemStack itemstack = merchantrecipe.getItemToBuy();
|
||||
ItemStack itemstack1 = merchantrecipe.getSecondItemToBuy();
|
||||
ItemStack itemstack2 = merchantrecipe.getItemToSell();
|
||||
ItemStack itemstack = merchantrecipe.first();
|
||||
ItemStack itemstack1 = merchantrecipe.second();
|
||||
ItemStack itemstack2 = merchantrecipe.result();
|
||||
this.renderItemOverlayIntoGUI(itemstack, 36, 24, null);
|
||||
if(itemstack1 != null)
|
||||
this.renderItemOverlayIntoGUI(itemstack1, 62, 24, null);
|
||||
|
@ -180,9 +180,9 @@ public class GuiMerchant extends GuiContainer
|
|||
// int j = (this.height - this.ySize) / 2;
|
||||
int k = this.selectedMerchantRecipe;
|
||||
MerchantRecipe merchantrecipe = (MerchantRecipe)merchantrecipelist.get(k);
|
||||
ItemStack itemstack = merchantrecipe.getItemToBuy();
|
||||
ItemStack itemstack1 = merchantrecipe.getSecondItemToBuy();
|
||||
ItemStack itemstack2 = merchantrecipe.getItemToSell();
|
||||
ItemStack itemstack = merchantrecipe.first();
|
||||
ItemStack itemstack1 = merchantrecipe.second();
|
||||
ItemStack itemstack2 = merchantrecipe.result();
|
||||
GL11.glPushMatrix();
|
||||
ItemRenderer.enableGUIStandardItemLighting();
|
||||
GlState.disableLighting();
|
|
@ -68,7 +68,7 @@ public class GuiRepair extends GuiContainer implements ICrafting
|
|||
{
|
||||
int i = 8453920;
|
||||
boolean flag = true;
|
||||
String s = String.format("Erfahrungskosten: %d", this.anvil.maximumCost);
|
||||
String s = String.format("Manakosten: %d", this.anvil.maximumCost);
|
||||
|
||||
if (this.anvil.maximumCost >= 40) // && !this.gm.thePlayer.creative)
|
||||
{
|
32
client/src/main/java/client/gui/container/GuiTile.java
Executable file
32
client/src/main/java/client/gui/container/GuiTile.java
Executable file
|
@ -0,0 +1,32 @@
|
|||
package client.gui.container;
|
||||
|
||||
import client.Client;
|
||||
import common.inventory.ContainerTile;
|
||||
import common.inventory.IInventory;
|
||||
import common.inventory.InventoryPlayer;
|
||||
import common.tileentity.TileEntityDevice;
|
||||
|
||||
|
||||
public class GuiTile extends GuiContainer
|
||||
{
|
||||
private final IInventory playerInv;
|
||||
private final IInventory tileInv;
|
||||
private final TileEntityDevice tile;
|
||||
|
||||
public GuiTile(InventoryPlayer player, IInventory inv, TileEntityDevice tile)
|
||||
{
|
||||
super(new ContainerTile(player, tile, inv, Client.CLIENT.player));
|
||||
this.playerInv = player;
|
||||
this.tileInv = tile;
|
||||
this.ySize = 153;
|
||||
this.tile = tile;
|
||||
}
|
||||
|
||||
public void drawGuiContainerForegroundLayer()
|
||||
{
|
||||
this.drawString(this.tile.getStatus().color + this.tileInv.getCommandName() + " - " + this.tile.getStatus().name, 8, 6);
|
||||
this.drawString(this.playerInv.getCommandName(), 8, this.ySize - 96 + 2);
|
||||
this.drawString(String.format("Temperatur: %d °", this.tile.getTemperature()), 8, 18);
|
||||
this.drawString(this.tile.formatDisplay((ContainerTile)this.inventorySlots), 8, 28);
|
||||
}
|
||||
}
|
|
@ -17,7 +17,7 @@ public class Dropdown<T> extends Element {
|
|||
for(T value : Dropdown.this.values) {
|
||||
if(sb.length() > 0)
|
||||
sb.append('\n');
|
||||
sb.append(value instanceof Displayable ? ((Displayable)value).getDisplay() : value.toString());
|
||||
sb.append(value instanceof Displayable disp ? disp.getDisplay() : value.toString());
|
||||
}
|
||||
this.setText(sb.toString());
|
||||
this.visible = /* this.r_dirty = */ false;
|
||||
|
@ -82,10 +82,15 @@ public class Dropdown<T> extends Element {
|
|||
}
|
||||
|
||||
public Dropdown(int x, int y, int w, int h, boolean up, T[] values, T def, T init, DropdownCallback<T> callback, final String text) {
|
||||
this(x, y, w, h, up, values, def, init, callback, new Formatter<Dropdown<T>>() {
|
||||
this(x, y, w, h, up, values, def, init, callback, text == null ? new Formatter<Dropdown<T>>() {
|
||||
public String use(Dropdown<T> elem) {
|
||||
T value = elem.getValue();
|
||||
return String.format("%s: %s", text, value instanceof Displayable ? ((Displayable)value).getDisplay() : value.toString());
|
||||
return value instanceof Displayable disp ? disp.getDisplay() : value.toString();
|
||||
}
|
||||
} : new Formatter<Dropdown<T>>() {
|
||||
public String use(Dropdown<T> elem) {
|
||||
T value = elem.getValue();
|
||||
return String.format("%s: %s", text, value instanceof Displayable disp ? disp.getDisplay() : value.toString());
|
||||
}
|
||||
});
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue