From 9c4287dcade8017a96e68e5d60485f8c837f739d Mon Sep 17 00:00:00 2001 From: Sen Date: Tue, 29 Jul 2025 14:10:19 +0200 Subject: [PATCH] item retexture - most fixed --- client/src/main/java/client/Client.java | 90 +++++++------- client/src/main/java/client/audio/Volume.java | 4 +- .../src/main/java/client/gui/GuiConnect.java | 6 +- .../src/main/java/client/gui/GuiConsole.java | 6 +- client/src/main/java/client/gui/GuiInfo.java | 34 ++--- client/src/main/java/client/gui/GuiMenu.java | 30 ++--- .../src/main/java/client/gui/GuiServer.java | 20 +-- .../client/gui/character/GuiCharacters.java | 12 +- .../client/gui/container/GuiContainer.java | 36 +++--- .../java/client/gui/container/GuiEnchant.java | 16 +-- .../java/client/gui/container/GuiRepair.java | 8 +- .../main/java/client/gui/ingame/GuiForm.java | 6 +- .../java/client/gui/ingame/GuiGameOver.java | 6 +- .../java/client/gui/ingame/GuiRename.java | 4 +- .../java/client/gui/options/GuiBinds.java | 6 +- .../java/client/gui/options/GuiDisplay.java | 4 +- .../java/client/network/ClientPlayer.java | 3 +- .../main/java/client/renderer/Drawing.java | 8 +- .../client/renderer/entity/RenderRabbit.java | 4 +- .../renderer/entity/RendererLivingEntity.java | 4 +- client/src/main/java/client/vars/BoolVar.java | 4 +- .../main/java/client/vars/CVarCategory.java | 16 +-- .../src/main/java/client/vars/ColorVar.java | 4 +- client/src/main/java/client/vars/EnumVar.java | 4 +- .../src/main/java/client/vars/FloatVar.java | 4 +- client/src/main/java/client/vars/IntVar.java | 4 +- .../src/main/java/client/vars/StringVar.java | 4 +- client/src/main/java/client/window/Bind.java | 4 +- .../textures/items/acid_green_dye.png | Bin 0 -> 5523 bytes .../resources/textures/items/beige_dye.png | Bin 0 -> 5484 bytes .../resources/textures/items/black_dye.png | Bin 0 -> 5272 bytes .../resources/textures/items/blue_dye.png | Bin 0 -> 5414 bytes .../resources/textures/items/brown_dye.png | Bin 0 -> 5509 bytes .../main/resources/textures/items/camera.png | Bin 5527 -> 5276 bytes .../resources/textures/items/chick_magnet.png | Bin 5480 -> 5606 bytes .../resources/textures/items/crimson_dye.png | Bin 0 -> 5433 bytes .../resources/textures/items/cyan_dye.png | Bin 5374 -> 5491 bytes .../textures/items/dark_brown_dye.png | Bin 0 -> 5460 bytes .../textures/items/dark_gray_dye.png | Bin 0 -> 5310 bytes .../textures/items/dark_green_dye.png | Bin 5160 -> 5433 bytes .../textures/items/dark_magenta_dye.png | Bin 0 -> 5488 bytes .../resources/textures/items/dark_red_dye.png | Bin 0 -> 5436 bytes .../textures/items/dark_violet_dye.png | Bin 0 -> 5461 bytes .../resources/textures/items/demon_rod.png | Bin 4755 -> 4770 bytes .../resources/textures/items/gray_dye.png | Bin 5123 -> 5326 bytes .../resources/textures/items/green_dye.png | Bin 5259 -> 5466 bytes .../items/{bonemeal.png => grinded_bones.png} | Bin .../textures/items/light_blue_dye.png | Bin 5302 -> 5513 bytes .../textures/items/light_brown_dye.png | Bin 0 -> 5508 bytes .../textures/items/light_gray_dye.png | Bin 5164 -> 5332 bytes .../textures/items/light_yellow_dye.png | Bin 0 -> 5544 bytes .../resources/textures/items/magenta_dye.png | Bin 5347 -> 5487 bytes .../main/resources/textures/items/magnet.png | Bin 5479 -> 5596 bytes .../resources/textures/items/midnight_dye.png | Bin 0 -> 5364 bytes .../resources/textures/items/neon_dye.png | Bin 0 -> 5486 bytes .../resources/textures/items/orange_dye.png | Bin 5398 -> 5511 bytes .../textures/items/ork_green_dye.png | Bin 0 -> 5444 bytes .../main/resources/textures/items/red_dye.png | Bin 5087 -> 5462 bytes .../resources/textures/items/violet_dye.png | Bin 5324 -> 5500 bytes .../resources/textures/items/white_dye.png | Bin 0 -> 5352 bytes .../resources/textures/items/yellow_dye.png | Bin 5088 -> 5494 bytes common/src/main/java/common/block/Block.java | 6 +- .../common/block/artificial/BlockBed.java | 10 +- .../common/block/artificial/BlockCarpet.java | 12 +- .../block/artificial/BlockStainedGlass.java | 12 +- .../artificial/BlockStainedGlassPane.java | 12 +- .../common/block/artificial/BlockWool.java | 12 +- .../block/natural/BlockColoredClay.java | 12 +- .../java/common/block/tech/BlockChest.java | 6 +- .../java/common/block/tech/BlockNuke.java | 6 +- .../main/java/common/block/tech/BlockTNT.java | 6 +- .../src/main/java/common/effect/Effect.java | 10 +- .../main/java/common/entity/DamageSource.java | 60 ++++----- .../src/main/java/common/entity/Entity.java | 8 +- .../common/entity/EntityDamageSource.java | 6 +- .../entity/EntityDamageSourceIndirect.java | 6 +- .../common/entity/animal/EntitySheep.java | 44 +++---- .../java/common/entity/animal/EntityWolf.java | 14 +-- .../java/common/entity/item/EntityItem.java | 4 +- .../java/common/entity/item/EntityXp.java | 4 +- .../java/common/entity/npc/Alignment.java | 32 ++--- .../java/common/entity/npc/EntityNPC.java | 4 +- .../common/entity/types/EntityLiving.java | 52 ++++---- .../main/java/common/init/BlockRegistry.java | 14 +-- .../java/common/init/CraftingRegistry.java | 72 ++++++----- .../main/java/common/init/ItemRegistry.java | 22 ++-- common/src/main/java/common/init/Items.java | 13 +- .../src/main/java/common/init/MetalType.java | 8 +- common/src/main/java/common/item/Item.java | 10 +- .../src/main/java/common/item/ItemStack.java | 8 +- .../common/item/consumable/ItemAppleGold.java | 4 +- .../common/item/consumable/ItemPotion.java | 10 +- .../java/common/item/material/ItemDye.java | 116 ++---------------- .../item/material/ItemEnchantedBook.java | 4 +- .../item/material/ItemGrindedBones.java | 115 +++++++++++++++++ .../java/common/item/material/ItemMetal.java | 4 +- .../item/projectile/ItemChargedOrb.java | 4 +- .../java/common/item/projectile/ItemDie.java | 22 ++-- .../common/item/spawner/ItemCharTemplate.java | 4 +- .../common/item/spawner/ItemMobTemplate.java | 4 +- .../java/common/item/tool/ItemScanner.java | 6 +- .../common/item/tool/ItemSpaceNavigator.java | 16 +-- .../main/java/common/item/tool/ItemWand.java | 4 +- .../common/item/tool/ItemWeatherToken.java | 4 +- .../common/item/weapon/ItemBanHammer.java | 4 +- .../common/item/weapon/ItemExterminator.java | 10 +- .../java/common/item/weapon/ItemTrident.java | 4 +- common/src/main/java/common/log/Log.java | 8 +- common/src/main/java/common/log/LogLevel.java | 22 ++-- .../main/java/common/tileentity/Device.java | 16 +-- .../util/{TextColor.java => Color.java} | 38 ++---- server/src/main/java/server/Server.java | 6 +- .../server/clipboard/ReorderRegistry.java | 4 +- .../main/java/server/command/ColorParser.java | 6 +- .../src/main/java/server/command/Command.java | 6 +- .../server/command/CommandEnvironment.java | 6 +- .../command/commands/CommandExterminatus.java | 6 +- .../server/command/commands/CommandGod.java | 4 +- .../server/command/commands/CommandLoad.java | 8 +- .../command/commands/CommandNoclip.java | 4 +- .../command/commands/CommandPasswd.java | 12 +- .../command/commands/CommandPlayers.java | 8 +- .../command/commands/CommandPubkey.java | 12 +- .../command/commands/CommandRegister.java | 10 +- .../command/commands/CommandRegkey.java | 10 +- .../server/command/commands/CommandSave.java | 14 +-- .../server/command/commands/CommandSv.java | 20 +-- .../server/command/commands/CommandUsers.java | 8 +- .../server/command/commands/CommandWarps.java | 10 +- .../java/server/network/LoginHandler.java | 4 +- .../src/main/java/server/network/Player.java | 82 ++++++------- .../src/main/java/server/world/Converter.java | 8 +- 132 files changed, 757 insertions(+), 746 deletions(-) create mode 100644 client/src/main/resources/textures/items/acid_green_dye.png create mode 100644 client/src/main/resources/textures/items/beige_dye.png create mode 100644 client/src/main/resources/textures/items/black_dye.png create mode 100644 client/src/main/resources/textures/items/blue_dye.png create mode 100644 client/src/main/resources/textures/items/brown_dye.png create mode 100644 client/src/main/resources/textures/items/crimson_dye.png create mode 100644 client/src/main/resources/textures/items/dark_brown_dye.png create mode 100644 client/src/main/resources/textures/items/dark_gray_dye.png create mode 100644 client/src/main/resources/textures/items/dark_magenta_dye.png create mode 100644 client/src/main/resources/textures/items/dark_red_dye.png create mode 100644 client/src/main/resources/textures/items/dark_violet_dye.png rename client/src/main/resources/textures/items/{bonemeal.png => grinded_bones.png} (100%) create mode 100644 client/src/main/resources/textures/items/light_brown_dye.png create mode 100644 client/src/main/resources/textures/items/light_yellow_dye.png create mode 100644 client/src/main/resources/textures/items/midnight_dye.png create mode 100644 client/src/main/resources/textures/items/neon_dye.png create mode 100644 client/src/main/resources/textures/items/ork_green_dye.png create mode 100644 client/src/main/resources/textures/items/white_dye.png create mode 100644 common/src/main/java/common/item/material/ItemGrindedBones.java rename common/src/main/java/common/util/{TextColor.java => Color.java} (81%) diff --git a/client/src/main/java/client/Client.java b/client/src/main/java/client/Client.java index ed91e479..5483ee7e 100755 --- a/client/src/main/java/client/Client.java +++ b/client/src/main/java/client/Client.java @@ -168,7 +168,7 @@ import common.util.HitPosition; import common.util.IntHashMap; import common.util.LongHashMap; import common.util.ParticleType; -import common.util.TextColor; +import common.util.Color; import common.util.Util; import common.util.Var; import common.util.HitPosition.ObjectType; @@ -1036,7 +1036,7 @@ public class Client implements IThreadListener { private int drawStat(int x, int y, String name, int value, int max, int color) { int w = (int)(246.0f * (float)value / (float)max); Drawing.drawTextboxRight(name, x + 250, y, 0x3f000000); - Drawing.drawTextbox(String.format(TextColor.GREEN + "%d " + TextColor.GRAY + "/ " + TextColor.NEON + "%d", value, max), x, y, 0x3f000000); + Drawing.drawTextbox(String.format(Color.GREEN + "%d " + Color.GRAY + "/ " + Color.NEON + "%d", value, max), x, y, 0x3f000000); Drawing.drawRectBorder(x, y + 20, 250, 10, 0xff000000, 0xff202020, 0xffcfcfcf, 0xff6f6f6f); Drawing.drawGradient(x + 2 + 246 - w, y + 20 + 2, w, 6, color | 0xff000000, Util.mixColor(color | 0xff000000, 0xff000000)); return y + 40; @@ -1085,10 +1085,10 @@ public class Client implements IThreadListener { Entity ent; if(this.player != null && now - status.getValue() < 10000L && (ent = this.player.worldObj.getEntityByID(status.getKey())) instanceof EntityLiving) { EntityLiving entity = (EntityLiving)ent; - String s = entity.getName() + TextColor.GRAY + " [" + + String s = entity.getName() + Color.GRAY + " [" + EntityLiving.getHealthColor(entity.getHealth(), entity.getMaxHealth()) + - entity.getHealth() + TextColor.GRAY + " / " + EntityLiving.getMaxHpColor(entity.getMaxHealth()) + - entity.getMaxHealth() + TextColor.GRAY + "]"; + entity.getHealth() + Color.GRAY + " / " + EntityLiving.getMaxHpColor(entity.getMaxHealth()) + + entity.getMaxHealth() + Color.GRAY + "]"; Drawing.drawTextboxCentered(s, x, y, 0x3f000000); Drawing.drawRectBorder(x - 200, y + 20, 400, 10, 0xff000000, 0xff202020, 0xffcfcfcf, 0xff6f6f6f); Drawing.drawGradient(x - 200 + 2, y + 20 + 2, (int)(396.0f * ((float)entity.getHealth() / (float)entity.getMaxHealth())), 6, entity.getColor() | 0xff000000, Util.mixColor(entity.getColor() | 0xff000000, 0xff000000)); @@ -1105,8 +1105,8 @@ public class Client implements IThreadListener { for(StatusEffect effect : this.player.getEffects()) { Effect potion = effect.getPotion(); int color = potion.getColor(); - String name = (potion.isBadEffect() ? TextColor.ORANGE : TextColor.ACID) + effect.getEffectName(); - String desc = TextColor.NEON + effect.getDurationString(); + String name = (potion.isBadEffect() ? Color.ORANGE : Color.ACID) + effect.getEffectName(); + String desc = Color.NEON + effect.getDurationString(); Drawing.drawRectBorder(x, y, 250, Font.YGLYPH + 6, 0xff000000, 0xff202020, 0xffcfcfcf, 0xff6f6f6f); Drawing.drawGradient(x + 2, y + 2, effect.isInfinite() ? 246 : ((int)(246.0f * ((float)effect.getRemaining() / (float)effect.getDuration()))), Font.YGLYPH + 2, color | 0xff000000, Util.mixColor(color | 0xff000000, 0xff000000)); Drawing.drawText(name, x + 4, y + 3, 0xffffffff); @@ -1128,16 +1128,16 @@ public class Client implements IThreadListener { y = this.fbY - 40 - stats * 40; int hp = entity.getHealth(); int max = entity.getMaxHealth(); - y = this.drawStat(x, y, TextColor.RED + "Schaden", hp, max, 0xff0000); + y = this.drawStat(x, y, Color.RED + "Schaden", hp, max, 0xff0000); if(absorb > 0) - y = this.drawStat(x, y, TextColor.YELLOW + "Schadenspuffer", absorb, 1024, 0xffff00); + y = this.drawStat(x, y, Color.YELLOW + "Schadenspuffer", absorb, 1024, 0xffff00); if(entity instanceof EntityWaterNPC npc) { int moist = npc.getMoisture(); int maxm = npc.getMaxMoisture(); - y = this.drawStat(x, y, TextColor.BLUE + "Feuchtigkeit", moist, maxm, 0x4f4fff); + y = this.drawStat(x, y, Color.BLUE + "Feuchtigkeit", moist, maxm, 0x4f4fff); } if(armor > 0) - y = this.drawStat(x, y, TextColor.GRAY + "Rüstung", armor, 1024, 0x707070); + y = this.drawStat(x, y, Color.GRAY + "Rüstung", armor, 1024, 0x707070); if(entity.vehicle instanceof EntityLiving living) { int vh = living.getHealth(); int vhMax = living.getMaxHealth(); @@ -1146,23 +1146,23 @@ public class Client implements IThreadListener { if(entity.getManaPoints() > 0) { int mana = entity.getManaPoints(); int maxm = entity.getMaxMana(); - y = this.drawStat(x, y, TextColor.CYAN + "Mana", mana, maxm, 0x0000ff); + y = this.drawStat(x, y, Color.CYAN + "Mana", mana, maxm, 0x0000ff); } for(int z = 0; z < Energy.values().length; z++) { Energy type = Energy.values()[z]; int energy = entity.getEnergy(type); if(energy > 0) { int emax = entity.getEnergyCap(type); - y = this.drawStat(x, y, TextColor.LIGHT_GRAY + type.display, energy, emax, entity.hasEnergyEffect(type) ? type.effect : type.color); + y = this.drawStat(x, y, Color.LIGHT_GRAY + type.display, energy, emax, entity.hasEnergyEffect(type) ? type.effect : type.color); } } x = 40; y = this.fbY - 40 - (this.player.isRidingHorse() && this.player.getHorseJumpPower() != 0.0f ? 2 : 1) * 40; if(this.player.isRidingHorse() && this.player.getHorseJumpPower() != 0.0f) // { - y = this.drawBar(x, y, String.format(TextColor.NEON + "Sprungkraft: " + TextColor.CYAN + "%d %%", (int)(this.player.getHorseJumpPower() * 100.0f)), + y = this.drawBar(x, y, String.format(Color.NEON + "Sprungkraft: " + Color.CYAN + "%d %%", (int)(this.player.getHorseJumpPower() * 100.0f)), this.player.getHorseJumpPower(), 0x4040ff); - y = this.drawBar(x, y, String.format(TextColor.ACID + "EXP: " + TextColor.GREEN + "Level %d, %d/%d", this.player.experienceLevel, (int)((float)this.player.xpBarCap() * this.player.experience), this.player.xpBarCap()), this.player.experience, 0x40ff40); + y = this.drawBar(x, y, String.format(Color.ACID + "EXP: " + Color.GREEN + "Level %d, %d/%d", this.player.experienceLevel, (int)((float)this.player.xpBarCap() * this.player.experience), this.player.xpBarCap()), this.player.experience, 0x40ff40); } GlState.bindTexture(0); @@ -1239,9 +1239,9 @@ public class Client implements IThreadListener { this.renderLagometer(); } else { - Drawing.drawText(String.format("%s%.2f" + TextColor.RESET + " %s [%s" + TextColor.RESET + "], %.3f ms, W %d x %d%s", + Drawing.drawText(String.format("%s%.2f" + Color.RESET + " %s [%s" + Color.RESET + "], %.3f ms, W %d x %d%s", this.framecode(), this.framerate < 1.0f ? 1.0f / this.framerate : this.framerate, this.framerate < 1.0f ? "SPF" : "FPS", - this.vsync ? TextColor.DARK_GRAY + "VSYNC" : (this.syncLimited ? TextColor.GREEN + "" + this.syncLimit : TextColor.RED + "UNL"), + this.vsync ? Color.DARK_GRAY + "VSYNC" : (this.syncLimited ? Color.GREEN + "" + this.syncLimit : Color.RED + "UNL"), (float)PerfSection.getTotal(false) / 1000.0f, this.fbRawX, this.fbRawY, this.fullscreen ? " @ " + (this.vidMode == null ? "?" : this.vidMode.refresh()) + " Hz" : ""), 0, 0, 0xffffffff); @@ -1264,14 +1264,14 @@ public class Client implements IThreadListener { String draw = String.format( "OpenGL: %s\n" + "Renderer: %s (%s)\n" + - "Bildrate: %s%.2f" + TextColor.RESET + " %s [%s" + TextColor.RESET + "], %.3f ms, W %d x %d%s\n" + - "Tickrate: %s%.2f" + TextColor.RESET + " %s [" + TextColor.GREEN + "%.1f" + TextColor.RESET + "], %.3f ms, E %d ms" + + "Bildrate: %s%.2f" + Color.RESET + " %s [%s" + Color.RESET + "], %.3f ms, W %d x %d%s\n" + + "Tickrate: %s%.2f" + Color.RESET + " %s [" + Color.GREEN + "%.1f" + Color.RESET + "], %.3f ms, E %d ms" + "%s%s" , GL11.glGetString(GL11.GL_VERSION), GL11.glGetString(GL11.GL_RENDERER), GL11.glGetString(GL11.GL_VENDOR), this.framecode(), this.framerate < 1.0f ? 1.0f / this.framerate : this.framerate, this.framerate < 1.0f ? "SPF" : "FPS", - this.vsync ? TextColor.DARK_GRAY + "VSYNC" : (this.syncLimited ? TextColor.GREEN + "" + this.syncLimit : TextColor.RED + "UNL"), + this.vsync ? Color.DARK_GRAY + "VSYNC" : (this.syncLimited ? Color.GREEN + "" + this.syncLimit : Color.RED + "UNL"), (float)PerfSection.getTotal(false) / 1000.0f, this.fbRawX, this.fbRawY, this.fullscreen ? " @ " + (this.vidMode == null ? "?" : this.vidMode.refresh()) + " Hz" : "", this.tpscode(), this.tickrate < 1.0f ? 1.0f / this.tickrate : this.tickrate, @@ -1856,7 +1856,7 @@ public class Client implements IThreadListener { String.format("Richtung: %s (%.1f / %.1f)", dirStr, ExtMath.wrapf(this.viewEntity.rotYaw), ExtMath.wrapf(this.viewEntity.rotPitch)) + "\n" + String.format("Biom: %.2f K, N: %.2f K, D: %s (%s)", chunk.getTemperature(pos), chunk.getOffset(pos), - TextColor.stripCodes(this.world.dimension.getDisplay()), + Color.stripCodes(this.world.dimension.getDisplay()), this.dimensionName) + "\n" + "Licht: " + chunk.getLightSub(pos, 0) + " (" + chunk.getLight(LightType.SKY, pos) + " Himmel, " + chunk.getLight(LightType.BLOCK, pos) + " Blöcke, " + String.format( @@ -1905,7 +1905,7 @@ public class Client implements IThreadListener { String.format("Position: %d %d %d", pos.getX(), pos.getY(), pos.getZ()) ); for(Entry entry : block.getProperties().entrySet()) { - str.append("\n" + (block.getBlock().getSavedProperties().contains(entry.getKey()) ? TextColor.NEON : TextColor.LIGHT_GRAY) + entry.getKey().getName() + TextColor.RESET + ": " + (entry.getValue() instanceof Boolean bool ? (bool ? TextColor.GREEN : TextColor.RED) + "" + entry.getValue() + TextColor.RESET : entry.getValue())); + str.append("\n" + (block.getBlock().getSavedProperties().contains(entry.getKey()) ? Color.NEON : Color.LIGHT_GRAY) + entry.getKey().getName() + Color.RESET + ": " + (entry.getValue() instanceof Boolean bool ? (bool ? Color.GREEN : Color.RED) + "" + entry.getValue() + Color.RESET : entry.getValue())); } return str.toString(); @@ -1936,7 +1936,7 @@ public class Client implements IThreadListener { + (entity.isWet() ? "W" : "") + (entity.canAttackWithItem() ? "A" : "") + (entity.passenger != null ? "H" : "") + (entity.vehicle != null ? "R" : "") + (entity.doesEntityNotTriggerPressurePlate() ? "L" : "") + "\n" + - (entity.hasCustomName() ? "Name: '" + TextColor.stripCodes(entity.getCustomNameTag()) + "'" : "Name: n/a") + (entity.hasCustomName() ? "Name: '" + Color.stripCodes(entity.getCustomNameTag()) + "'" : "Name: n/a") ; } @@ -2286,7 +2286,7 @@ public class Client implements IThreadListener { public void disconnected(String msg) { Log.NETWORK.info("Getrennt: %s", msg); this.unload(true); - this.show(new GuiInfo("Von Server getrennt", TextColor.RED + "Verbindung zum Server wurde getrennt\n\n" + TextColor.RESET + msg)); + this.show(new GuiInfo("Von Server getrennt", Color.RED + "Verbindung zum Server wurde getrennt\n\n" + Color.RESET + msg)); } @@ -2397,13 +2397,13 @@ public class Client implements IThreadListener { }, "Screenshot writer").start(); } - public TextColor framecode() { - return (this.framerate >= 59.0f) ? TextColor.GREEN : ((this.framerate >= 29.0f) ? TextColor.YELLOW : ((this.framerate >= 14.0f) ? TextColor.ORANGE : TextColor.RED)); + public Color framecode() { + return (this.framerate >= 59.0f) ? Color.GREEN : ((this.framerate >= 29.0f) ? Color.YELLOW : ((this.framerate >= 14.0f) ? Color.ORANGE : Color.RED)); } - public TextColor tpscode() { - return (this.tickrate >= (((float)this.tickTarget / 1000.0f) - 1.0f)) ? TextColor.GREEN : ((this.tickrate >= (((float)this.tickTarget / 1000.0f) / 2.0f - 1.0f)) ? TextColor.YELLOW : - ((this.tickrate >= (((float)this.tickTarget / 1000.0f) / 4.0f - 1.0f)) ? TextColor.ORANGE : TextColor.RED)); + public Color tpscode() { + return (this.tickrate >= (((float)this.tickTarget / 1000.0f) - 1.0f)) ? Color.GREEN : ((this.tickrate >= (((float)this.tickTarget / 1000.0f) / 2.0f - 1.0f)) ? Color.YELLOW : + ((this.tickrate >= (((float)this.tickTarget / 1000.0f) / 4.0f - 1.0f)) ? Color.ORANGE : Color.RED)); } private void doTicks() { @@ -2490,10 +2490,10 @@ public class Client implements IThreadListener { this.registerDebug(Keysym.H, "Hilfe zu Tastenkombinationen anzeigen", new DebugRunner() { public void execute(Keysym key) { String bind = Bind.CHEAT.getInput() == null ? "n/a" : Bind.CHEAT.getInput().getDisplay(); - Client.this.show(new GuiInfo("Hilfe zu Tastenkombinationen", TextColor.DARK_GREEN + "" + Client.this.debug.size() + " Tastenkombinationen stehen zur Verfügung:\n" + + Client.this.show(new GuiInfo("Hilfe zu Tastenkombinationen", Color.DARK_GREEN + "" + Client.this.debug.size() + " Tastenkombinationen stehen zur Verfügung:\n" + Util.buildLines(new Function() { public String apply(DebugFunction func) { - return TextColor.CYAN + bind + TextColor.RED + "+" + TextColor.GREEN + func.key.getDisplay() + TextColor.GRAY + " - " + TextColor.YELLOW + func.help; + return Color.CYAN + bind + Color.RED + "+" + Color.GREEN + func.key.getDisplay() + Color.GRAY + " - " + Color.YELLOW + func.help; } }, Client.this.debug.values()))); } @@ -2623,7 +2623,7 @@ public class Client implements IThreadListener { } else { this.lastUsed = System.currentTimeMillis(); - Client.this.logFeed(TextColor.RED + "VORSICHT: Debug-Absturz nach mehrmaligem Drücken innerhalb einer Sekunde"); + Client.this.logFeed(Color.RED + "VORSICHT: Debug-Absturz nach mehrmaligem Drücken innerhalb einer Sekunde"); } } }); @@ -2862,9 +2862,9 @@ public class Client implements IThreadListener { private void printVar(CVar cv) { String values = cv.getValues(); - this.logConsole("%s " + TextColor.NEON + "%s " + TextColor.DARK_GRAY + "[%s" + TextColor.DARK_GRAY + "]" + TextColor.GRAY + " = " + TextColor.WHITE + "%s " + TextColor.DARK_GRAY + - "[" + TextColor.GRAY + "D " + TextColor.CRIMSON + "%s" + TextColor.DARK_GRAY + "]%s", cv.getType(), cv.getCVarName(), cv.getCategory(), cv.format(), cv.getDefault(), - values != null ? " [" + TextColor.LIGHT_GRAY + values + TextColor.DARK_GRAY + "]" : ""); + this.logConsole("%s " + Color.NEON + "%s " + Color.DARK_GRAY + "[%s" + Color.DARK_GRAY + "]" + Color.GRAY + " = " + Color.WHITE + "%s " + Color.DARK_GRAY + + "[" + Color.GRAY + "D " + Color.CRIMSON + "%s" + Color.DARK_GRAY + "]%s", cv.getType(), cv.getCVarName(), cv.getCategory(), cv.format(), cv.getDefault(), + values != null ? " [" + Color.LIGHT_GRAY + values + Color.DARK_GRAY + "]" : ""); } public void exec(String line) { @@ -2872,7 +2872,7 @@ public class Client implements IThreadListener { for(CVar cv : this.cvars.values()) { printVar(cv); } - this.logConsole(TextColor.GREEN + "CVARs insgesamt registriert: %d", this.cvars.size()); + this.logConsole(Color.GREEN + "CVARs insgesamt registriert: %d", this.cvars.size()); return; } else if(line.startsWith("#")) { @@ -2890,7 +2890,7 @@ public class Client implements IThreadListener { this.logConsole("%s -> %s", cv.getCVarName(), cv.format()); } else { - this.logConsole(TextColor.RED + "Kann CVAR '%s' nicht auf '%s' setzen", cv.getCVarName(), value); + this.logConsole(Color.RED + "Kann CVAR '%s' nicht auf '%s' setzen", cv.getCVarName(), value); } return; } @@ -2900,7 +2900,7 @@ public class Client implements IThreadListener { } public void reset() { - this.buffer = TextColor.NEON + "*** " + VERSION + " ***"; + this.buffer = Color.NEON + "*** " + VERSION + " ***"; this.console.clear(); this.chat.clear(); this.feed.clear(); @@ -3015,30 +3015,30 @@ public class Client implements IThreadListener { private void drawPing(int x, int y, int ping) { int bars; - TextColor color; + Color color; if(ping < 0 || ping >= 20000) { bars = 0; - color = ping < 0 ? TextColor.GRAY : TextColor.DARK_RED; + color = ping < 0 ? Color.GRAY : Color.DARK_RED; } else if(ping < 80) { bars = ping < 50 ? 8 : 7; - color = TextColor.GREEN; + color = Color.GREEN; } else if(ping < 160) { bars = ping < 120 ? 6 : 5; - color = TextColor.DARK_GREEN; + color = Color.DARK_GREEN; } else if(ping < 350) { bars = ping < 220 ? 4 : 3; - color = TextColor.YELLOW; + color = Color.YELLOW; } else if(ping < 700) { bars = ping < 500 ? 2 : 1; - color = TextColor.RED; + color = Color.RED; } else { bars = 1; - color = TextColor.DARK_RED; + color = Color.DARK_RED; } Drawing.drawTextRight(color + (ping < 10000 ? String.format("%d", ping) + "ms" : String.format("%.1f", ((float)ping) / 1000.0f) + "s"), x - 18, y, 0xffffffff); for(int z = 0; z < bars; z++) { diff --git a/client/src/main/java/client/audio/Volume.java b/client/src/main/java/client/audio/Volume.java index 7b14a9e5..1058079a 100644 --- a/client/src/main/java/client/audio/Volume.java +++ b/client/src/main/java/client/audio/Volume.java @@ -6,7 +6,7 @@ import client.gui.element.SliderCallback; import client.vars.CVar; import client.vars.CVarCategory; import common.sound.EventType; -import common.util.TextColor; +import common.util.Color; public enum Volume implements CVar { MASTER("master", "Gesamt"), @@ -52,7 +52,7 @@ public enum Volume implements CVar { } public String getType() { - return TextColor.DARK_GREEN + "volume"; + return Color.DARK_GREEN + "volume"; } public CVarCategory getCategory() { diff --git a/client/src/main/java/client/gui/GuiConnect.java b/client/src/main/java/client/gui/GuiConnect.java index 0053330f..3931aceb 100644 --- a/client/src/main/java/client/gui/GuiConnect.java +++ b/client/src/main/java/client/gui/GuiConnect.java @@ -20,7 +20,7 @@ import common.log.Log; import common.network.IPlayer; import common.util.EncryptUtil; import common.util.Pair; -import common.util.TextColor; +import common.util.Color; import common.util.Util; public class GuiConnect extends GuiList implements ButtonCallback { @@ -152,12 +152,12 @@ public class GuiConnect extends GuiList implements Button } 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); + Drawing.drawText(this.name + Color.GRAY + " - " + Color.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" : ""), + Drawing.drawText(this.address + Color.GRAY + " Port " + Color.RESET + this.port + (this.enforceEncryption ? Color.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); diff --git a/client/src/main/java/client/gui/GuiConsole.java b/client/src/main/java/client/gui/GuiConsole.java index 43748098..5d46f2e1 100644 --- a/client/src/main/java/client/gui/GuiConsole.java +++ b/client/src/main/java/client/gui/GuiConsole.java @@ -22,7 +22,7 @@ import common.packet.CPacketComplete; import common.util.BlockPos; import common.util.ExtMath; import common.util.HitPosition; -import common.util.TextColor; +import common.util.Color; public class GuiConsole extends Gui implements FieldCallback { private class ConsoleArea extends Area { @@ -42,7 +42,7 @@ public class GuiConsole extends Gui implements FieldCallback { if(this.sel_start >= 0 && this.sel_end == this.sel_start) { for(int z = this.sel_start; z >= 0; z--) { char c = this.text.charAt(z); - if(c == TextColor.COMMAND) { + if(c == Color.COMMAND) { for(int n = z + 1; n < this.text.length(); n++) { c = this.text.charAt(n); if(c < 0x20) { @@ -189,7 +189,7 @@ public class GuiConsole extends Gui implements FieldCallback { int nl = buffer.indexOf('\n', offset); buffer = nl >= 0 ? buffer.substring(nl + 1) : ""; } - this.setLog(buffer + "\n" + TextColor.RESET + msg); + this.setLog(buffer + "\n" + Color.RESET + msg); } public void autocompletePlayerNames() diff --git a/client/src/main/java/client/gui/GuiInfo.java b/client/src/main/java/client/gui/GuiInfo.java index 9c613d4b..b91fc15e 100644 --- a/client/src/main/java/client/gui/GuiInfo.java +++ b/client/src/main/java/client/gui/GuiInfo.java @@ -4,13 +4,13 @@ import client.Client; import client.gui.element.MultiLabel; import client.gui.element.NavButton; import common.Version; -import common.util.TextColor; +import common.util.Color; import common.util.Util; public class GuiInfo extends Gui { private static final String VER = - TextColor.GREEN + "" + Util.repeatString("\u009a", Version.RELEASE.getId()) + TextColor.DARK_VIOLET + "|-| " + TextColor.VIOLET + Client.VERSION + TextColor.DARK_VIOLET + " |-|" + - TextColor.GREEN + Util.repeatString("\u009a", Version.RELEASE.getId()); + Color.GREEN + "" + Util.repeatString("\u009a", Version.RELEASE.getId()) + Color.DARK_VIOLET + "|-| " + Color.VIOLET + Client.VERSION + Color.DARK_VIOLET + " |-|" + + Color.GREEN + Util.repeatString("\u009a", 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\u007f\u007f [Speicherzugriffsfehler]"; @@ -42,28 +42,28 @@ public class GuiInfo extends Gui { } 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) + "==========================+=========================="; + return (hax ? Color.RED : Color.YELLOW) + (hax ? hacked : normal) + "\n" + + (hax ? Color.CYAN : Color.WHITE) + "==========================+=========================="; } private static void addLines(StringBuilder sb, boolean hax, String alternate, String category, String... authors) { - sb.append("\n" + (hax ? TextColor.BLUE : TextColor.GRAY) + sb.append("\n" + (hax ? Color.BLUE : Color.GRAY) + (hax ? alternate : category) + "\n "); for(int z = 0; z < authors.length; z++) { if(z > 0) - sb.append((hax ? TextColor.VIOLET : TextColor.GRAY) + ", "); - sb.append((hax ? TextColor.DARK_VIOLET : TextColor.WHITE) + authors[z]); + sb.append((hax ? Color.VIOLET : Color.GRAY) + ", "); + sb.append((hax ? Color.DARK_VIOLET : Color.WHITE) + authors[z]); } } private static String getInfo(boolean hax) { - return getHeader(hax, VER, VER) + "\n" + (hax ? (TextColor.VIOLET + HACKED) : (TextColor.LIGHT_GRAY + INFO)); + return getHeader(hax, VER, VER) + "\n" + (hax ? (Color.VIOLET + HACKED) : (Color.LIGHT_GRAY + INFO)); } 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.NEON + lib); + sb.append("\n" + Color.NEON + lib); } return sb.toString(); } @@ -71,17 +71,17 @@ 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.NEON + lib); + sb.append("\n" + Color.NEON + lib); } return sb.toString(); } private static String getColors() { - StringBuilder sb = new StringBuilder(TextColor.RESET + "#D "); + StringBuilder sb = new StringBuilder(Color.RESET + "#D "); int num = 0; - for(TextColor color : TextColor.values()) { - if(num == TextColor.values().length / 2) - sb.append("\n" + TextColor.COMMAND + "#d "); + for(Color color : Color.values()) { + if(num == Color.values().length / 2) + sb.append("\n" + Color.COMMAND + "#d "); sb.append(color + "#" + color.colorId + ' '); num++; } @@ -92,8 +92,8 @@ public class GuiInfo extends Gui { StringBuilder sb = new StringBuilder(getHeader(hax, "Mitwirkende dieses Programms", "Das Team -- TCQ")); addLines(sb, hax, "Die dunklen Herrscher", "Quellcode, Design, Grafiken, Refactoring und Code-Cleanup", - TextColor.CYAN + "Sen der \"kleine\" Dämon", - TextColor.RED + "Shen, Herrscher des Schattenlandes"); + Color.CYAN + "Sen der \"kleine\" Dämon", + Color.RED + "Shen, Herrscher des Schattenlandes"); return sb.toString(); } diff --git a/client/src/main/java/client/gui/GuiMenu.java b/client/src/main/java/client/gui/GuiMenu.java index 2b0e3e6c..ea829bc6 100644 --- a/client/src/main/java/client/gui/GuiMenu.java +++ b/client/src/main/java/client/gui/GuiMenu.java @@ -13,7 +13,7 @@ import client.renderer.Drawing; import client.window.Keysym; import common.rng.Random; import common.util.ExtMath; -import common.util.TextColor; +import common.util.Color; public class GuiMenu extends Gui { public static final GuiMenu INSTANCE = new GuiMenu(); @@ -59,7 +59,7 @@ public class GuiMenu extends Gui { } if(GuiMenu.this.hacked == 9) { GuiMenu.this.hacked++; - GuiMenu.this.splashLabel.setText(TextColor.VIOLET + "Hax!"); + GuiMenu.this.splashLabel.setText(Color.VIOLET + "Hax!"); } else { GuiMenu.this.gm.show(GuiConnect.INSTANCE); @@ -104,7 +104,7 @@ public class GuiMenu extends Gui { } }, "Client schließen")); this.shift(); - this.add(new Label(4, 4, 200, 0, TextColor.VIOLET + Client.VERSION, true)); + this.add(new Label(4, 4, 200, 0, Color.VIOLET + Client.VERSION, true)); this.splashLabel = this.add(new Label(0, 100, width, 0, "")); this.pickSplash(); } @@ -128,7 +128,7 @@ public class GuiMenu extends Gui { } private void pickSplash() { - this.splashLabel.setText(TextColor.VIOLET + this.rand.pick(Splashes.SPLASHES)); + this.splashLabel.setText(Color.VIOLET + this.rand.pick(Splashes.SPLASHES)); } private void resetAnimation() { @@ -162,9 +162,9 @@ public class GuiMenu extends Gui { } this.animStep = !this.animStep; StringBuilder sb = new StringBuilder(11); - sb.append(TextColor.GRAY); + sb.append(Color.GRAY); sb.append("["); - sb.append(TextColor.YELLOW); + sb.append(Color.YELLOW); switch(this.animDir) { case -1: sb.append((this.animStep ? '>' : '-') + "' "); @@ -176,7 +176,7 @@ public class GuiMenu extends Gui { sb.append(" `" + (this.animStep ? '<' : '-')); break; } - sb.append(TextColor.GRAY); + sb.append(Color.GRAY); sb.append("]"); this.animStr = sb.toString(); for(int z = this.animPos; z < this.animPos + 4; z++) { @@ -186,39 +186,39 @@ public class GuiMenu extends Gui { this.animGrow[this.rand.zrange(this.animWidth)] += 1; } sb = new StringBuilder(this.animWidth + 2); - sb.append(TextColor.DARK_GREEN); + sb.append(Color.DARK_GREEN); for(int z = 0; z < this.animWidth; z++) { switch(this.animGrow[z] / 5) { case 0: - sb.append(TextColor.BLACK); + sb.append(Color.BLACK); break; case 1: - sb.append(TextColor.GRAY); + sb.append(Color.GRAY); break; case 2: case 3: - sb.append(TextColor.LIGHT_GRAY); + sb.append(Color.LIGHT_GRAY); break; case 4: case 5: case 6: - sb.append(TextColor.WHITE); + sb.append(Color.WHITE); break; case 7: case 8: case 9: case 10: - sb.append(TextColor.MAGENTA); + sb.append(Color.MAGENTA); break; case 11: case 12: case 13: case 14: case 15: - sb.append(TextColor.DARK_VIOLET); + sb.append(Color.DARK_VIOLET); break; default: - sb.append(TextColor.VIOLET); + sb.append(Color.VIOLET); break; } sb.append(",."); diff --git a/client/src/main/java/client/gui/GuiServer.java b/client/src/main/java/client/gui/GuiServer.java index c90e037c..a23fb423 100644 --- a/client/src/main/java/client/gui/GuiServer.java +++ b/client/src/main/java/client/gui/GuiServer.java @@ -19,7 +19,7 @@ import client.vars.Variable; import client.window.Window; import common.network.IPlayer; import common.util.EncryptUtil; -import common.util.TextColor; +import common.util.Color; public class GuiServer extends Gui implements FieldCallback { public static final GuiServer INSTANCE = new GuiServer(null); @@ -193,22 +193,22 @@ public class GuiServer extends Gui implements FieldCallback { if(this.server != null) { name = this.nameBox.getText(); if(name.isEmpty()) { - this.nameLabel.setText(TextColor.RED + "Name in der Liste"); + this.nameLabel.setText(Color.RED + "Name in der Liste"); return; } if(GuiConnect.INSTANCE.isNameTaken(name)) { - this.nameLabel.setText("Name in der Liste - " + TextColor.RED + "Bereits vorhanden"); + this.nameLabel.setText("Name in der Liste - " + Color.RED + "Bereits vorhanden"); return; } } String addr = this.addrBox.getText(); if(addr.isEmpty()) { - this.addrLabel.setText(TextColor.RED + "Adresse / Hostname"); + this.addrLabel.setText(Color.RED + "Adresse / Hostname"); return; } int port = -1; if(this.portBox.getText().isEmpty()) { - this.portLabel.setText(TextColor.RED + "Port"); + this.portLabel.setText(Color.RED + "Port"); return; } else { @@ -216,27 +216,27 @@ public class GuiServer extends Gui implements FieldCallback { port = Integer.parseInt(this.portBox.getText()); } catch(NumberFormatException e) { - this.rangeLabel.setText("[" + TextColor.RED + "1024..32767" + TextColor.RESET + "]"); + this.rangeLabel.setText("[" + Color.RED + "1024..32767" + Color.RESET + "]"); return; } if(port < 1024 || port > 32767) { - this.rangeLabel.setText("[" + (port < 1024 ? TextColor.RED + "1024" + TextColor.RESET + "..32767" : "1024.." + TextColor.RED + "32767" + TextColor.RESET) + "]"); + this.rangeLabel.setText("[" + (port < 1024 ? Color.RED + "1024" + Color.RESET + "..32767" : "1024.." + Color.RED + "32767" + Color.RESET) + "]"); return; } } String user = this.userBox.getText(); if(user.isEmpty()) { - this.userLabel.setText(TextColor.RED + "Benutzername"); + this.userLabel.setText(Color.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 + ")"); + this.passLabel.setText((this.keypair == null ? "Anmelde" : "Ersatz") + "-Passwort (" + Color.RED + "mind. 8 Zeichen" + Color.RESET + ")"); return; } String acc = this.accBox.getText(); if(!acc.isEmpty() && acc.length() < 8) { - this.accLabel.setText("Zugang (" + TextColor.RED + "mind. 8 Zeichen" + TextColor.RESET + ")"); + this.accLabel.setText("Zugang (" + Color.RED + "mind. 8 Zeichen" + Color.RESET + ")"); return; } if(this.server == null) { diff --git a/client/src/main/java/client/gui/character/GuiCharacters.java b/client/src/main/java/client/gui/character/GuiCharacters.java index 551b49b6..118e35e0 100644 --- a/client/src/main/java/client/gui/character/GuiCharacters.java +++ b/client/src/main/java/client/gui/character/GuiCharacters.java @@ -15,7 +15,7 @@ import common.entity.npc.PlayerCharacter; import common.packet.CPacketAction; import common.packet.CPacketAction.Action; import common.util.ExtMath; -import common.util.TextColor; +import common.util.Color; public class GuiCharacters extends GuiList implements ButtonCallback { @@ -34,11 +34,11 @@ public class GuiCharacters extends GuiList impleme { 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.DARK_GREEN + "%d " + TextColor.YELLOW + "%s " + TextColor.VIOLET + "%s", + String str = this.character == null ? Color.BLUE + "[" + Color.CYAN + "+" + Color.BLUE + "]" : + String.format(Color.GREEN + "Level " + Color.DARK_GREEN + "%d " + Color.YELLOW + "%s " + Color.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", + String pos = this.character == null ? Color.BROWN + "Neuen Charakter erstellen" : + String.format(Color.NEON + "%s " + Color.GRAY + "bei " + Color.ACID + "%d" + Color.GRAY + ", " + Color.ACID + "%d" + Color.GRAY + ", " + Color.ACID + "%d", character.dim(), character.pos().getX(), character.pos().getY(), character.pos().getZ()); Drawing.drawText(str, x + 3, y, 0xffffffff); Drawing.drawText(pos, x + 3, y + height - Font.YGLYPH, 0xffffffff); @@ -63,7 +63,7 @@ public class GuiCharacters extends GuiList impleme private void updateButtons() { CharacterEntry entry = this.getSelected(); - this.descField.setText(entry == null ? "" : (entry.character == null ? "*neuer Charakter*" : String.format(TextColor.GRAY + "[%s%s" + TextColor.GRAY + "]\n" + TextColor.LIGHT_YELLOW + "Herkunft" + TextColor.LIGHT_GRAY + ": " + TextColor.LIGHT_BROWN + "%s\n" + TextColor.RESET + "%s", entry.character.align().color, entry.character.align().display, entry.character.origin() == null ? TextColor.DARK_GRAY + "*unbekannt*" : entry.character.origin(), entry.character.info() == null ? "*keine Beschreibung vorhanden*" : this.getSelected().character.info()))); + this.descField.setText(entry == null ? "" : (entry.character == null ? "*neuer Charakter*" : String.format(Color.GRAY + "[%s%s" + Color.GRAY + "]\n" + Color.LIGHT_YELLOW + "Herkunft" + Color.LIGHT_GRAY + ": " + Color.LIGHT_BROWN + "%s\n" + Color.RESET + "%s", entry.character.align().color, entry.character.align().display, entry.character.origin() == null ? Color.DARK_GRAY + "*unbekannt*" : entry.character.origin(), 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 = !this.gm.charEditor && entry != null && entry.character != null && !entry.initial; diff --git a/client/src/main/java/client/gui/container/GuiContainer.java b/client/src/main/java/client/gui/container/GuiContainer.java index 17813c9a..6d513277 100755 --- a/client/src/main/java/client/gui/container/GuiContainer.java +++ b/client/src/main/java/client/gui/container/GuiContainer.java @@ -40,7 +40,7 @@ import common.item.ItemStack; import common.packet.CPacketAction; import common.packet.CPacketCheat; import common.util.ExtMath; -import common.util.TextColor; +import common.util.Color; public abstract class GuiContainer extends Gui { @@ -125,14 +125,14 @@ public abstract class GuiContainer extends Gui List list = Lists.newArrayList(); String s = stack.getColoredName(); if(stack.getSize() != 1) - s = TextColor.YELLOW + "" + stack.getSize() + " " + TextColor.RESET + s; - s = s + TextColor.RESET; + s = Color.YELLOW + "" + stack.getSize() + " " + Color.RESET + s; + s = s + Color.RESET; list.add(s); stack.getItem().addInformation(stack, this.gm.player, list); if(stack.getItem().isAdminItem()) - list.add(TextColor.RED + "Admin-Gegenstand"); + list.add(Color.RED + "Admin-Gegenstand"); if(stack.getItem().isMagnetic()) - list.add(TextColor.LIGHT_GRAY + "Magnetisch"); + list.add(Color.LIGHT_GRAY + "Magnetisch"); if(stack.getItem().canBeDyed()) list.add("Farbe: #" + Integer.toHexString(stack.getDyeColor()).toUpperCase()); @@ -146,9 +146,9 @@ public abstract class GuiContainer extends Gui damage += EnchantmentHelper.getDamageModifier(stack); if(damage != 0) { if(damage > 0) - list.add(TextColor.BLUE + String.format("+%d Angriffsschaden", damage)); + list.add(Color.BLUE + String.format("+%d Angriffsschaden", damage)); else - list.add(TextColor.RED + String.format("-%d Angriffsschaden", damage)); + list.add(Color.RED + String.format("-%d Angriffsschaden", damage)); } Map mods = stack.getAttributeModifiers(null); @@ -160,17 +160,17 @@ public abstract class GuiContainer extends Gui if(stack.getSize() != 1) { double total = amt * (double)stack.getSize(); if(amt > 0.0D) - list.add(TextColor.BLUE + String.format("+%s %s [%dx +%s]", DECIMALFORMAT.format(total), entry.getKey(), stack.getSize(), + list.add(Color.BLUE + String.format("+%s %s [%dx +%s]", DECIMALFORMAT.format(total), entry.getKey(), stack.getSize(), DECIMALFORMAT.format(amt))); else if(amt < 0.0D) - list.add(TextColor.RED + String.format("-%s %s [%dx -%s]", DECIMALFORMAT.format(total * -1.0), entry.getKey(), stack.getSize(), + list.add(Color.RED + String.format("-%s %s [%dx -%s]", DECIMALFORMAT.format(total * -1.0), entry.getKey(), stack.getSize(), DECIMALFORMAT.format(amt * -1.0))); } else { if(amt > 0.0D) - list.add(TextColor.BLUE + String.format("+%s %s", DECIMALFORMAT.format(amt), entry.getKey())); + list.add(Color.BLUE + String.format("+%s %s", DECIMALFORMAT.format(amt), entry.getKey())); else if(amt < 0.0D) - list.add(TextColor.RED + String.format("-%s %s", DECIMALFORMAT.format(amt * -1.0), entry.getKey())); + list.add(Color.RED + String.format("-%s %s", DECIMALFORMAT.format(amt * -1.0), entry.getKey())); } } } @@ -188,7 +188,7 @@ public abstract class GuiContainer extends Gui else list.add("Stapelbar bis " + stack.getItem().getMaxAmount()); - list.add(TextColor.GRAY + ItemRegistry.getName(stack.getItem())); + list.add(Color.GRAY + ItemRegistry.getName(stack.getItem())); return list; } @@ -420,11 +420,11 @@ public abstract class GuiContainer extends Gui if (stack.isEmpty()) { - s = "" + TextColor.YELLOW + "0"; + s = "" + Color.YELLOW + "0"; } } else if(stack == this.cheatStack) { - s = TextColor.DARK_GREEN + "+" + TextColor.GREEN + formatAmount(stack.getSize()); + s = Color.DARK_GREEN + "+" + Color.GREEN + formatAmount(stack.getSize()); } this.drawItemStack(stack, mouseX - j2, mouseY - k2, s); @@ -472,7 +472,7 @@ public abstract class GuiContainer extends Gui StringBuilder sb = new StringBuilder(); for(int i = 0; i < list.size(); ++i) { if(i != 0) - sb.append("\n" + TextColor.LIGHT_GRAY + (String)list.get(i)); + sb.append("\n" + Color.LIGHT_GRAY + (String)list.get(i)); else sb.append((String)list.get(i)); } @@ -532,13 +532,13 @@ public abstract class GuiContainer extends Gui if (itemstack.getSize() > itemstack.getMaxStackSize()) { - s = TextColor.YELLOW + formatAmount(itemstack.getMaxStackSize()); + s = Color.YELLOW + formatAmount(itemstack.getMaxStackSize()); itemstack.setSize(itemstack.getMaxStackSize()); } if (itemstack.getSize() > slotIn.getItemStackLimit(itemstack)) { - s = TextColor.YELLOW + formatAmount(slotIn.getItemStackLimit(itemstack)); + s = Color.YELLOW + formatAmount(slotIn.getItemStackLimit(itemstack)); itemstack.setSize(slotIn.getItemStackLimit(itemstack)); } } @@ -880,7 +880,7 @@ public abstract class GuiContainer extends Gui if (text == null && stack.isEmpty()) { - s = TextColor.RED + formatAmount(stack.getSize()); + s = Color.RED + formatAmount(stack.getSize()); } Drawing.drawTextRight(s, xPosition + scale * 16, yPosition + scale * 16 + 1 - Font.YGLYPH, 0xffffffff); } diff --git a/client/src/main/java/client/gui/container/GuiEnchant.java b/client/src/main/java/client/gui/container/GuiEnchant.java index 4c14f694..13447c45 100755 --- a/client/src/main/java/client/gui/container/GuiEnchant.java +++ b/client/src/main/java/client/gui/container/GuiEnchant.java @@ -10,7 +10,7 @@ import common.inventory.ContainerEnchantment; import common.inventory.InventoryPlayer; import common.rng.Random; import common.util.Pair; -import common.util.TextColor; +import common.util.Color; import common.world.World; public class GuiEnchant extends GuiContainer implements ButtonCallback { @@ -46,13 +46,13 @@ public class GuiEnchant extends GuiContainer implements ButtonCallback { else { if(this.gm.player.getManaPoints() < mana) { this.buttons[l].enabled = false; - this.labels[l].setText(TextColor.DARK_GRAY + name); - this.mana[l].setText(TextColor.DARK_RED + "Mana-Level " + mana); + this.labels[l].setText(Color.DARK_GRAY + name); + this.mana[l].setText(Color.DARK_RED + "Mana-Level " + mana); } else { this.buttons[l].enabled = true; - this.labels[l].setText(TextColor.GREEN + name); - this.mana[l].setText(TextColor.DARK_GREEN + "Mana-Level " + mana + TextColor.GRAY + ", " + TextColor.YELLOW + "-" + (l + 1) + " Mana"); + this.labels[l].setText(Color.GREEN + name); + this.mana[l].setText(Color.DARK_GREEN + "Mana-Level " + mana + Color.GRAY + ", " + Color.YELLOW + "-" + (l + 1) + " Mana"); } } } @@ -95,10 +95,10 @@ public class GuiEnchant extends GuiContainer implements ButtonCallback { StringBuilder sb = new StringBuilder(); String s = l.first().getFormattedName(l.second()); - sb.append(TextColor.WHITE + s + " . . . ?"); + sb.append(Color.WHITE + s + " . . . ?"); if(this.gm.player.getManaPoints() < k) { - sb.append((sb.length() != 0 ? "\n" : "") + TextColor.RED + String.format("%d Mana erforderlich", this.enchantment.mana[j])); + sb.append((sb.length() != 0 ? "\n" : "") + Color.RED + String.format("%d Mana erforderlich", this.enchantment.mana[j])); } else { String s1 = ""; @@ -110,7 +110,7 @@ public class GuiEnchant extends GuiContainer implements ButtonCallback { s1 = String.format("%d Manapunkte", i1); } - sb.append((sb.length() != 0 ? "\n" : "") + TextColor.LIGHT_GRAY.toString() + "" + s1); + sb.append((sb.length() != 0 ? "\n" : "") + Color.LIGHT_GRAY.toString() + "" + s1); } this.hover(sb.toString(), mouseX, mouseY); diff --git a/client/src/main/java/client/gui/container/GuiRepair.java b/client/src/main/java/client/gui/container/GuiRepair.java index 91fe9e67..09f396d1 100755 --- a/client/src/main/java/client/gui/container/GuiRepair.java +++ b/client/src/main/java/client/gui/container/GuiRepair.java @@ -3,7 +3,7 @@ package client.gui.container; import client.gui.element.Label; import common.inventory.ContainerRepair; import common.inventory.InventoryPlayer; -import common.util.TextColor; +import common.util.Color; import common.world.World; public class GuiRepair extends GuiContainer { @@ -20,13 +20,13 @@ public class GuiRepair extends GuiContainer { public void updateScreen() { super.updateScreen(); if(this.anvil.maximumCost >= 40) - this.info.setText(TextColor.DARK_RED + "Zu teuer!"); + this.info.setText(Color.DARK_RED + "Zu teuer!"); else if(this.anvil.maximumCost <= 0 || !this.anvil.getSlot(2).getHasStack()) this.info.setText(""); else if(!this.anvil.getSlot(2).canTakeStack(this.playerInv.player)) - this.info.setText(TextColor.RED + "Manakosten: " + this.anvil.maximumCost); + this.info.setText(Color.RED + "Manakosten: " + this.anvil.maximumCost); else - this.info.setText(TextColor.GREEN + "Manakosten: " + this.anvil.maximumCost); + this.info.setText(Color.GREEN + "Manakosten: " + this.anvil.maximumCost); } public void addElements() { diff --git a/client/src/main/java/client/gui/ingame/GuiForm.java b/client/src/main/java/client/gui/ingame/GuiForm.java index b84831dc..ef5c53b2 100644 --- a/client/src/main/java/client/gui/ingame/GuiForm.java +++ b/client/src/main/java/client/gui/ingame/GuiForm.java @@ -18,7 +18,7 @@ import client.gui.element.ToggleCallback; import client.network.ClientPlayer; import common.packet.CPacketForm; import common.util.ExtMath; -import common.util.TextColor; +import common.util.Color; import common.util.Triplet; public class GuiForm extends Gui implements ButtonCallback { @@ -107,8 +107,8 @@ public class GuiForm extends Gui implements ButtonCallback { int min = (this.inputData[z].third() & 0x7fffffff) >> 16; String text = this.inputs[z].getText(); if(text.length() < min) { - if(!GuiForm.this.labels[z].getText().startsWith("" + TextColor.RED)) - GuiForm.this.labels[z].setText(TextColor.RED + GuiForm.this.labels[z].getText()); + if(!GuiForm.this.labels[z].getText().startsWith("" + Color.RED)) + GuiForm.this.labels[z].setText(Color.RED + GuiForm.this.labels[z].getText()); return; } this.outputData[z] = text; diff --git a/client/src/main/java/client/gui/ingame/GuiGameOver.java b/client/src/main/java/client/gui/ingame/GuiGameOver.java index 1b255df5..608cb5de 100755 --- a/client/src/main/java/client/gui/ingame/GuiGameOver.java +++ b/client/src/main/java/client/gui/ingame/GuiGameOver.java @@ -4,7 +4,7 @@ import client.gui.Gui; import client.gui.element.ActButton; import client.gui.element.ButtonCallback; import common.util.ExtMath; -import common.util.TextColor; +import common.util.Color; import client.gui.element.Label; import client.gui.element.MultiLabel; import client.gui.element.PressType; @@ -20,8 +20,8 @@ public class GuiGameOver extends Gui { public void init(int width, int height) { this.timer = 0; - this.add(new Label(0, 0, 400, 0, TextColor.DARK_RED + "Du bist gestorben!")); - this.add(new MultiLabel(0, 32, 400, 42, String.format(TextColor.GREEN + "Letzte Position" + TextColor.GRAY + ":\n" + TextColor.YELLOW + "%d, %d, %d\n" + TextColor.YELLOW + "%s", ExtMath.floord(this.gm.player.posX), ExtMath.floord(this.gm.player.posY), ExtMath.floord(this.gm.player.posZ), this.gm.player.worldObj.dimension.getDisplay()))); + this.add(new Label(0, 0, 400, 0, Color.DARK_RED + "Du bist gestorben!")); + this.add(new MultiLabel(0, 32, 400, 42, String.format(Color.GREEN + "Letzte Position" + Color.GRAY + ":\n" + Color.YELLOW + "%d, %d, %d\n" + Color.YELLOW + "%s", ExtMath.floord(this.gm.player.posX), ExtMath.floord(this.gm.player.posY), ExtMath.floord(this.gm.player.posZ), this.gm.player.worldObj.dimension.getDisplay()))); this.button = this.add(new ActButton(100, 100, 200, 0, new ButtonCallback() { public void use(ActButton elem, PressType action) { GuiGameOver.this.gm.player.respawnPlayer(); diff --git a/client/src/main/java/client/gui/ingame/GuiRename.java b/client/src/main/java/client/gui/ingame/GuiRename.java index 8c35a6dc..ae783d51 100644 --- a/client/src/main/java/client/gui/ingame/GuiRename.java +++ b/client/src/main/java/client/gui/ingame/GuiRename.java @@ -12,7 +12,7 @@ import client.gui.element.FieldCallback; import client.network.ClientPlayer; import common.item.ItemStack; import common.packet.CPacketMessage; -import common.util.TextColor; +import common.util.Color; public class GuiRename extends Gui implements FieldCallback, ButtonCallback { private final String itemName; @@ -37,7 +37,7 @@ public class GuiRename extends Gui implements FieldCallback, ButtonCallback { public GuiRename(int slot, ItemStack stack, Gui prev) { this.itemName = stack.getItem().getDisplay(); - this.origName = stack.hasDisplayName() ? TextColor.stripCodes(stack.getDisplayName()) : ""; + this.origName = stack.hasDisplayName() ? Color.stripCodes(stack.getDisplayName()) : ""; this.slot = slot; this.previous = prev; } diff --git a/client/src/main/java/client/gui/options/GuiBinds.java b/client/src/main/java/client/gui/options/GuiBinds.java index cd7741d7..9714153a 100644 --- a/client/src/main/java/client/gui/options/GuiBinds.java +++ b/client/src/main/java/client/gui/options/GuiBinds.java @@ -6,7 +6,7 @@ import client.gui.element.ButtonCallback; import client.gui.element.Label; import client.gui.element.PressType; import client.window.Bind; -import common.util.TextColor; +import common.util.Color; public class GuiBinds extends GuiOptions { protected GuiBinds() { @@ -41,9 +41,9 @@ public class GuiBinds extends GuiOptions { }, new Formatter() { public String use(ActButton elem) { if(bind == Bind.getWaiting()) - return TextColor.BLUE + "***"; + return Color.BLUE + "***"; else - return (bind.isDupe() ? TextColor.RED : TextColor.YELLOW) + (bind.getInput() == null ? "---" : bind.getInput().getDisplay()); + return (bind.isDupe() ? Color.RED : Color.YELLOW) + (bind.getInput() == null ? "---" : bind.getInput().getDisplay()); } })); if(++x == cols) { diff --git a/client/src/main/java/client/gui/options/GuiDisplay.java b/client/src/main/java/client/gui/options/GuiDisplay.java index 0ddd0c28..5941c684 100644 --- a/client/src/main/java/client/gui/options/GuiDisplay.java +++ b/client/src/main/java/client/gui/options/GuiDisplay.java @@ -18,7 +18,7 @@ import client.window.DisplayMode; import client.window.Window; import common.collect.Lists; import common.util.ExtMath; -import common.util.TextColor; +import common.util.Color; public class GuiDisplay extends GuiOptions { private static final String[] DISTANCES = new String[] {"Gruselig", "Winzig", "Gering", "Normal", "Weit"}; @@ -61,7 +61,7 @@ public class GuiDisplay extends GuiOptions { } } if(dmodes == null) - this.add(new Fill(242, 0, 240, 0, TextColor.RED + "")); + this.add(new Fill(242, 0, 240, 0, Color.RED + "")); this.add(new Slider(0, 20, 240, 0, 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) { diff --git a/client/src/main/java/client/network/ClientPlayer.java b/client/src/main/java/client/network/ClientPlayer.java index 56d48d0d..4e45e548 100755 --- a/client/src/main/java/client/network/ClientPlayer.java +++ b/client/src/main/java/client/network/ClientPlayer.java @@ -56,6 +56,7 @@ import common.inventory.InventoryPlayer; import common.inventory.InventoryWarpChest; import common.item.ItemStack; import common.item.material.ItemDye; +import common.item.material.ItemGrindedBones; import common.log.Log; import common.network.IClientPlayer; import common.network.NetConnection; @@ -1595,7 +1596,7 @@ public class ClientPlayer implements IClientPlayer break; case 2005: - ItemDye.spawnBonemealParticles(this.gm.world, blockPosIn, data); + ItemGrindedBones.spawnParticles(this.gm.world, blockPosIn, data); break; case 2016: diff --git a/client/src/main/java/client/renderer/Drawing.java b/client/src/main/java/client/renderer/Drawing.java index db09ed72..88eaf3c8 100644 --- a/client/src/main/java/client/renderer/Drawing.java +++ b/client/src/main/java/client/renderer/Drawing.java @@ -6,7 +6,7 @@ import client.Client; import client.gui.Font; import client.gui.FontChar; import common.log.Log; -import common.util.TextColor; +import common.util.Color; import common.util.Util; public abstract class Drawing { @@ -52,7 +52,7 @@ public abstract class Drawing { continue; } else if((ch >= Log.CHR_COLORS1 && ch <= Log.CHR_COLORE1) || (ch >= Log.CHR_COLORS2 && ch <= Log.CHR_COLORE2)) { - ncolor = TextColor.getColor(ch) | (color & 0xff000000); + ncolor = Color.getColor(ch) | (color & 0xff000000); continue; } else if(ch == Log.CHR_CRESET) { @@ -315,7 +315,7 @@ public abstract class Drawing { continue; } else if((ch >= Log.CHR_COLORS1 && ch <= Log.CHR_COLORE1) || (ch >= Log.CHR_COLORS2 && ch <= Log.CHR_COLORE2)) { - bcolor = TextColor.getShadow(ch) | (scolor & 0xff000000); + bcolor = Color.getShadow(ch) | (scolor & 0xff000000); continue; } else if(ch == Log.CHR_CRESET) { @@ -343,7 +343,7 @@ public abstract class Drawing { continue; } else if((ch >= Log.CHR_COLORS1 && ch <= Log.CHR_COLORE1) || (ch >= Log.CHR_COLORS2 && ch <= Log.CHR_COLORE2)) { - ncolor = TextColor.getColor(ch) | (color & 0xff000000); + ncolor = Color.getColor(ch) | (color & 0xff000000); continue; } else if(ch == Log.CHR_CRESET) { diff --git a/client/src/main/java/client/renderer/entity/RenderRabbit.java b/client/src/main/java/client/renderer/entity/RenderRabbit.java index a7cc098b..e42b7619 100755 --- a/client/src/main/java/client/renderer/entity/RenderRabbit.java +++ b/client/src/main/java/client/renderer/entity/RenderRabbit.java @@ -2,7 +2,7 @@ package client.renderer.entity; import client.renderer.model.ModelBase; import common.entity.animal.EntityRabbit; -import common.util.TextColor; +import common.util.Color; public class RenderRabbit extends RenderLiving { @@ -26,7 +26,7 @@ public class RenderRabbit extends RenderLiving { } protected String getEntityTexture(EntityRabbit entity) { - String name = TextColor.stripCodes(entity.getCustomNameTag()); + String name = Color.stripCodes(entity.getCustomNameTag()); if("Lola".equalsIgnoreCase(name) || "Lolo".equalsIgnoreCase(name)) return HALF; int type = entity.getRabbitType(); diff --git a/client/src/main/java/client/renderer/entity/RendererLivingEntity.java b/client/src/main/java/client/renderer/entity/RendererLivingEntity.java index 6f72865f..d37bba83 100755 --- a/client/src/main/java/client/renderer/entity/RendererLivingEntity.java +++ b/client/src/main/java/client/renderer/entity/RendererLivingEntity.java @@ -23,7 +23,7 @@ import common.entity.types.EntityAnimal; import common.entity.types.EntityLiving; import common.log.Log; import common.util.ExtMath; -import common.util.TextColor; +import common.util.Color; public abstract class RendererLivingEntity extends Render { @@ -436,7 +436,7 @@ public abstract class RendererLivingEntity extends Rende } else { - String s = TextColor.stripCodes(bat.getCustomNameTag()); + String s = Color.stripCodes(bat.getCustomNameTag()); if (s != null && (s.startsWith("Australia") || s.startsWith("Australien"))) // && (!(bat.isPlayer()) || ((EntityNPC)bat).isWearing(ModelPart.CAPE))) { diff --git a/client/src/main/java/client/vars/BoolVar.java b/client/src/main/java/client/vars/BoolVar.java index 36865613..25922e27 100644 --- a/client/src/main/java/client/vars/BoolVar.java +++ b/client/src/main/java/client/vars/BoolVar.java @@ -4,7 +4,7 @@ import java.lang.reflect.Field; import client.gui.element.Toggle; import client.gui.element.ToggleCallback; -import common.util.TextColor; +import common.util.Color; import common.util.Util; public class BoolVar extends BaseVar { @@ -27,7 +27,7 @@ public class BoolVar extends BaseVar { } public String getType() { - return TextColor.MAGENTA + "bool"; + return Color.MAGENTA + "bool"; } public boolean parse(String str) { diff --git a/client/src/main/java/client/vars/CVarCategory.java b/client/src/main/java/client/vars/CVarCategory.java index 4a8bfde5..250d4b75 100644 --- a/client/src/main/java/client/vars/CVarCategory.java +++ b/client/src/main/java/client/vars/CVarCategory.java @@ -1,15 +1,15 @@ package client.vars; -import common.util.TextColor; +import common.util.Color; public enum CVarCategory { - SYSTEM(TextColor.RED + "system"), - WINDOW(TextColor.BLUE + "window"), - GUI(TextColor.GREEN + "gui"), - RENDER(TextColor.NEON + "render"), - INPUT(TextColor.ORANGE + "input"), - CONSOLE(TextColor.YELLOW + "console"), - SOUND(TextColor.CRIMSON + "sound"); + SYSTEM(Color.RED + "system"), + WINDOW(Color.BLUE + "window"), + GUI(Color.GREEN + "gui"), + RENDER(Color.NEON + "render"), + INPUT(Color.ORANGE + "input"), + CONSOLE(Color.YELLOW + "console"), + SOUND(Color.CRIMSON + "sound"); private final String name; diff --git a/client/src/main/java/client/vars/ColorVar.java b/client/src/main/java/client/vars/ColorVar.java index e65aad68..307bf754 100644 --- a/client/src/main/java/client/vars/ColorVar.java +++ b/client/src/main/java/client/vars/ColorVar.java @@ -7,7 +7,7 @@ import client.gui.element.FieldCallback; import client.gui.element.Label; import client.gui.element.Slider; import client.gui.element.FieldAction; -import common.util.TextColor; +import common.util.Color; import common.util.Util; public class ColorVar extends IntVar { @@ -19,7 +19,7 @@ public class ColorVar extends IntVar { } public String getType() { - return this.alpha ? (TextColor.GRAY + "color32") : (TextColor.LIGHT_GRAY + "color"); + return this.alpha ? (Color.GRAY + "color32") : (Color.LIGHT_GRAY + "color"); } protected Integer parseValue(String str) { diff --git a/client/src/main/java/client/vars/EnumVar.java b/client/src/main/java/client/vars/EnumVar.java index d5897615..e46eee7f 100644 --- a/client/src/main/java/client/vars/EnumVar.java +++ b/client/src/main/java/client/vars/EnumVar.java @@ -8,7 +8,7 @@ import client.gui.element.Element; import client.gui.element.Switch; import client.gui.element.SwitchCallback; import common.util.Identifyable; -import common.util.TextColor; +import common.util.Color; import common.util.Util; public class EnumVar extends BaseVar { @@ -41,7 +41,7 @@ public class EnumVar extends BaseVar { } public String getType() { - return TextColor.CYAN + "enum"; + return Color.CYAN + "enum"; } public boolean parse(String str) { diff --git a/client/src/main/java/client/vars/FloatVar.java b/client/src/main/java/client/vars/FloatVar.java index 45fdad03..2fd87fc9 100644 --- a/client/src/main/java/client/vars/FloatVar.java +++ b/client/src/main/java/client/vars/FloatVar.java @@ -5,7 +5,7 @@ import java.lang.reflect.Field; import client.gui.element.Slider; import client.gui.element.SliderFloatCallback; import common.util.ExtMath; -import common.util.TextColor; +import common.util.Color; public class FloatVar extends BaseVar { public static interface FloatFunction extends VarFunction { @@ -47,7 +47,7 @@ public class FloatVar extends BaseVar { } public String getType() { - return TextColor.YELLOW + "float"; + return Color.YELLOW + "float"; } public boolean parse(String str) { diff --git a/client/src/main/java/client/vars/IntVar.java b/client/src/main/java/client/vars/IntVar.java index 5b99a738..614dac69 100644 --- a/client/src/main/java/client/vars/IntVar.java +++ b/client/src/main/java/client/vars/IntVar.java @@ -5,7 +5,7 @@ import java.lang.reflect.Field; import client.gui.element.Slider; import client.gui.element.SliderCallback; import common.util.ExtMath; -import common.util.TextColor; +import common.util.Color; import common.util.Util; public class IntVar extends BaseVar { @@ -36,7 +36,7 @@ public class IntVar extends BaseVar { } public String getType() { - return TextColor.GREEN + "int"; + return Color.GREEN + "int"; } protected Integer parseValue(String str) { diff --git a/client/src/main/java/client/vars/StringVar.java b/client/src/main/java/client/vars/StringVar.java index b0b03265..84bd4cd6 100644 --- a/client/src/main/java/client/vars/StringVar.java +++ b/client/src/main/java/client/vars/StringVar.java @@ -5,7 +5,7 @@ import java.lang.reflect.Field; import client.gui.element.FieldCallback; import client.gui.element.FieldAction; import common.util.CharValidator; -import common.util.TextColor; +import common.util.Color; public class StringVar extends BaseVar { public static interface StringFunction extends VarFunction { @@ -33,7 +33,7 @@ public class StringVar extends BaseVar { } public String getType() { - return TextColor.YELLOW + "float"; + return Color.YELLOW + "float"; } public boolean parse(String str) { diff --git a/client/src/main/java/client/window/Bind.java b/client/src/main/java/client/window/Bind.java index 0884a050..cb7d4085 100644 --- a/client/src/main/java/client/window/Bind.java +++ b/client/src/main/java/client/window/Bind.java @@ -5,7 +5,7 @@ import client.gui.element.Element; import client.vars.CVar; import client.vars.CVarCategory; import common.util.Identifyable; -import common.util.TextColor; +import common.util.Color; import common.util.Util; public enum Bind implements Identifyable, CVar { @@ -180,7 +180,7 @@ public enum Bind implements Identifyable, CVar { } public String getType() { - return TextColor.VIOLET + "key"; + return Color.VIOLET + "key"; } public CVarCategory getCategory() { diff --git a/client/src/main/resources/textures/items/acid_green_dye.png b/client/src/main/resources/textures/items/acid_green_dye.png new file mode 100644 index 0000000000000000000000000000000000000000..b499b6c73cc9b9da409a0c0889dd90ed62ee1c36 GIT binary patch literal 5523 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 literal 0 HcmV?d00001 diff --git a/client/src/main/resources/textures/items/black_dye.png b/client/src/main/resources/textures/items/black_dye.png new file mode 100644 index 0000000000000000000000000000000000000000..69e67d09bf1c848552ae86185c880d4b44744516 GIT binary patch literal 5272 zcmeHKX;c$g77oYO;DQS7C|CwJ8Y`((rAR7GL?B^Nki{tOT3eu$EG7X0iUO|Ss36^n zwzkVOD%#43@PmYX=^W=M)mGi~_%1ZI5F+@ZG<@f#mVp97Q8U6jUou&%wQ2(C(8;)cU zbLZ6E?JL~(XxaI$DNkb7d zINjq)(vOt|s+zpe_6bLB9lvny$cFt6{TD7pCiySj_8>DVc3)-sI8Wy`(L;ikq49Ff zw0wc`#Nu1Lw1b7A?6*fUc66GnlRW4*FeJxu)gM;joWJ>-Dw!Q?_NXeZIc^Cx1X`+V zG&fQsO{OQL*I?Q48{Wlw_sywq*}ZDoi7~4#;*+Mg3!DO&*b|J~$vaLEs)ISdsrY zcq3O<7SZ?qtlYE(nJ0c&3VrKPPN?2~)hjY!f@=NtWG7dgdv<$$bY05tRS^|_>6qXA zE(5Gt{>xpaT)0m!5pT)uHl$=ze(BaMYNTgO#hP10)o-2Vuj|;$bJsS{!wXzSeSL8A zob5X%ra0jj)uyV!PWOW9;lEyvD(AZm%{%6n{KBK(n3df%b$sa8L@+o zx`#h5RYdH~as5-=yFF9iboQZ93L{R%>>{omM6b_Wdj6N&HR@dW&Ebae)bA^-$2Xr! z`Flp)oIN+{U(C3fTYM#U+VXd!f;LrMI{9MK%WiJftCgr{>26TY)JN->Gni>x9V;?Q zoKlfaZ5r03JFmQaHo@)JF23%ML_dw3UcPGQo`-YG_6^#y2_t0dpA_Uq{t&y?t$p-1 zU58$t+1=98+!ptS?C9Vq-X+LQq#!EPyyhA&ADqkT6348_NYJ8`&|*qt$fsOqyT>zQa5CSmXde z%bH2ZqK(s;7#WQ` zN*UM$0a^+{tl4aki$sZuiNZuos5i!l!~{Wz5LASsFtC74NjfuWfpsPi8$=_9k~Psr zz#XU8K{ia1(#M+>0s$C@-p8jkgoQQ3>r72706s(((jXEG5s_9aYUyDzs}cZ6Q$Qc} zFsZ@jD~e)G`gkMFsuEb8*`p-{LpS>y;*D|kbQoI1#<5ypY67#0TTK}h5*E?yVWS|1 z(;Dnvfb3S5W=`{gtX8qvM(pXd3MXpS#@{ScQejm3lhf7G8)_A+XIaXY@43 z$nCG*EH1`SR09*Zl!he|nuI9?r$Lj#WC%ea6oR&Z3elO&q>g57Pyk%W0URkxFerkf zFhzL-2wEnCNrFXSoIs@%Dn-Q-nWP0oxRC>@B;#5}WrJb>6iHJggApt&#W5B{gOjif zXJoL%n;>zSH-l3YX@_EHd7$2?CBbrXS~7+e8FVrB0UP0Rzlacp02Lx1dLrUTvj#XQ z1fiTR-tu8U&1u;&X41x{7)&aa$q-y3mP$~W_=C|n)@TAsv|)-7A=a3UZCT_X89*#) z(y2u?K29O9g#_6=n}@?dIWeS}RFY;EfFdX^N2GF;P>V4+ipX)) z3qj>b3wu4oX_Ee(wXJv{pT;E*=1gGzBzsq5MU7!+HMSa?ah$!BAjn=6fcVA~Ok@Jf z*y99PjYD)Ssf%I3?$IRI_x;>Qq~MLPjJHNc!bz&?Fcy3}x^!f8ay`_XqBV}M2B?Ee7Ng#3( zm%tK2LlPKe;C{~J)I0Z8(_>!Om4O21{ zG+7yji7^d{NbuH+@L#3atZ_-}6n#XtZT`JTeMJ8v<3@uP=K@&$#y)V~fa6Qle10{_ z0xZer{4|x%=bQq9zD)8-{C=V93tgYYz$Y1hQP&r`K8b-(GXA2j{~28!KHPv=9r)v# z2=2GfbRutXH*QCb3R2o{$-I{VMf1R0dqeO96OSkKussfzJl_P+$v20DsrbL~-8y#n z<}Gvo4s;y|QTnN6lT&vRc`_cG#E zvAaI`UN}0%P3|0JP$&*Rb;RC1+;`jrGjy>U{HP@e}^Mjl+54BMmtlCyl&n%Q{3g LTDi-Adip;B>%)^< literal 0 HcmV?d00001 diff --git a/client/src/main/resources/textures/items/blue_dye.png b/client/src/main/resources/textures/items/blue_dye.png new file mode 100644 index 0000000000000000000000000000000000000000..bbc4bdd4bd113896cce02ab99cf0d32fdfd6b25d GIT binary patch literal 5414 zcmeHKYgALm7LHIwQb7aIF`c|kfph{g5D^e{MwUi=0Pz(41r53eSi=6~SSl6}g^4{zHW!5^$nVG%6+56ky z%w+N+XNOzio$xpu&Pou$j|RUs#%Jsp@a^*ZO9Y4eV19Z`oF*DcBPdl0i8L7_X!J^q zfa#c8Z4BfvyYr?ek(Rllw zGcG6RJar~{x-7gPrZn71$^MAyFs`v|e|K?4YtQGs1qQEUpUsB(%NPClRsH^#>o&X; z=i$Si8P-+#M+MF4Q1)C|U0%D+kH2R6$(%$#@_R-XRK-qIrTKpEG^(fz33ZHd6}-G%oEn~eG2C^=8esw+r;3uc_>Gl?>IMwz*)stqTd#u@y)BA z<{Q#Y2&b6aO|$iHtcx5K@9O=?YjlXUy}i{wC&pfB%LI>{J(M#OW25{8(MrMGSw8XS z_HK@YtCG$(9xiH(kEAmiwjS=>I@9pw=;9BrlOnx$s*0TU9d}x?Z=M>my8F|NpC&E% zv_<8+tya@qF!i&0Eo$ISVyjCVr+Ow8*)80f1#7eFbn_&G?&k4n|V;XBgeB8iQQOo z*tY0K#Yc9xe6Q$b+p80PucY8FIy}q%e(oBFS-8zhh2^~z#XlB?S5;6pCQtRNH*-0E zP;#v_EG50*c*nud72Z}m9CVcv{%SFt?YvkUYv|EW^|PxIm0un2mPoe9xDu)$7mk{H z+~3K2@A%$embH5Z<9!@B+uJUDKRLfJD6E@TrlsXn zT>7Na(6sqabMyW#!Q=Q2&(BJ%cK>qHYWwp#UF{Y}zr$@Fr!$T`{b$;|`&`fLZI{pH zbd?ysTjesFa^+@-e{T2JW}SuYp1YnC|17(aqc@9!0;>fnO`kaXUyHkG|da=e4jdb_NwDY=f&?X+t>qp3|3e^>cz$j9Nv`%1x{7AKs=MHMm89K{_RZF2OVe5tb;G^N0^?PZ9}IF^?F_5W+%b2$m#`NLOKV(`Uz^=}S3j@ z572P|fDF?h1f48duIB1^L=!F-yc@g8M1sjgvxG;C6Gjq36e^5BC(%hT6snVIsl-4$ zAwVUTaHIKQgAky_BPMAyN-mk4mX=0JqmdM4=P5l93xP|y_7*f2)~i(u+7D1lt9LF6cAgaY6s zDZpVPY$}b-!XS*v5(;Kp-|l%!cSp4#HqF#S8#$ibjlb!xSnR0?H|sA&D4SDNi&F7zyW2j}-8T zR1*BUCo&n)NPq*6I7=!|)x92wk;<^S8pOyZ1x(6fv)Bv{hs^>Ryf&JLsnkG;MobD! zqR~ww#Ib=SLsS@|QK(`Riew(q7!twgIW#N;%SnuA5I&;804Pjl zaA6jg%88-SxD*zb#`cA&TzHthLM)Z&|DCmQ@el$AN**CqgZcHQu7MRb7fTsv4K$Ob zrlmw6m=*;fejo)kqQ%6fI04qc5SoO@6EU!R49fLYzw`}KV8WP~DPf}!jYZ)=bQtJ? z!(?C(O+tq;j7n#tG;AcgS|QP-Au4QoBH$5l1>|Ysir{T3l+Q@(v?L7hJjf3D-RDDP z0wG9PVu&qb13h906%ru~Iz;D45Dtw-6CtbtF$}TwpX6f{00grjDl>*c=Nd~-`TwOT z;V?NgCJJiAKtW<`F&#n>P&bxH#9(1;DnrDgjV!`{mEw@bIU`dHARD*&S0W7{|BH+V z42GQxp!x%S;Jg9H7kTLX8k7Yn$-DdvE}wTf1%dE>lDFdbJzekVdMgIr%J{vy-qZC~ z47`=`dv*QK=)%9g0b_FT$2ASyZ)cn+Z~%AXF`}8_eA6u%_h(4$GVo@pjEGm`a3nY5 zGfKBJNDDeGGy-9$#a)XjAKH33e0+`wy7mb8(_`2_^c1>Un^9~++vQ^`@s_a!w?iLg znJb-1N3Clo#b-~SbPONzX>jjZZGx*S`_%W<4?Azqxf%3x-Q`ZZUFkWobxy15#zka~ zn%rvc-0<^v$}yh7Hdif~a>cWaRpViY472>YxZZ^u`*xLCWLa9*%{c5HRor;p^0=8d z8lKm5e3?({zHjzek88EZW@ok7x}97f*6CMtgWw&}YPR;usb5~+u;{|`S5FJh#CmFt OSqegD^DAd0EdLt<(AKvA literal 0 HcmV?d00001 diff --git a/client/src/main/resources/textures/items/brown_dye.png b/client/src/main/resources/textures/items/brown_dye.png new file mode 100644 index 0000000000000000000000000000000000000000..501769dd5bab6fcf08f65228cf1f57ffe4648ba7 GIT binary patch literal 5509 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 delta 2254 zcmaixdpy+X9>-^T$skU#lv|n*!d%T5GwaS^FxYa*hK%u>i;0Ut0VEVJ0FZ!)%Ywl~gIz(vDUZ!m7bZ1@3SQ2ZZH<=dLJ4`%I82b1 z{%F75JDkb&@QwMYTO2Q+d%rN;xkDtXY~1#`kveH&Ydv^PS%NK<4faN+%V%*O#vqJ3*q7aU&54WoB@x<|J+RXO^a@(N>lCoyN>`AYR#;eOqx zOx(|ob6#}jD8;MZH-(cg!DQhH{?#YB_uZNgWL+61^^3lTg5$LwaNz34P-9N?RE5ft zfLlqI;lxz`Te<W}a7{5G?na?wKgcc^YE^b z4nN|$&^aBnaB|0^5QDDEN>4{neJwX@Jmj^L504l7)HRCN@0}5tFkiPjAN*T zAcu<@E`70uqc`}Ps}TWrgRm`UR_VLXNA6d!PK_Q+QwvQ2Po(AMsR0s~z2VC2D~Lic zLr*Di+r<9Lo~{0Xg3GtH13?+WFva)uhw9CnSe_GHb8&#o#@v46STe4xW~aeP=lRUV zz1c%WDt2PjhQoKxga*2`PgukYcPHB1uAu(w#g;v| zQIh>+ei>7;u1^iF7)wqGYyHzHhNL%?|tg zXRDWb^2PVfepg34-vr%RSXJOZ3W)awt(Q6|@K>yMsk)#5hZDF0h)ESec7_}X5>POh z;oRVr@`ZJPJ?7NDEdTFcs{K6@F612+^@ZV7c@`yEBr7 zS(0IJXsnc`NRpZ;Vx{GZ$BhZh2y1dA)*5AFZN)+naKs1{Ba(qd;jyepVg!lEw83Ge zVF*8I8^X>MkGHbIldMTN0?CFr!4@RD}=y!+W(}||7)y2L1~kcT$-h_QH-=* z{v--5n!yIP#tH;Gxd8atQ?>%T{yUqmaG&WvjF$g@<)35Xk8&5jARgqhIgoE$%-{C^ z0{GFvo67`Zgn!%obHo<2{PV6rRf`HqNu2n&UmXU6DMom?yTXXeYdo3Xy;M;acmxY! zFtpL~hKmXuepo6ZAR3*Dm_isRqY-84oR=^d+=1rm$Ppx%ZBRA+1=k(6-_q<)VsNL?j z#r3VA?EKM=b5YHSNA5p(KIItri4m;q4YnA1Ld2rN%9&EWb*+b)C zKtRRN6GKsTNJOGjfVz6FL$0hi3cohFewxxheGzkmWd%#bbuU1aIU+Z+CpI+qM~@u= zT0>7xoi#IjrgQzJt(X$pOGq-%q&AKUkTPLrq4NCLo`_NapYd!~%UK;!Yz_pk@ViZP zG{&#^Z8!!KrZn2cx(ZPWEWP}-c&PrtBaTCtFmbDy4I{#a5d_bOBrx=?|EY|(y2hf| z{QNPT$#eVDvPoD-`R%E?+!H`z{KXgLztmncoqECs3*RbezvC^yQkdmhqKfBrO9O_{ Ms6MV`&fy3D04tljvH$=8 diff --git a/client/src/main/resources/textures/items/chick_magnet.png b/client/src/main/resources/textures/items/chick_magnet.png index aa06fee1e7eb25b0a96d754df3cee95a0c967415..48403ca65b8785f3114504c803954e6f6f4ec43e 100755 GIT binary patch delta 1723 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 LNkvXXu0mjfiCt65 diff --git a/client/src/main/resources/textures/items/crimson_dye.png b/client/src/main/resources/textures/items/crimson_dye.png new file mode 100644 index 0000000000000000000000000000000000000000..cbe0b07230cf154cb806844530690e5e5ee8aca5 GIT binary patch literal 5433 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 KiLlB)F8epJYVB(P literal 0 HcmV?d00001 diff --git a/client/src/main/resources/textures/items/dark_gray_dye.png b/client/src/main/resources/textures/items/dark_gray_dye.png new file mode 100644 index 0000000000000000000000000000000000000000..32fb35ca46c6616e9e16fb250bc8d67a2d071c70 GIT binary patch literal 5310 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 delta 1925 zcmV;02YUFqDyS%sBYy=adQ@0+Qek%>aB^>EX>4U6ba`-PAZ2)IW&i+q+U;0Lw&OMo z-18JUf&h>NcpQ%J^$l|T6h+Ey`49bncNSShvc*9V0HT1RY}fz(G2CA`n3bImYB9xl z;PA;O&gj^&j(lF}@aJ_8j;nKCx=Bttf3p!s`ZY1$iy&h{^PM38k;LT`RHmb@Srw?)ICpB6=;rjxcv2IdB#6 z%K@3+;3T7?xUxhDlK69ma3#5xgn+ykr^k`t(U`9KcZF`KJbLv0yn98<^A?epAje1h z?!2S$azh?=_w;bQ;R~H+(^1`N&0x6^M46zB@W{7M_uU7^n17`}bl4+S@QZl{8*WVG<`rT< zgvJhPI0Jm0ugAnyfMA$Wo+XkH*s@fVKtGv4PM`&X0qv?m(zX>KL@*uT3<(ebY9xUo zvH|o&gg_bq%5a^mL1sWANJPyU5Xu0{`+)pW zZ^)q>B!Bo2LJS%#q>!UTA47~$<0QqbqTXrHsH&z(vx#{N7ER48Sx%e;q#067nk=Q1 zGi+vP&UiXQAm_qGiZ8*HShQG4C0C?R^)=L3wOUOzH*V6vA1yX*)>6xzI#Q|o9(wHB zt*4#`Qf-JEeuNQ+4jXCY2WlJEH|IA{qm3G$NPkU1eV~R})k_6UItddq0ES(JfVfTw zkkC9aJB+;NiQL5ONQ|lo3@5|HtkFaa2>MPO23^=WUWiWQ{s=dx{)QX>E^=-{_f6#9 z;`SbDZEi#LL~K>z4C*1MKHTq?+49`%-n8zc8((VM*>bVkT@YG!dX*WX{F|EHZ@UnV zvwsVUKU;To?D#X++?P#0SuB1D)gZNsm3#)fv|hpstG$VdK9`*i&5G+Xr^J!gIjj%UMHxhaH`ST zuq_jovWJz1fSbk|mZ&Wfs&LsMM-}@=+kZE+YHD@+z@X5`Yf!7^V{S61Tx04WT}pds zsaFT~T0=sqf9CryTz9X&Kf4g=3Q)qQlqHucKD;fmrj;tFwd{w2Uh;{+><%eAp{fV- zRJ_7$C{i6D!`kAK1#z~9P18b!t@bF$UKF1zP2VIh1S%Y__#$&D7sQSG~cdjz-N7{jRgk(DyIci9EY(9p@eT2yf zVfzEZAE~9!9cpem^hvUOIjh`VQtK`c?f4DS&6e=|iSl`?uF3Tzc1omDEn9IIA#uqJ}1=_P!Z%5H=eT+kb$zB7G*pPM5>_A=Wn7X2Toyv;AQ01W@^`elEaU zy49~x{*9N0&sQ!vgTWCl76}H?SFfL(ek3PSd}sFo?<dR&rR1LfSU59C4=g|nn*70gsc(1*!F62=vOuD)*at`;D1H`2}Oz*(D_foKLlqsq4rKr zrT_p9c(W4)M*<`{H)1h2Fk>_=FgRs2Ei^DWGA&_aWMM63V>2;1V`gJCFg7=neg_{U zVliPbH!?6{Enzq}H7ztZW-~2fH8VFYV=y*jIA&#GF*7nSlfefkBsn-aWiw$oH7#Q> zF*YqUH8D0VVmC21Ei*G?IXGo7Vq!KlWs?jDT?{odF)}wZFfukcH8GQQ2yqHFR53I< zFflqYGn4QLBnmcEF*G_bF*-3blO73*BxGbWIbt<1H7zkYH)Jg|HZ?FUIWRS5Ejch| zW@IsCGGjJkF_V7_OA0nrF*G_bF*-3bv(yW22!G_M5AOf~00v@9M??TM05t$LJX^C(jwv}e&fM=JihPXfA+S#Eq}sn3YP5w99@S5Nky}tGaE~c5=2&Ghm!k? z+~LGFIIT?6--7Y-(KPDyn%OE@_rW*^a?mF;km(NRPuJ?a=-oue_%cVX69p+1;}X=00000 LNkvXXu0mjf%Vc2V diff --git a/client/src/main/resources/textures/items/dark_magenta_dye.png b/client/src/main/resources/textures/items/dark_magenta_dye.png new file mode 100644 index 0000000000000000000000000000000000000000..88863ba5596b556f3a9da730dd3bad8898892eaf GIT binary patch literal 5488 zcmeHKc~nzZ8V?{MQ3Mr~YAMg40z&pZ5)ep$Sc3#m6shu(ypShkA$dTcS`=3-6pK{R zq6qFQiboJv6a~Z;kb>J3D}ozUu@;44oST3MXFO+)Gt>FY6lfd*VaZwqLJX(^ zhcn!6j}R44avgC`k9Rh+UU4Db(PgoP^RHP2HSZ!KPWIeeV5k+@yZP>YJkhu8W!3Zg zo>i;Un}m|Dxs$V8TXV~nQc|}Tf7=n?*?G}t&8%0ymzC$@9V?QLVQ-yZwfKk%&1ZNI zD^48uq;2JwMT@^3g*mK5MlF975ppKYJm2z!c}@J~-Em#DD|y$NoVPZ;Eo-=1nS52m zk1cvG8FiX;V@z(~w&vQ^c3Ea{&xMudezp4Q=t&g&KUOU`Uom+|%QtyjZEv0^o0+NE zzNv@q0q*|pW{(L9KAd&j* zsZV%vzh+mt73a55)yR(Qh`$dZV5J#~rUsk&1>LP4k=tjEI6g)ABwSh7B-=i8jEij* zKCLXiY5mw7dgH?=G3m;X%K~{Hb32S+4aI~DF4r?rgAajoLfC zrTq(!ri-W2Z0KWk`>iI}6(ld8I;}kG&o0j>3%eYLhd&X%SavW_;Lx>y^a>jcw>{d6 z8+5w}w_?~n%gPX(`Si@R5JJ(F87rob$4#Yd@o&Ko30g5Nqs7tBoK^WX(_3=;fM*7} zI@z8MO`JHfZNxB#r4HMp-zgc-3JAW1YbHskmqJ5>sG=F7`l)M$%L8^7ie`(CjvYQ$ z?73<4ypn9LmA&|qdu&Ob-u=crsI2*^`Kr*VjUh6Jh_Hr5%*MLIOCsayLhBX8(z>$M zKXlcGHLCfYG-b3$CP%)bpd#QaM7sZKvm%dHe-ou&?+~<~?-F;LFTx}bGH*(6x-QC{ zy=2X{*}-ynXt{Q+on51)8H+)_a!QhMYTf+Yw^yq1u%r9%qrtlGPkOv?q0d5XYD~%;hWdU_?&`$UI)@&qcV9Av2$J@9_dh1<@}m4sV#Yd+XLmVEhiFdbnT-xl{ZV7G<;^j<2{evzRY0<3KFuz z>>{z_$G-HBzyB<;Ju9cjYeQt`2@B`>YXdFUx&$t%DPHVZmv^(W^FWHzYv~>)>Y8`{ zjv~Kscoi$}7&g~@-mjI-C9_E##|aW%#_4nQ4=if_c8^9Jx$#XvVe41SyXBkF35ikX zmvlc5jNIr^y8V_i<5|{pLyx38OY+lceH8j#GcP`IA{Zn^ zVo)`o@ciUi0))!>gb1dXBG&pNN;D`%hlHgBhs#o8Wn4MI#~bfu-~j*?g29kM6{pto z419tKmj|AW-DCn}GQnc`gt_7n$X}yFAO?v+q7a1!G?7N|#zS5@xq=re2i$6QkXK(l+rmAu9PCB&;~$>)Ork7%Mc?J04JdUhfZZM!COiM&Kx3x zsgM%6FcTp%=`e#0Q@M00%oqSMONRng!f^wmGD67#6fBd%ayl0wvYB)QM8kxM9HtzA zvH&87C1*;dun9^o;{|ARDj1X#RlzX`S*wmQ4HyaM`G$!21R9C*p(i8`#uUJTPne0S z6AT{)!ci3xhQUTQsbEqzhs~ukI8+XWGr)TeqSFH<8ZoI961_JYV_A4089*#-)F}Wk z!Gc_P{yGH4G`et&CXP=qh6EWs`-jC~ImuxR7Qh$+Kq)jPkHY5BxZzYfkILaO=^hjs zk21hsBS#g<|IXUDcp$Idk_VxBFn_YCt9M0(A@RMf-ew$XT1pUPS`>iz-W2q3A|f}% z39x#HWJ*{agMi(mPpN6gJ&!~_5YV5i_4ZWSS%(H;j%%Ba+pix za6kpw3OSnr(w5Vx+`&couTt#SIAd^%US#7o|6ZhChf$aRzteq0+Ad1*Tgv?ydjHRPbc24VtIN;YcpVkC|boPa^2F!bD=B)nhBC z;iFk|8q3Cjt_qRBH=J|1z3#}Ois^PM?vvy3@VLf>4=T5fd(quZ&6u7!VOjag@VrrL z{P%h;P9HPuv0q74ZtAKn4^tOxeYPQA>21Ctvi;GXdh4`Wx3$Fw8mDm`PBg~+=6UD# zzVJdfQOaqzeGS5z!15=IO&I|bCWs<^m;2g(U!9LzFWOmLy78ey4#F;dZYG+V_x#AT zEtll12_qI-T)URGt^U@n^uq5ir(A)Q$1I!MkNg;LwEUcJcGNePzB_3@AB)V~rM%ym c`ogN!$$M_dWbIkcr63)gNEj?Qu5`((S`-h^$!QXADEt@L%_F7XE#oxSs4=|qjcf80a9yJQh5vo>EhKC zL>c8$8qL`Hc+p21SDyXryY8BGr%&JEf3i=LG|4Ap6FG0onV)KxoooNv&1(0cr=mo% z?2r2Er(P#-y8k>B_TO=$TrIy)<=}hbWzOZzj3xD*caPhQNHF}o{2QwSkIEZeUKMOF zv7Vnj`O3^W-)>KT-ty&(Uoz&WheG)d%ys%nU;i}MXlRJd>^j8QK^T43T`;sMT~l7& z?T|!;H>QN!dPo{nkU_Id3NLCpsi+dXa8TP3AVLqt15XlFeNpNy|O z&WyN}8#rSB)u{;w4D~VYE~Dcuu3T@+O_=j?YtG=;WoI2Tsxp3Cdc?yZ+Esqi1y1Kk zQ|bGxoBptWz|EdoFspr%__@cO>Bw_5;oKehsj$buRzqs?q z*5I-3GYn@2S!k(`&P`uCdQtxG_fN>xnN!5{y!{3Go2wY#R~GF%J{G2HT=TGsD^t4L zj=p+gC#emGj^A?fxLxg45$L%2hhNt@OxP7W>+s;Gk5~WbcFGl$bg`cBN6Jjil+TGiQ$WAiLWex3?Vca0l&$70CY)QMT-*k?D~ zp4+D_vVbGF>sx1MRNIH-8Jj+_@^c`I9XsYXY!qaRL;hL2_)v6B>G*@!PIOh&2QaN| z9wZKS@!dE%dD7Gs-`|sLWESO(o>sA2Ub8oo2zHlM)jlnJre8n1E_u@!xZ?|CS5;PU zNuKw@eG8ZQrExA@Jr;E8x5iKH;3G|%z3IhGhZlE=UbIBiTSh20P87!cGBR+I{PxV1 z8=6OS@uK#eazu)X@MGT%Q4HmcXXlPCC|rx`gO_`S*rL1QHTrqjco+)Uox$5$)BhmZm>Fyi>ulSXl)+K&b^~VKmVM|gU&nVovH1UDo znv8tO_JZ~e&7Uyo2w=Ylx>E56u@lBNdu?eBPg{Dle4L-t<)%8;)yoGKTO>OjUV7@#ohLEjle`~fMG&6T zJ;qg6J&b$gl(Q%-EkA2!drHZ+6k>1JDyzdU*LSvMt;$;QY2dQ(Go>%`vR`>FKBuT2 zn!UahR`HX%e5w1fo~aWb(rxCws2l2mpH6uO)qMZijZ|V4$<95WMEE3S$B$|$?wZk_ z{7c!Squ+kJ&o3cmwPo@p7kH>cBRBRu3_$BPn&2qh{711D7k#V{(=APgGK%g3n3B`YZ%L{Kuh zQbhl`teg(XNfCV!M~sTqepIx4Zi0r2NC=ITB&?JONV<==t(Q><02GuChm49CrB-MZ z(apF*@NN<#bjYltTPdPPiNhd2m4<@Y3^oIW1B`M#M)$Ubyfma#815g~3jszVdbCcb z79xnjU|<+n43$QPFa-huf?^1U!9WAn#w&HW5mstlO%Od8{*+dt0o=(|O2~wX6RJ3! zh)xId(3|)aYO%NvUa9S60q}tsaW%qZpol_&^taIJ0`vf+H=w_?&_;rT0|}?JsyK~= z3eZzZoojyxQqpIyj?=`L(;+1Y6+M zSp#A-&6v~a9|$n-!yTagCU>(k&=QM<{whhFDZC(m5#8ipNU9`qQfPkVQXD1=!=$i) z!;`>lwgiU>lp_H{g2hJ#1WKS-Kd2z3R);GklnDxeGvok=h4FY&lHkD{0UL+e6c2}S z4hIY|4x6M14oe_F`$5dt$U#@)G5w=5L6HComk>C~5>POY!=gYm9319zNIuNw3UCge zOL7PTH$#yUVW3K*z(G0X3S34ZYNgCPVIo{OJ1j^<#~3|c&62PfTqgwvB6^5i8E1T} z8Yx#$5jxz&CKEX2@p&AKC17G0#(b;vA*IoRPBdXMQ3i``o-vh02$BKB;-)?Y0A@MJ zMd+uYaGgpMsZzy==%xT5lV#tu7%V3e*Wv!Sjsl=4#u1`CAts1qvV=@bh+-Zn`0l5# zBIVNff2VC)JdjsU$>++oz<<11)U%=@sMwxS&oD-AUP=&TUKD`%o)omWo+8b00<4}X zNi?pMQDFDzZPzz)`CqgG7o|w9lrMors zE?}`(1kUSehCa6blYC4K0HZt@<3=*sp!!0T`Tt8%N{~`Mlg)xTEIvq#kn&+ZPfCC# zObED?l*d6)>A)iVS1I=OIBQ^vUWjR%f77I1$e-G{N1@-j0IJ_31LqAmzL382tG6vc zN&e1H@ACOOT|m%#C-21Xd%E7!^-c`Dlk)rSdQaCoG4M{x@4M@NMwji|8!)8=e_RdV ze*5gh)Ff~>9zx8U<8Qtt(|+|UTLa!~)N?=5(r64<(=*8UwT~VMt#v`-0PFkKPImT| zO;de;2BMuo{<9?1Q^$tAe#F@2ByJI%TPP)y@w{=Di^ChFy z$b*Ytbxw)4j7r`=e8KqAqls>VF0?G%h{Se>hXuwi)P>#1%>JRudvwUfwCn|S!cm15 lTW>n5^A$HAu6b&ywXR?0;e4xP3TDbKC?M3o#CLh(zW~+B|`~3w%AXvs{$0h1xkW8XRtCrykjHu7j zU_{J-%LoKRXHR^x*28=3v)?A=Sb9t!|9zD~*lqu)ZzKOekLq#JxvNd~3BeXtfra6s z%TN86IXrfr_CD;)NNS^H^QRZIS=s;I?_KTT7N52B*{;bYM(bJdr$mucR-$tqf2|j z{GH9m4jUH*e%M%F6H$7sygK}O^I}|6;%m>ZZxVl%qwh7k#H&hsdW!rCTh{*}S>6Iya!g>*V-W!lO z;wpLGmaUg)VLM%|a&70#D4K3DCS|qIyCkx0h3zaCTOVqL=RGUyuyyYhUCaH{g59FS z!$o_ANmGpD2Et@1fu5va$BuPe>zLoXEQZ<_6@7Zkm(isgWKguE&;<=&^!|4x9#&;HnwrS-GtJqcR+kBH-H(7~db#30sKQ&ION!rqwl94yd+xY|S@;OGwTK$D}wJ}!& z%(z{3+ZQs=o!Ku6dM>ZqCW9Kz>^!l%d)af{L^BYa5-Gm-kS7T z>*UE}D-vyt`*nw=RJ1Kw#V%_eqkgudtx;rjF7N-LYeq*W|KnQ{Md%gFv+rzmxN5XZ zE-x?^bPg=MT>bDLTit?xj&GNH|580ySlx2gZ)Mr>vZJ>%Uo5d5iz-__W@yzpc71_^_97n(}jT^gfY& zQpi5x*KOzOZTB3Tyw~-zWy6FE%1woMm)*6K@oNuUKXIc!-lDpH%-?smmM`BsPsVGh z{byma@jT0GDU8{#23;W4|=#wKG664lJDc>9M4Vj-~ZX?t%dYex|4#$ zJNs^C1~xBZl{Z{Cs`of{D!FL+>ZRRY4F`^Vd+X<+jt`-`8~_d8pj?(VODLiGh3jpR>v7+j-A zO*@R=iX-;9)Ujh;l;=+5uz7w^z}*oQnIkpGH^8 zH@Lo?@P*3G*}HgRUY={gWazg{V~-Vla?}QGMa2~2wk`bv|f{_hM z4G4ok;QJdi2%3iJi4rUoSNW0d9&92Jaj73EfhnenH9?ph56jkKvDp!EXm%RPm6H4g zc66B`z`LoNLL!3TmB35*k8#;4SX#l!F_-4F|a4~hZNP-tW-MX98W^w8;p zGXTg?K!56?iv!03B?i-})3qoToPnwI?js?j=&-*gU8^vsBSk5g0#gE09hj9iYRXWN zIBM9#L_sR9)R?^h*`qA=xa<{Kqhd3Sn9~^<2yh?99cBG8ce63D5{r34HJWY;PbBms zndaw7)hI6InO|8LlSYSO8N_9>QHa4n5lBL1qM#|EbEsSiRYHYFK#5d3J)%M}6BGa^ z;{XSNnOuyCF(EdMBY_xn42C3Zmogo5oCMDwBm#1E#RLozU_IZl8zIE2a(RVoH{k0H6f?8pB^3M?unWyv@wL}$~u5QEB= zKwK6RgXl5_6~kZ#2c-{6VHjPfmgzGQEf$apcm!Mld78N*dYKF5Jvx?5IRLzmJa1}x)12r89AY^qGc;BX}jE{u*Y!hce-;S`58&K{j2pJLkPUy77Z z`4<@v8jLs>K=lXvzB<6P^SeTn66W)`TVL z2n4db>9H_u^UnaCHhPgb*yg5<>pSmyp27Q0fUYi)Fd&X|yyr|^#9PthmtTn_ee?^f zB-!?gg-6$grg#p07}3?;o~{PsHF08$2apllWyPma_;Pz(HTimJ}#H{Kk8^+aQ}L2eWPz;mQ#@e zdSEPs?=IMYSqC*{&Cx7bTzs*cfI7@x?x4=Es@$R`vdcDpz5Cv6|GqI#tZV%vVg$YG Q;!VVef+K{x15@(<0IQPtEC2ui literal 0 HcmV?d00001 diff --git a/client/src/main/resources/textures/items/demon_rod.png b/client/src/main/resources/textures/items/demon_rod.png index 1b3aa44784f5a9518dedd311eb97dc03150196d8..9c81e8848510ed499e9235f4fa584c526046d111 100755 GIT binary patch delta 1201 zcmV;i1Wx;tC88yeB!6vsR9JLUVRs;Ka&Km7Y-J#Hd2nSQWq4_3004N}?Uq}T>nIF{ z-?fTa0+JAj742$CvP*R46=|Vp%0wU`p@5k{=y|e0!7Q7N=gA& zEU`$1;9{X!xY5%!Ay6qs-5)(2_NSi1jVG>2|gUueOVzD&tI3Ytozu{mH2+s>@;t_FDLiUF{66jpj44nSp$02 zxF?|VHqr_qqZchOWEfP9o5oa*Oi++Vb-J#CjK)kgJ~X z^~Cm=%2xU>k$c;)3ruf8zGJPORguYX!0FOgYnq%q0O9%dlI<0z_a z1wPyTHMuGX+N|Y`B=5MVRuNK&F|0vneZ8n0yDOvMChf*v0;kT6X+VGcqSuwpdqpBx=~sG3?d zvt-%aihtFlDJDxPkKN-Mx4%QWPIeE2-q-rIcC`v%+)5 z+Z6`2F0$wn7o#ODdGVzzwPE|T*sP_No43+xm#!V(kDhw&-b=45uh>d!Ty0HjUVSZV z9oT9^X~bb8jXZpmQ7>u-)^F_vYJ5Q%hXAG>cO{chsb@jvfq#7)2-3dN>5q+2WcOg@htjnvMlt<^)> z!hfOr%}C(~gJ(wy+LtqxmCyLAzPdhow=nnhrw0Ju8mWGWKYeIFK6dmDfASCUha>HB z@waF9-?x$8%|jPGC0WlJwGXV0o(uo;>PbFSZF*w)PpzIlboc{(27ajYXLBQ#`UG&43fEjeU2F)cJ@H90Lg zVm4zfHZ@^5He+KkF=I1flf4F~4Kp`5IW{*kI5RLdGB=ZP2XG5AIaDz-Iy5&rH8PXz z2O|qIIaDz-Iy5&rH8Qgr2oV93NC;dcWnwvIIWjjnEj4B|V=XjcIWR3^G-EO?V>UT3 zF=8<_Ib<_4lgJ243oE@KABq_m7#J9sNY(7&;lUs;FVBE%2+^8z za&rF5%gg^KTeGpTF?pIjJUqy^nIg>;`I#b{jg5^*n$2+A$<>UJLFftqih)10X_=1# P00000NkvXXu0mjf)aMqz delta 1397 zcmV-*1&aEjC6gtPB!Av|R9JLUVRs;Ka&Km7Y-J#Hd2nSQWq4_3004N}%~w&9<0uUM z=M;McBq0#T!CXx{q#g@F3iu9?WYK=8jtGSlOO&a<~i!C*4xs{bxq|zEzUE`WoTk~2v zQmu>Yp=*ylb?dp86SV`@hw%bxbfCr?QbRDEsDFW*(o{jCo#?;}fUye%#M6KP3C#mD zZxjL#IKz@{nZLv86Ufc)%|Yc)%7ncYNc$XM;RY1S9(wiI=h2k|=wTz3Jb7!J%owLvpy z%jGjo?gy^ilAx?x9t{!|yi;6e5VF3K0Pcm1`7{ymvu4JnPEY-JR`-d3=&bgxI(fCu zn3rXGs@u`tkc|Fb(T8NzHYsj@%EdRf5q~7Ygg>4kUmiL{`AQzR?{to5dEjmxAx{*P zzk$E|ilD?9-ImYFo2gOT#&Rf%{En97o@~&WYWQ+KWWg;rFYUm+=_7Jgbn6SZZ1`e3 zdTWQAXXaHuDS`j_m-gF=I)0^$zni}R)Y_-Di3>X}000emX;fHrSWQeiV{dIPVY90P zegY$7Wim7{WMeHcVL3Q0G&wXlEjeLjWi2>nH)J_tWn?#FI5Cq<2B!@&G&eXlGBh$b zH8nLkk_T`LF*H;#IXW{pIxsYodj}&6F*H;#IXW{pIxsY|sRt1Ovz-ZG2!Eu!AYT9g z00v@9M??Ul0HXk-S|v|X00009a7bBm000XU000XU0RWnu7ytkO2XskIMF;5z4hJO! zMX^b;00028NklU)Sr#0}ff!>pSP4U^ zb1OMZ(CeHfP)gm--~ZesFpeWa2>ol{J&0b{{uw@R3~`j#Le8lG015yANkvXXu0mjf DLcMZc diff --git a/client/src/main/resources/textures/items/gray_dye.png b/client/src/main/resources/textures/items/gray_dye.png index 24921c82886f13c5e477365539107705174f2759..8bebf8ebc3249b6f92e0c3f4c807bb866a9b0c9b 100755 GIT binary patch delta 1712 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 UnGuKJ3;+NC07*qoM6N<$f;x)YBme*a diff --git a/client/src/main/resources/textures/items/green_dye.png b/client/src/main/resources/textures/items/green_dye.png index 1bc922699bf11e73ea0b2cb040f35bf0b58d1d4b..d16de720d053e441d807fe3295d5be0971f39b92 100755 GIT binary patch delta 1803 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 b{DFJ|qy=!cg}+l=00000NkvXXu0mjf+gB}A delta 1801 zcmV+k2ln`hE4C?+Bmt0-B_DrFwj(DDowJH80ZD+wa`>K;9c1~r6xez8vpendB!jLx zE(8euu0Yt0zy6%=4?IlfU5IKar{wX395NRW=J!*sFZpnNPsiVghjDkGUz;e=2SxOHgdSlYLgMii3EKc!zv!fZP<&Yu7)io4Lim!{u>=8m6{q_H zwQep`!%L+poADa5x*-+1Z@%Jfl!*b?q(GetO&V9* zsKLa*!?A*3ZYStUys1FmhuE_}CzF16V=cWE+4T??KXj1Rz9E9bpU!5CCc50!s6>e&#+af;i#e7gDWsTE(zFi6qN2fR)TFAW zS&NAUibNS_v3Y^iCp zmRsrErQ`hQscW~Mdl@v4N+XOo($HZek1~;JQ``(Q&NOw}%(L84JFtFxKR}HRYJ4HJ z81;@CMpbVjXdNeUVFtk11p?x_AV5O%!ps|mzzeyBna_WWT@e{Z#)Vm@g%}VFgE&sQ zVdr=wx{&)N+?<97-1xsD=N5DyBKIA)SE%(>hT4VL-i0fuUa9AQr875Q zT3KtHl~s#c+mdkx$jCn*rfr3rFFyE`GOnuW6s3AQt(39*6?vqm!8gFhX=4+7CY->@TcJV9S=Rv+I6_ zZA(l;G1)nt@~@aNJkc}@30J6Y3Ktn7CjuQi4$-ol-*vYaGU*ic)Cyut000h1vkL`B z0wXzMWi&J}Gd3+THZe0TG&V41EjeXlVl6o|WMVmEH#1{7H4` zI59OXG%z$YEjTwgV=Xo`Ff?LfGc_lG-Na_G&yBtEi^VTI4xpgG-53>W;8ToGcht{GdMAmcMD6C-wFl< zF*-3gv&;)_2o~hvbZh_s00v@9M??TM05t$L*CZQa3Kb_qTo{U3R&DG9in^R#~1Jc>R=wAT}0fR#83h)-9jr| z$lxRn*WqAI#6L(k@i!jM_i@g>2kucvYW5oDP+)a;M5h-r9E0D4`6omHr^psD7k{Dt6!PG}^uywN ribf5-ej!`LnAhhL_wPHnfouUuby=vw(EjBB0000<2SrXqu0mjfXJIF9 diff --git a/client/src/main/resources/textures/items/light_brown_dye.png b/client/src/main/resources/textures/items/light_brown_dye.png new file mode 100644 index 0000000000000000000000000000000000000000..93e5f81d74a66147d0d3c4d0a466534f1021d50f GIT binary patch literal 5508 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 delta 1451 zcmV;c1yuUfDXb`vB!BRFR9JLUVRs;Ka&Km7Y-J#Hd2nSQWq4_3004N}?N?c{V3vrv!5n`Q8>m;?>#6Sk>KGFRDuGiX6R>UCKYw@g7cREZ8ZS{p3c=#? z$tTV*)LvIUYqI{V=O4R_JHOc-43|UeuD=@Q_~j>iheR2ce18GbGCPj@j^ro4J^;-? zZe+wT>I6y?$nn)d6ChvHvLR{wI)$TMZCx|b>t{yQ3#Z|epIdO59ekjyAy5y=; zC|NGq9q(M|44Z5*XEa6RN*KxnFv2Y#7xU>2y^pOxWPf#Yg}j&t*+^q3H);%nBGf0T zauU4C<27`3P*4WTV~ZpZdt4BQ(Cs8}r_c@q1?{y5Db@)9iV#|m3^^zO)yN42vXMCw zfk=fw8L6}Ld_Vyb;ff^LJM5y!$|E#xiF6KSVYm(aILx4gxPU#UP$)wz?*;28dc_*b z;>3$ckbfvDNpf((2MHm>Fb>5WUGyeO3^7KHDQ0!*RWxW+)ucIbayT?4g%p#flyXMQ z4CIWvGX~^*@Zk=Bh&jR$4?WV63zkpuMM@~KXh|hkuCC(zsG-KHHPzgxVJS7=q=gon zw$yURQtQri-=&8hyY|%cR&C1qR6bCRrfPgDHGc-its1;BE(jXOi44sk7#mMeJPrx4 zpm}I!mAvPn+|bM>#;y=Xk}@=_G!%n^z7b2OrJdnR(V^Tg>1Lw8(~W;tIWwgDP`PK_ zUa3~cW2l^pUAu6QY8`eT`kQ9fJRWvWt$Ek+Y5S)FwVchPOTy2AneU=}0%d+jHaCu* zqkn%4YJLaNYihUXJxD$WSXYm=j2o?V;aOH(x3qRycpT}*b{jCI4-*beVRL-W za*uk;o_SAWKV;LR3vo|2J#c8ginXMCsek0Hvul1n;mr5q;>-+hm(JHrlX)SQhGpf= zblR+D+LHKslg@mrsol#e?Rkm5TruY1j?ygtS z!c@|-#+&J79dWey`U))5)q+f4)H6m@*B{tJz@#H?Zkp8?a8 z`2%nQ4oI_W1d0MAW-((nV`DHhEj2MSVl6Z{VmK{gGBsi?VKO;lGcz`0F=RD4lNkr7 z3^g+`GcqwXH#9dfHIvN;aSAq6F*G_bGCD9ZlSl|83N}S1aL!?7 zs461zUZAQEKvjt`A|iwk$T@SlTu3Rs7xaBk(=>z-*lae42&dEOvCO)z8HQmccwXW$ z#&~efvE6RDUaySfNL|;IWy!KE48uUz9d)ZK{Q3|6K<=#Me6ma$DJcK|002ovPDHLk FV1oa7peg_W diff --git a/client/src/main/resources/textures/items/light_yellow_dye.png b/client/src/main/resources/textures/items/light_yellow_dye.png new file mode 100644 index 0000000000000000000000000000000000000000..a5ace70c4974a0f6fa61917b585213c278834afd GIT binary patch literal 5544 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 oeXR2CtBl#RWGs~-=L4*pTSN$(^*y7Rf}Gv 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 delta 1754 zcmV<01||92E9WYZBmtw7uLKo;Wq4_3004N}wO4J{>nI5R?EQeOezF>9_hG(b;oty*d;va z&7MG2k&blU20!hW9_*7RNGkDzqfq8Vex8VK`VTipGZ2l8P=z`j#p#HD@SK3@Af3yy zJ_dPQLT=|+*Gj_qGvm?=#-ZbU&fV{wD0-DO4k0!IvU(+QX96^SY$&N9des{>1mZ*X zdL@#Xi30Ktr+sKx(?_cAtFevfbU2KYTI2lNk-U6>L+>yfRT z8Qsu7!0$EmW6ipXSf{x>idIqiPqNPx6v02Xo z5m4#s;GjZ+4(%8V6iv}#Gbkz`7NkQNNHAid!Jiu^bQFqIDJYlaq@8f*0!P?ri#ehN zja)%Z5!4yzBVV89+Xs3dTLHj^jg{twIKb9426N-8X37Zk2`V3d0I&0Y3|>hYswK`ryDG15jz(wfP+5yU~2krRBWEORFHC z85U~IHa|0ebf)wmk177Y8O5+9&0|_BY3murbUM=c?C&0Fxv@VQ&846U+e>O!;H^~k zv^RVuC9H^&o3X1hCNP91fZ(wo?u;X~LkSCfDK=Jrq4_(! z%mvsR9A5GGwEMfk`mX;FFHvU0$@<;q(#lr9|D05O*j46U8j^S|KlPth*7%5+qJG0H z7IyJ}U$uI{55=!I(jFInHvjJZo6bcW01uz)D=s+9rGlTf#vP#H#esS4u+e=k>#M)s ziPSo3?xoHCv_VoxE2z0gf9SWPr%$E5*U^L96DIS1x7)8l`rVth^((>jIl&FKep9@F z@MzplgS6D3^X)3IXO2tF*Y(bFq3@5M+~lVB7ee;ExLC6Qm5AOHXXg-Jv~ zR5;6(lQGNMP!xur^o!tBIu(C_AUI?P&wyM0?mp@Sge59mMW+989J%N-n&$v^qf$@I2C6mvb0~Mz7c7e!tg@27>{pyu8M0a%s=fYw^R4i5bJfBnrc+uYlrvW~~2gki{ZI_2}1 zpJD<$$Mt>x1p>(PoFqxAw6<*%$KUw`u;1?iux*>u=_F0C373nGqR24HSJ>@#)y#RG zV_B8~kR*u!w7~$Cfa|&}7K@rl36^6v;Yt8tHk-+ExvWG0Mx#-+pEkHA0N^-|0LJ-Ftdb=42LJ#707*qoM6N<$f*>tJ`v3p{ diff --git a/client/src/main/resources/textures/items/midnight_dye.png b/client/src/main/resources/textures/items/midnight_dye.png new file mode 100644 index 0000000000000000000000000000000000000000..10bf255b87ceda050c7c79ef60ebcef549f5ac35 GIT binary patch literal 5364 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 literal 0 HcmV?d00001 diff --git a/client/src/main/resources/textures/items/orange_dye.png b/client/src/main/resources/textures/items/orange_dye.png index 82c6c1bef83878b49266be8e91ad88192bf13644..5b854c57b35d61b1e5d34cb32b28004cc6cdd45c 100755 GIT binary patch delta 1899 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 literal 0 HcmV?d00001 diff --git a/client/src/main/resources/textures/items/red_dye.png b/client/src/main/resources/textures/items/red_dye.png index 34a3b598f5234c6ecac05ec324c0ae4c1cdb8b7c..895148b48f704d2334322ea84ec660754036fc6a 100755 GIT binary patch delta 1904 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 RSegI;002ovPDHLkV1guu4}kyx delta 1829 zcmV+=2io}jD$FU6Bmtw5B_DrDvK%Q4-E)dQ0%!nn9L5OWppV~=ge?CmmxpifI-D8B zsMPc%P`UB%m+Ah&Lm`V3O%`*E9*<?+Z-m33Y_ojKmOg))P{;23ZHeul zTg_~g*P7P7_d1sZ?{$S7CK?>rqh*$@0I#1qE*K=V#1Vu61cj9|T46hyz#;Ga^mriF z&84cmC3-^TF$(Y3-78u`hlF3893TDLbrh~sA{maYn?=>|^(5d6 zXa=F8-#HjkKMdd^h*l^Q7zhBhz#3xki715tM;ZVsP@Pz)0)e1P9ZHfgvM7^phg!` zi!ePQScm~Z8G&?$ z8#_lE(S_U};pUP&;YPoUoLkU+61i`2dxu(I*HF6<+gZ4r>KWOG{b7Zytjq43-hFT5 zv;AL2e;NHTqbcOpi0YKWqqZ6So;T*|C#O9dSthqW_skIZ?aYiJQ4VG`Dn^B#$})&N{|)nfbdqf9%~h zBHl(wn+5j^AD=5^(ztCf88@NWz&XWdmT^KB8+w1H3j2JQhed;RD>ej2B5tCiv*2)Q z2g2fE;6lUw6plA244k$*E~?F1FAut}E>yb3*Jn>Z;ll^Hh`$Uwf_4D8A4bp($w6dj zKOc%rd$z#+$b>!)c(}|auBdmg9~s&GG(hh7=*QQ%;~Mr4l&g$dH`J9PolsBoczb0c zj>CWP5n_{3nf`hly(B|D*%~;%$mmGCd4{}CfbjhEej{>L#7Ys4VKlcxk< z6IfWz@4DLyGNKgloHBlL000h1vl#_P0)I4QGGaI~IXNveVl^=>G&p5qEn;IeW-T{n zHe@j}Fl04lHD)3TARr)kZE#IZI!SJGbYX5|Wl2OmB6w|ZE@^3GI$~uwVKrnqH!Wc^ zVl*u@V>4teVP;}CEjKk|W@KeFW-v4~Vj>D4ARu^ca7|4*PjYEzX>MU`L~mntZIj;z z4jAb%PQJ1}M?yL12m0O(0XK~y-)?UJER#6S>+KMDfUR2-?OAgQV89{xND zqJrR%B>M{7b5x(ZOOVK`K#*Wi^|XlA)K!oo8Uk(+BWRl|$>rRIG4p3L-#@dn3;%Jj z;mmBqSVK4_!)U|OGpsKp8*M1AMGqTTL-W5hNA7q@rW8p2<H{sCMi#-Hc#mF9mwqlw8lnJLa}_(%o1^x&x$c+RxP?feh+AbtRqFj*SV Ts)n@y015yANkvXXu0mjfzONy0TI6S`}T8p-M`HDO)~e~bAI=n z-#O>r+$9m=A#N_-E(`|4O&O|)1i$XK$Ei2?9`dLSV=#J_r$88>Cu33$-C&u(}cEHiN9q0OLS|8Q8h5gpjG;GDz?GvJUmqbh) zKjb@IP1`F$Wx@}&+1{KC91=J$}A z*}J@UoF2RJ0tU_G+{jOK9GsCgrRTgO!E+th*DiXj!DC{yf7R@Ol2>|gjcyMwjI7z1 zk-KtK0$OLO_d4_rRxsz~1XWyR#H_3L++UtF-Ua#WRXenhRQbmaK9 zAD!!ZT{#i~HzfTXpWZiumHEjqd0&UX+@c8Ppw+(pUA8j{@+6;C^>PT!9F(uVAIBJU z!^?ZQ;$T>;=ggk6cnxzX`)cKFDLMbf;lwt@?pk?lk+r|GN06VgFS~^~G}H6uL~h8y z!%IBmIg^O&*mdb2yLnF*P~k;`Nt zqrO<_J#*)@sI$3iXIbZccOI`PoObWRo|OmhSId{rm~$sBafe${))3y&#qtpE)`;m- z8%sD5Uj^lIB5UAJXP!U#!;JHD*PT}PPSi>lSc{y#-IT`LH=*ItFwyGE$HgBX4UHVW zFL;Hg)AR5#i-eyY6aA#TH@zRP*~?**jW8QU-fX=rSAtV zYu)lxc!GF(qxhH7c^~~^ITO%F_0n&%#o?^uKDoJ#o}!Vh2x&@+K@cEl3)NHB0+lyEA(Ib=pie(H&ztI%fLZ+(1 zB!of7#?%I!WLtGc;0A*s4X_$9Virj=aWaY0%UJhI%UDcGEn~$9RIth@CzGkrbQ2ks z9v)4k&mvGYD`2dP)G7f0I+DhiR-IOFmRMyhJFW!0+r%6e)2>3#lCh?$BA9Z6iDdHG zd^QXPS*cVWYpe@XYEo+?k&56B2r!bdl4;r~;czS#3)_OQ4W=Xx7e!GH%;WHQ5YT|k zX?hy7LVB~W4Wb=GL7E8@;EpornKn!eH>A)q77NTXU;C#ss#KludUFR0fDeupGjh0W zn4{Bix>}g&pi}_T;m}(x%+X*c=0uWaLyCzYgHlO7?b{VXO?28DQ%qWWIBJ4JYDpbX zHG@^T-IfedsvI-}hRkljs_rZjKJ>gJnm#vV>rM}T=JZa3}MvD=k_mP#d2 z7>E>`drF0jWm{jOHV~9rVt*Bq0xrViX&_V}A|O7Wz#tqJ5MYQSVi?6?9OiX_QtHh# zrYA@n6aZ&a07oMrMO>~%2&^$4#K$lpgra;5B851KqFezF#l>A9J~vUIDlu(WuWV3i z0EH1arbbW_5(y9z;0Z8DEKrLfz7WL(Vxd}qWej|y{VzdSr$XH>NKE?WGBAU{XQ8Z>_lM5CViAAVTgup^X*u{DZX)=RK zv|(~#Ho~`?+tMNd!2n`0Tb%*`yBx$Kk()@2HkhIf2Ca-`bBSrQ?3`ACc2Z+Brod)?%I}Q67bx?4(I*H z!xM^7u|}kZ#JCvLBMIso#{_(ck7_U!K@c1hwHHGtTmMNswgP})5yTTlbNLcm>bd{F z5D8p_p(KJrToH_b?u9jw7!!#gOw1LFQ4vlG2)ug|{;Lo>Yh2VlL@CF%&A%>EDd%6x zxLu*kxd5`?E(7NcIKDWY=T}ErfRwz?Pe=Q_&n1}54~x7LzaQxOK-W7l@J`Afs_O$? z@5I16DSxQ0{~28_Z*IV(9{h2&fcx#XvX?AyH|~v33{lu`$&6Nc={)e}Yz&PxGZ<`N z+tb7PbwDZ*I?_s2kmGGfpFRTyxeT~40*L-lD#k^N&)m%)y6jk>Yf$68g`39tt4x^- zLr==iT#er(3t_u|8Ygw}@)V!YEE;tnuX=BBY)N8?wq(e(^r}K#OVz2RSMH9ev>Z7* zrz)dtL}p+Oe{+F*|H>Rs--bUve)hygh!m2W#!M_O9zS{Y7U%xh`XoHZ@v75<*18{c z(<^g|kmg5T&4Y_4O!{cClfU1U?`Py5@>uMICS`w_xc_HNv$?={4%2KK#d;XOvAAF0 zVJ6P<1aq1;b*$nYK4oPw$|L5Es$nw2oT#p4_O4%{`#q)lz0`Ki?n!7j5+uz?toH8g}@y+iy|fvBjOPaE+{C1 z@n9826uefA9O^14W(7p#h>Cy+t0>B{5f8itbmOo0URQN>^;i9Me_!>JnIF9h=o9u7 zdbp{UR?=r$j}1=dne2%zdv+o4vpMg&rhLQlIuGfQ!FFcU-JktE1SjmPr+pur*S8|0 zNRY67siu73?L@0aGn)^Cvuo&X%Jp-;-OVVh86@%Pr=Ba2gz=o>u{;m2Um7^s)qPvP zaufS|y4GdC5>(E`;jf6KtKg0E(N#x_i7%3as>h7d{3V}m3Ez+PdP&7`m9g#Jqnn%j zv z&8HNz>s}+a1MkoJ?wgZaQdL>1g3|Smp2l3!^4xa+Ra&PjNf=xXMKAI<=@?@Cv!ln8 zP^$D5rI8k0lTtkE3yv+<_D2cU@@FX?gGm98Ea&JJQaVoS%PI_kHVpIW`H)M?F2X8` zHI4K35LOFgdBIc7w8MJF*!y2UR=+s(sA{(K)x;=IC)&o5;jT@evaqgb_mQvll+8?^ z3;m6F>b?k58tijQZaS9n*f%d`LYBO=R&{Cngzn7Hjv!yw)|6vrxegy5X6+qCNZY}+ z+aP)(>1?4uH~^)4niNpfl=viaypGh+L=8`~4}KE3K5W-Q*6OHy>xwMb+t#6i;O=xv zHl>O3pBbCeBI+Y{OycikHn<|oehyw7#4O)?UzqC=V#~NyoYr;_m^#JA1xb#MQr*W> z)Md`VQZ`bx7);vwT&=a5EIb`wp6!wlhQyqU4&i^U*5e@nXLYA=kU{-&{N#}urGe1< z&DsS%4Wijm+0BAeVREPiz2CCrWb24z_}z)ywZ?&AF9xx1o2<+ZSmW{ky(< zr>8FZ6!wBQ^3i$KCMth5q*V5sJg`!_HRd>WR@&CsT^wEcq~?PgUu8XhsnogqoMTtv z#T@76VUOX}Wz`R)`p!%qtqE;%h~s(Xh@Sr)B{XZIuBvJl?5c+E}~`<3+{z2C|l?K8Jj zR($jC$V|8~Z|DxVQE<;P#;MEPbuc7hntuFqW!uf4(A5V*wn*TSfVvG;KBl@&Q=GMj z&ab#`9#^68T+>>oYo2#wS?t;?xBca3+)B6%#~#Lj!6)(%M@?Z+*CeLbZ8P|E7{8>l zCNts7?NF)-T85yfsEL!I-OIssNP9fYC>t%#{vP>Z+kurMb?a)2&xh@7eiIf9Z2pn0ROZxhliv=1U$YN+AqAJfbaHbmW(VRC3IzRLa!Z zg+FcGO3iTs2G{iso3Yv_ze}5~$tRKQypxUBV#7kY;wr$5XF_Ka2oqwlqyUC+!~hJ7 zMF0*WVq=R#D2U-84ze`6E!^lVF~-E$EDnIdY$gDsCIG3NCII5z(F9wxY0O+A`%pU*_a4H*%AcDMH;GQf;9)_uu&!x!4MGEWLwH9SR@nT zGGQ(ZY9^5B|J(YIbLni5kg%nw7=SoT41hrn4q$AA03az05(EoI#So$CBl}x=gDfrx z&hXL1ka0ST&B0J9M*^TYYE(mrSO6|UU;xIXA`F5cT*QHmtZ+M+`-8^(Ke9whKqylT z0iYEBVFdyKj3vSWT+AUrOoS6K6E~7W{wtMP#iFEIs&#j8eX*M623TOTcz@ zT$FBT;$QqlewK;m%s)ZDgp<8Wn|z0l8)V^cU@|-FjPPVUWmbspfK_pO0ikv~X8&IL zn;_A%8$(^`R`ZWJc|aRzMJJqN^M|k1cm4iq1*IptVZGM2<>>1{);rg$j43boPfK>$ ump*r;T0VK8cw2%+m?pK~pmKU+dd0NkOt|=B%I*=P8&YsUxZu2hqWWJ>Win|1 delta 1824 zcmV+*2jBSiD&QxOBmwi0B_DrVk}D?+{bvy>>$g}p}`*8Gk5OHO57+lp{7rajclQoPlc1Dc z)pYc4?c|>@!VGQk*O$hTkj z-2rp1tw7}U?knJ8Ud{%L#oYQr4UEt{PK}p?Z}01~coi@hmzRIn7AbIS+a_A1w@e@x z(E`PYa_>RP{TP6YFm(hN5-z%bj>$~?GtkGeO zFQ%4azO#nboNp#*rIWZg17Yj}f$_X3KtS{2%qxY!i@ATrnJ5(YTn*N|}kIUZK`100pp)iZ6F*#wcOI@A%Y-9N(o2}<`h z6z{rUQ1O3sN4;3rL3MZH@*!4Er6NSJtuGV)*QNWN!dJ^!?tK z$7$fST9tqUatpsLX|!X`6mpq3c(y&y$Xkxf?yY}FkA9;a6FKfIa;yttZ5yf$D#m;G zuoAKy)72-3B=~aW5-R>FDI0y$D{?F zL5F{%!*U9^0Bm{S5;yA66HWP%5Ir%{RjPl8824$&yfNNzdQE6<54N-x^5k;&N#M-Q z*m8ZuSwVK_9lH2@n#0(A92KuYQRtY&U1;Q6OaNBMyhpiQYqE4k8RP6UJ1!Ze=E9r5 z^|$HM()owEmz--nRh-(NtmbX!$c4|XprvV!Xt}`+xC}flGM(5ngI#~@PH%6?ph5QT zyUF>D@c`MzJlVu~+&WGduA3vC@QeWm{b|==c9%V_1P4m99)>>y9R6cJa58f7U-a%v z>HH4|{%`2NWhhTv5R3a8cTyMxdw(xT000emvoQrn0wgtMWHvWqIWa9cWjSOmG-f$4 zEnzoeG%Yk{WMesGG&4D3VL6kW2OlIfW@R)qF*jx{HZwOkEi^YVG%aB_Wo9igIb&gE zIWRXhF*h}n-v=ioWj10sH!(9~EoNnAWi2#0GBqtYF=SyaGd5#6VmCE2H)S$1lPU;Z z3^g+`F*i6iG&49iHj|SGaSAq6F*750HaIXXVK6miF=ApeW;Zc4lbs7o3N}N2cA^MAfGK1VI}2+IOZ$BadyA>p zr-TO3SuYT>fC`d- zkSju`t62DkYAyY3d)kg1M+fq;PE8O_4eR7U{+e6zsBcqkH?Z&xsY9F%pzOe?LT_la z6rHZZ*M_nK>jX*_SdOo+QM3!qHe~bg9a>Z275+Y~x%YPJyZawJK>Y)+bb82vjSyJ? O0000 0.0f ? TextColor.GREEN : null; + public Color getItemColor() { + return this.radiation > 0.0f ? Color.GREEN : null; } @Clientside diff --git a/common/src/main/java/common/block/artificial/BlockBed.java b/common/src/main/java/common/block/artificial/BlockBed.java index 0e0f2b31..6b7563ce 100755 --- a/common/src/main/java/common/block/artificial/BlockBed.java +++ b/common/src/main/java/common/block/artificial/BlockBed.java @@ -19,7 +19,7 @@ import common.util.Clientside; import common.util.ExtMath; import common.util.Facing; import common.util.Identifyable; -import common.util.TextColor; +import common.util.Color; import common.util.WorldPos; import common.world.AWorldServer; import common.world.IWorldAccess; @@ -47,11 +47,11 @@ public class BlockBed extends Block implements Rotatable { public static final PropertyEnum PART = PropertyEnum.create("part", BlockBed.EnumPartType.class); - public static final TextColor[] COLORS = new TextColor[] {TextColor.RED, TextColor.WHITE, TextColor.BLACK, TextColor.VIOLET}; + public static final Color[] COLORS = new Color[] {Color.RED, Color.WHITE, Color.BLACK, Color.VIOLET}; - private final TextColor color; + private final Color color; - public BlockBed(TextColor color) { + public BlockBed(Color color) { super(Material.BURNABLE); this.color = color; this.setDefaultState(this.getBaseState().withProperty(PART, BlockBed.EnumPartType.FOOT)); @@ -73,7 +73,7 @@ public class BlockBed extends Block implements Rotatable { if(player.isEntityAlive() && Math.abs(player.posX - (double)pos.getX()) <= 3.0D && Math.abs(player.posY - (double)pos.getY()) <= 2.0D && Math.abs(player.posZ - (double)pos.getZ()) <= 3.0D) { player.setSpawnPoint(new WorldPos(pos, player.worldObj)); - player.connection.addHotbar(TextColor.DARK_GREEN + "Dein Einstiegspunkt wurde auf %s bei [%s, %s, %s] gesetzt", + player.connection.addHotbar(Color.DARK_GREEN + "Dein Einstiegspunkt wurde auf %s bei [%s, %s, %s] gesetzt", player.worldObj.dimension.getDisplay(), player.getSpawnPoint().getX(), player.getSpawnPoint().getY(), player.getSpawnPoint().getZ()); } diff --git a/common/src/main/java/common/block/artificial/BlockCarpet.java b/common/src/main/java/common/block/artificial/BlockCarpet.java index 219b78de..3235be33 100755 --- a/common/src/main/java/common/block/artificial/BlockCarpet.java +++ b/common/src/main/java/common/block/artificial/BlockCarpet.java @@ -7,7 +7,7 @@ import common.model.Model; import common.model.Model.ModelProvider; import common.util.BlockPos; import common.util.Facing; -import common.util.TextColor; +import common.util.Color; import common.world.AWorldServer; import common.world.IWorldAccess; import common.world.State; @@ -15,15 +15,15 @@ import common.world.World; public class BlockCarpet extends Block { - public static final BlockCarpet[] CARPETS = new BlockCarpet[TextColor.values().length]; + public static final BlockCarpet[] CARPETS = new BlockCarpet[Color.values().length]; - private final TextColor color; + private final Color color; - public static BlockCarpet getByColor(TextColor color) { + public static BlockCarpet getByColor(Color color) { return CARPETS[color.ordinal()]; } - public BlockCarpet(TextColor color) + public BlockCarpet(Color color) { super(Material.FLEECE); this.color = color; @@ -34,7 +34,7 @@ public class BlockCarpet extends Block CARPETS[color.ordinal()] = this; } - public TextColor getColor() { + public Color getColor() { return this.color; } diff --git a/common/src/main/java/common/block/artificial/BlockStainedGlass.java b/common/src/main/java/common/block/artificial/BlockStainedGlass.java index 6629abdb..534efbf2 100755 --- a/common/src/main/java/common/block/artificial/BlockStainedGlass.java +++ b/common/src/main/java/common/block/artificial/BlockStainedGlass.java @@ -1,22 +1,22 @@ package common.block.artificial; -import common.util.TextColor; +import common.util.Color; public class BlockStainedGlass extends BlockGlass { - public static final BlockStainedGlass[] GLASS = new BlockStainedGlass[TextColor.values().length]; + public static final BlockStainedGlass[] GLASS = new BlockStainedGlass[Color.values().length]; - private final TextColor color; + private final Color color; - public static BlockStainedGlass getByColor(TextColor color) { + public static BlockStainedGlass getByColor(Color color) { return GLASS[color.ordinal()]; } - public BlockStainedGlass(TextColor color) { + public BlockStainedGlass(Color color) { this.color = color; GLASS[color.ordinal()] = this; } - public TextColor getColor() { + public Color getColor() { return this.color; } } diff --git a/common/src/main/java/common/block/artificial/BlockStainedGlassPane.java b/common/src/main/java/common/block/artificial/BlockStainedGlassPane.java index e956a11f..79af4e33 100755 --- a/common/src/main/java/common/block/artificial/BlockStainedGlassPane.java +++ b/common/src/main/java/common/block/artificial/BlockStainedGlassPane.java @@ -3,19 +3,19 @@ package common.block.artificial; import common.block.Material; import common.item.CheatTab; import common.properties.Property; -import common.util.TextColor; +import common.util.Color; public class BlockStainedGlassPane extends BlockPane { - public static final BlockStainedGlassPane[] PANES = new BlockStainedGlassPane[TextColor.values().length]; + public static final BlockStainedGlassPane[] PANES = new BlockStainedGlassPane[Color.values().length]; - private final TextColor color; + private final Color color; - public static BlockStainedGlassPane getByColor(TextColor color) { + public static BlockStainedGlassPane getByColor(Color color) { return PANES[color.ordinal()]; } - public BlockStainedGlassPane(TextColor color) + public BlockStainedGlassPane(Color color) { super(Material.TRANSLUCENT); this.color = color; @@ -24,7 +24,7 @@ public class BlockStainedGlassPane extends BlockPane PANES[color.ordinal()] = this; } - public TextColor getColor() { + public Color getColor() { return this.color; } diff --git a/common/src/main/java/common/block/artificial/BlockWool.java b/common/src/main/java/common/block/artificial/BlockWool.java index 7ded23cb..14a04f59 100755 --- a/common/src/main/java/common/block/artificial/BlockWool.java +++ b/common/src/main/java/common/block/artificial/BlockWool.java @@ -5,19 +5,19 @@ import common.block.Material; import common.item.CheatTab; import common.model.Model; import common.model.Model.ModelProvider; -import common.util.TextColor; +import common.util.Color; import common.world.State; public class BlockWool extends Block { - public static final BlockWool[] WOOLS = new BlockWool[TextColor.values().length]; + public static final BlockWool[] WOOLS = new BlockWool[Color.values().length]; - private final TextColor color; + private final Color color; - public static BlockWool getByColor(TextColor color) { + public static BlockWool getByColor(Color color) { return WOOLS[color.ordinal()]; } - public BlockWool(TextColor color) { + public BlockWool(Color color) { super(Material.BURNABLE); this.color = color; this.setTab(CheatTab.BLOCKS); @@ -25,7 +25,7 @@ public class BlockWool extends Block { WOOLS[color.ordinal()] = this; } - public TextColor getColor() { + public Color getColor() { return this.color; } diff --git a/common/src/main/java/common/block/natural/BlockColoredClay.java b/common/src/main/java/common/block/natural/BlockColoredClay.java index fd9abd46..31e02ebb 100644 --- a/common/src/main/java/common/block/natural/BlockColoredClay.java +++ b/common/src/main/java/common/block/natural/BlockColoredClay.java @@ -5,26 +5,26 @@ import common.block.Material; import common.item.CheatTab; import common.model.Model; import common.model.Model.ModelProvider; -import common.util.TextColor; +import common.util.Color; import common.world.State; public class BlockColoredClay extends Block { - public static final BlockColoredClay[] CLAY = new BlockColoredClay[TextColor.values().length]; + public static final BlockColoredClay[] CLAY = new BlockColoredClay[Color.values().length]; - private final TextColor color; + private final Color color; - public static BlockColoredClay getByColor(TextColor color) { + public static BlockColoredClay getByColor(Color color) { return CLAY[color.ordinal()]; } - public BlockColoredClay(TextColor color) { + public BlockColoredClay(Color color) { super(Material.SOLID); this.color = color; this.setTab(CheatTab.ROCK); CLAY[color.ordinal()] = this; } - public TextColor getColor() { + public Color getColor() { return this.color; } diff --git a/common/src/main/java/common/block/tech/BlockChest.java b/common/src/main/java/common/block/tech/BlockChest.java index ac3df983..a1376c69 100755 --- a/common/src/main/java/common/block/tech/BlockChest.java +++ b/common/src/main/java/common/block/tech/BlockChest.java @@ -29,7 +29,7 @@ import common.tileentity.TileEntityChest; import common.util.BlockPos; import common.util.BoundingBox; import common.util.Facing; -import common.util.TextColor; +import common.util.Color; import common.vars.Vars; import common.world.State; import common.world.World; @@ -165,14 +165,14 @@ public class BlockChest extends Block implements ITileEntityProvider, Rotatable if(chest.getLockCode() != null) { if(stack.hasDisplayName() && stack.getDisplayName().equals(chest.getLockCode())) { chest.setLockCode(null); - playerIn.connection.addHotbar(TextColor.BLUE + "%s wurde entriegelt", chest.getName()); + playerIn.connection.addHotbar(Color.BLUE + "%s wurde entriegelt", chest.getName()); playerIn.connection.sendPacket(new SPacketSoundEffect(SoundEvent.DOOR, playerIn.posX, playerIn.posY, playerIn.posZ, 1.0F)); return true; } } else if(stack.hasDisplayName() && !stack.getDisplayName().isEmpty()) { chest.setLockCode(stack.getDisplayName()); - playerIn.connection.addHotbar(TextColor.ORANGE + "%s wurde verriegelt", chest.getName()); + playerIn.connection.addHotbar(Color.ORANGE + "%s wurde verriegelt", chest.getName()); playerIn.connection.sendPacket(new SPacketSoundEffect(SoundEvent.DOOR, playerIn.posX, playerIn.posY, playerIn.posZ, 1.0F)); return true; } diff --git a/common/src/main/java/common/block/tech/BlockNuke.java b/common/src/main/java/common/block/tech/BlockNuke.java index 55b6aab5..d04abd41 100755 --- a/common/src/main/java/common/block/tech/BlockNuke.java +++ b/common/src/main/java/common/block/tech/BlockNuke.java @@ -9,7 +9,7 @@ import common.item.CheatTab; import common.model.Model; import common.model.Model.ModelProvider; import common.util.BlockPos; -import common.util.TextColor; +import common.util.Color; import common.world.Explosion; import common.world.State; import common.world.World; @@ -54,7 +54,7 @@ public class BlockNuke extends Block return provider.getModel("nuke_side").add().nswe().d("nuke_bottom").u("nuke_top"); } - public TextColor getItemColor() { - return TextColor.RED; + public Color getItemColor() { + return Color.RED; } } diff --git a/common/src/main/java/common/block/tech/BlockTNT.java b/common/src/main/java/common/block/tech/BlockTNT.java index 8cfd5029..96658e18 100755 --- a/common/src/main/java/common/block/tech/BlockTNT.java +++ b/common/src/main/java/common/block/tech/BlockTNT.java @@ -20,7 +20,7 @@ import common.tileentity.TileEntity; import common.util.BlockPos; import common.util.ExtMath; import common.util.Facing; -import common.util.TextColor; +import common.util.Color; import common.util.Vec3; import common.world.AWorldServer; import common.world.Explosion; @@ -161,8 +161,8 @@ public class BlockTNT extends Block this.onBroken(world, pos, state.withProperty(BlockTNT.EXPLODE, Boolean.valueOf(true))); } - public TextColor getItemColor() { - return TextColor.RED; + public Color getItemColor() { + return Color.RED; } public boolean dispense(AWorldServer world, TileEntity source, Vec3 position, BlockPos blockpos, Facing facing, ItemStack stack) { diff --git a/common/src/main/java/common/effect/Effect.java b/common/src/main/java/common/effect/Effect.java index 74da2616..52587e46 100755 --- a/common/src/main/java/common/effect/Effect.java +++ b/common/src/main/java/common/effect/Effect.java @@ -7,18 +7,18 @@ import common.entity.npc.EntityNPC; import common.entity.projectile.EntityPotion; import common.entity.types.EntityLiving; import common.item.ItemStack; -import common.util.TextColor; +import common.util.Color; import common.vars.Vars; public enum Effect { SPEED("speed", 2, 180, "Schnelligkeit", "Trank der Schnelligkeit", false, 8171462) { public String getTooltip(int amp) { - return String.format(TextColor.BLUE + "+%d%% Geschwindigkeit", 20 * (amp + 1)); + return String.format(Color.BLUE + "+%d%% Geschwindigkeit", 20 * (amp + 1)); } }, SLOWNESS("slowness", 1, 90, "Langsamkeit", "Trank der Langsamkeit", true, 5926017) { public String getTooltip(int amp) { - return String.format(TextColor.RED + "-%d%% Geschwindigkeit", 15 * (amp + 1)); + return String.format(Color.RED + "-%d%% Geschwindigkeit", 15 * (amp + 1)); } }, HASTE("haste", "Eile", "Trank der Eile", false, 14270531) { @@ -29,7 +29,7 @@ public enum Effect { FATIGUE("mining_fatigue", "Abbaulähmung", "Trank der Trägheit", true, 4866583), STRENGTH("strength", 2, 180, "Stärke", "Trank der Stärke", false, 9643043) { public String getTooltip(int amp) { - return String.format(TextColor.BLUE + "+%d%% Angriffsschaden", 50 * (amp + 1)); + return String.format(Color.BLUE + "+%d%% Angriffsschaden", 50 * (amp + 1)); } }, HEAL("health", 2, "Direktheilung", "Trank der Heilung", false, 16262179) { @@ -110,7 +110,7 @@ public enum Effect { STABILITY("stability", 1, 180, "Stabilität", "Trank der Standfestigkeit", false, 5797459), WEAKNESS("weakness", 1, 90, "Schwäche", "Trank der Schwäche", true, 4738376) { public String getTooltip(int amp) { - return String.format(TextColor.RED + "-%d%% Angriffsschaden", 20 * (amp + 1)); + return String.format(Color.RED + "-%d%% Angriffsschaden", 20 * (amp + 1)); } }, POISON("poison", 2, 45, "Vergiftung", "Trank der Vergiftung", true, 5149489) { diff --git a/common/src/main/java/common/entity/DamageSource.java b/common/src/main/java/common/entity/DamageSource.java index 3fb2052a..4b1769e3 100755 --- a/common/src/main/java/common/entity/DamageSource.java +++ b/common/src/main/java/common/entity/DamageSource.java @@ -2,44 +2,44 @@ package common.entity; import common.entity.projectile.EntityProjectile; import common.entity.types.EntityLiving; -import common.util.TextColor; +import common.util.Color; import common.world.Explosion; public class DamageSource { public static final DamageSource inFire = - (new DamageSource(TextColor.ORANGE, "%s ging in Flammen auf", "%s lief ins Feuer, während er mit %s kämpfte", "%s ins Feuer gelaufen")).setFireDamage(); + (new DamageSource(Color.ORANGE, "%s ging in Flammen auf", "%s lief ins Feuer, während er mit %s kämpfte", "%s ins Feuer gelaufen")).setFireDamage(); public static final DamageSource onFire = - (new DamageSource(TextColor.ORANGE, "%s wurde zu heiß und verbrannte", "%s wurde während des Kampfes mit %s geröstet", "%s geröstet")).setDamageBypassesArmor().setFireDamage(); + (new DamageSource(Color.ORANGE, "%s wurde zu heiß und verbrannte", "%s wurde während des Kampfes mit %s geröstet", "%s geröstet")).setDamageBypassesArmor().setFireDamage(); public static final DamageSource hotLiquid = - (new DamageSource(TextColor.ORANGE, "%s versuchte in einer unangenehm brennenden Flüssigkeit zu schwimmen", "%s fiel beim Versuch %s zu entkommen in eine unangenehm brennende Flüssigkeit", "%s in unangenehm brennender Flüssigkeit gelandet")).setFireDamage(); + (new DamageSource(Color.ORANGE, "%s versuchte in einer unangenehm brennenden Flüssigkeit zu schwimmen", "%s fiel beim Versuch %s zu entkommen in eine unangenehm brennende Flüssigkeit", "%s in unangenehm brennender Flüssigkeit gelandet")).setFireDamage(); public static final DamageSource molten = - (new DamageSource(TextColor.ORANGE, "%s versuchte dem Magmaregen zu trotzen", "%s geriet beim Versuch %s zu entkommen in Magmaregen", "%s in Magmaregen geraten")).setFireDamage(); + (new DamageSource(Color.ORANGE, "%s versuchte dem Magmaregen zu trotzen", "%s geriet beim Versuch %s zu entkommen in Magmaregen", "%s in Magmaregen geraten")).setFireDamage(); public static final DamageSource inWall = - (new DamageSource(TextColor.GRAY, "%s wurde lebendig begraben")).setDamageBypassesArmor(); + (new DamageSource(Color.GRAY, "%s wurde lebendig begraben")).setDamageBypassesArmor(); public static final DamageSource dry = - (new DamageSource(TextColor.GRAY, "%s ist vertrocknet", "%s ist beim Versuch %s zu entkommen vertrocknet", "%s vertrocknet")).setDamageBypassesArmor(); + (new DamageSource(Color.GRAY, "%s ist vertrocknet", "%s ist beim Versuch %s zu entkommen vertrocknet", "%s vertrocknet")).setDamageBypassesArmor(); public static final DamageSource cactus = - new DamageSource(TextColor.ORK, "%s wurde zu Tode gestochen", "%s rannte beim Versuch %s zu entkommen in einen Kaktus", "%s in Kaktus gerannt"); + new DamageSource(Color.ORK, "%s wurde zu Tode gestochen", "%s rannte beim Versuch %s zu entkommen in einen Kaktus", "%s in Kaktus gerannt"); public static final DamageSource fall = - (new DamageSource(TextColor.NEON, "%s fiel der Schwerkraft zum Opfer")).setDamageBypassesArmor(); + (new DamageSource(Color.NEON, "%s fiel der Schwerkraft zum Opfer")).setDamageBypassesArmor(); public static final DamageSource outOfWorld = - (new DamageSource(TextColor.DARK_GRAY, "%s fiel aus der Welt")).setDamageBypassesArmor(); + (new DamageSource(Color.DARK_GRAY, "%s fiel aus der Welt")).setDamageBypassesArmor(); public static final DamageSource generic = - (new DamageSource(TextColor.LIGHT_GRAY, "%s starb")).setDamageBypassesArmor(); + (new DamageSource(Color.LIGHT_GRAY, "%s starb")).setDamageBypassesArmor(); public static final DamageSource magic = - (new DamageSource(TextColor.DARK_MAGENTA, "%s wurde durch Magie getötet")).setDamageBypassesArmor().setMagicDamage(); + (new DamageSource(Color.DARK_MAGENTA, "%s wurde durch Magie getötet")).setDamageBypassesArmor().setMagicDamage(); public static final DamageSource anvil = - new DamageSource(TextColor.DARK_RED, "%s wurde von einem fallenden Amboss zerquetscht"); + new DamageSource(Color.DARK_RED, "%s wurde von einem fallenden Amboss zerquetscht"); public static final DamageSource fallingBlock = - new DamageSource(TextColor.GRAY, "%s wurde von einem fallenden Block zerquetscht"); + new DamageSource(Color.GRAY, "%s wurde von einem fallenden Block zerquetscht"); public static final DamageSource radiation = - (new DamageSource(TextColor.GREEN, "%s hat seine Halbwertszeit nicht rechtzeitig erreicht")).setDamageBypassesArmor(); + (new DamageSource(Color.GREEN, "%s hat seine Halbwertszeit nicht rechtzeitig erreicht")).setDamageBypassesArmor(); protected final String display; protected final String displayExtra; protected final String displayKill; - protected final TextColor color; + protected final Color color; private boolean isUnblockable; private boolean fireDamage; @@ -49,57 +49,57 @@ public class DamageSource public static DamageSource causeMobDamage(EntityLiving mob) { - return new EntityDamageSource(TextColor.CRIMSON, "%s wurde von %s erschlagen", "%s wurde von %s mit %s erschlagen", + return new EntityDamageSource(Color.CRIMSON, "%s wurde von %s erschlagen", "%s wurde von %s mit %s erschlagen", "%s erschlagen", "%s mit %s erschlagen", mob); } public static DamageSource causeLightningDamage(EntityLiving mob) { - return mob == null ? new DamageSource(TextColor.YELLOW, "%s wurde vom Blitz getroffen und gegrillt") : - new EntityDamageSource(TextColor.YELLOW, "%s wurde von %s gegrillt", "%s wurde von %s mit %s gegrillt", + return mob == null ? new DamageSource(Color.YELLOW, "%s wurde vom Blitz getroffen und gegrillt") : + new EntityDamageSource(Color.YELLOW, "%s wurde von %s gegrillt", "%s wurde von %s mit %s gegrillt", "%s gegrillt", "%s mit %s gegrillt", mob); } public static DamageSource causeExterminatusDamage(EntityLiving mob) { - return mob == null ? new DamageSource(TextColor.DARK_RED, "%s wurde vernichtet") : - new EntityDamageSource(TextColor.DARK_RED, "%s wurde von %s vernichtet", "%s wurde von %s mit %s vernichtet", + return mob == null ? new DamageSource(Color.DARK_RED, "%s wurde vernichtet") : + new EntityDamageSource(Color.DARK_RED, "%s wurde von %s vernichtet", "%s wurde von %s mit %s vernichtet", "%s vernichtet", "%s mit %s vernichtet", mob); } public static DamageSource causeShotDamage(Entity projectile, Entity shooter) { - return (new EntityDamageSourceIndirect(TextColor.RED, "%s wurde von %s erschossen", "%s wurde von %s mit %s erschossen", "%s erschossen", "%s mit %s erschossen", projectile, shooter)).setProjectile(); + return (new EntityDamageSourceIndirect(Color.RED, "%s wurde von %s erschossen", "%s wurde von %s mit %s erschossen", "%s erschossen", "%s mit %s erschossen", projectile, shooter)).setProjectile(); } public static DamageSource causeFireballDamage(EntityProjectile fireball, Entity shooter) { - return shooter == null ? (new EntityDamageSourceIndirect(TextColor.YELLOW, "%s wurde von %s flambiert", fireball)).setFireDamage().setProjectile() : (new EntityDamageSourceIndirect(TextColor.YELLOW, "%s wurde von %s flambiert", "%s wurde von %s mit %s flambiert", "%s flambiert", "%s mit %s flambiert", fireball, shooter)).setFireDamage().setProjectile(); + return shooter == null ? (new EntityDamageSourceIndirect(Color.YELLOW, "%s wurde von %s flambiert", fireball)).setFireDamage().setProjectile() : (new EntityDamageSourceIndirect(Color.YELLOW, "%s wurde von %s flambiert", "%s wurde von %s mit %s flambiert", "%s flambiert", "%s mit %s flambiert", fireball, shooter)).setFireDamage().setProjectile(); } public static DamageSource causeThrownDamage(Entity source, Entity thrower) { - return (new EntityDamageSourceIndirect(TextColor.DARK_GREEN, "%s wurde von %s zu Tode geprügelt", "%s wurde von %s mit %s zu Tode geprügelt", "%s zu Tode geprügelt", "%s mit %s zu Tode geprügelt", source, thrower)).setProjectile(); + return (new EntityDamageSourceIndirect(Color.DARK_GREEN, "%s wurde von %s zu Tode geprügelt", "%s wurde von %s mit %s zu Tode geprügelt", "%s zu Tode geprügelt", "%s mit %s zu Tode geprügelt", source, thrower)).setProjectile(); } public static DamageSource causeTeleFragDamage(Entity source, Entity replacer) { - return (new EntityDamageSourceIndirect(TextColor.MAGENTA, "%s wurde von %s verdrängt", "%s wurde von %s mit %s verdrängt", "%s verdrängt", "%s mit %s verdrängt", source, replacer)).setDamageBypassesArmor(); + return (new EntityDamageSourceIndirect(Color.MAGENTA, "%s wurde von %s verdrängt", "%s wurde von %s mit %s verdrängt", "%s verdrängt", "%s mit %s verdrängt", source, replacer)).setDamageBypassesArmor(); } public static DamageSource causeIndirectMagicDamage(Entity source, Entity mage) { - return (new EntityDamageSourceIndirect(TextColor.DARK_MAGENTA, "%s wurde von %s mit Magie getötet", "%s wurde von %s mit %s getötet", "%s mit Magie getötet", "%s mit %s getötet", source, mage)).setDamageBypassesArmor().setMagicDamage(); + return (new EntityDamageSourceIndirect(Color.DARK_MAGENTA, "%s wurde von %s mit Magie getötet", "%s wurde von %s mit %s getötet", "%s mit Magie getötet", "%s mit %s getötet", source, mage)).setDamageBypassesArmor().setMagicDamage(); } public static DamageSource causeThornsDamage(Entity source) { - return (new EntityDamageSource(TextColor.ORK, "%s wurde beim Versuch %s zu verletzen getötet", "%s durch Dornen getötet", source)).setIsThornsDamage().setMagicDamage(); + return (new EntityDamageSource(Color.ORK, "%s wurde beim Versuch %s zu verletzen getötet", "%s durch Dornen getötet", source)).setIsThornsDamage().setMagicDamage(); } public static DamageSource causeExplosionDamage(Explosion explosion) { - return explosion != null && explosion.getExplosivePlacedBy() != null ? (new EntityDamageSource(TextColor.YELLOW, "%s wurde durch %s in die Luft gesprengt", "%s in die Luft gesprengt", explosion.getExplosivePlacedBy())).setExplosion() : (new DamageSource(TextColor.YELLOW, "%s wurde in die Luft gesprengt")).setExplosion(); + return explosion != null && explosion.getExplosivePlacedBy() != null ? (new EntityDamageSource(Color.YELLOW, "%s wurde durch %s in die Luft gesprengt", "%s in die Luft gesprengt", explosion.getExplosivePlacedBy())).setExplosion() : (new DamageSource(Color.YELLOW, "%s wurde in die Luft gesprengt")).setExplosion(); } /** @@ -135,7 +135,7 @@ public class DamageSource return this.isUnblockable; } - protected DamageSource(TextColor color, String display, String extra, String kill) + protected DamageSource(Color color, String display, String extra, String kill) { this.color = color; this.display = this.color + display; @@ -143,7 +143,7 @@ public class DamageSource this.displayKill = this.color + "* " + kill; } - protected DamageSource(TextColor color, String display) + protected DamageSource(Color color, String display) { this(color, display, display, ""); } diff --git a/common/src/main/java/common/entity/Entity.java b/common/src/main/java/common/entity/Entity.java index 7f316f67..8c069d92 100755 --- a/common/src/main/java/common/entity/Entity.java +++ b/common/src/main/java/common/entity/Entity.java @@ -37,7 +37,7 @@ import common.util.ParticleType; import common.util.PortalType; import common.util.Position; import common.util.Serverside; -import common.util.TextColor; +import common.util.Color; import common.util.Vec3; import common.vars.Vars; import common.world.Explosion; @@ -2410,12 +2410,12 @@ public abstract class Entity public final String getCommandName() { - return TextColor.stripCodes(this.getName()); + return Color.stripCodes(this.getName()); } - public final String getColoredName(TextColor reset) + public final String getColoredName(Color reset) { - return TextColor.DARK_GRAY + "[" + this.getName() + TextColor.DARK_GRAY + "]" + reset; + return Color.DARK_GRAY + "[" + this.getName() + Color.DARK_GRAY + "]" + reset; } // public Text formatComponent(Text comp) { diff --git a/common/src/main/java/common/entity/EntityDamageSource.java b/common/src/main/java/common/entity/EntityDamageSource.java index 77f85c89..8b5b7bfc 100755 --- a/common/src/main/java/common/entity/EntityDamageSource.java +++ b/common/src/main/java/common/entity/EntityDamageSource.java @@ -2,7 +2,7 @@ package common.entity; import common.entity.types.EntityLiving; import common.item.ItemStack; -import common.util.TextColor; +import common.util.Color; public class EntityDamageSource extends DamageSource { @@ -14,14 +14,14 @@ public class EntityDamageSource extends DamageSource */ private boolean isThornsDamage = false; - public EntityDamageSource(TextColor color, String display, String item, String kill, String killItem, Entity damageSourceEntityIn) + public EntityDamageSource(Color color, String display, String item, String kill, String killItem, Entity damageSourceEntityIn) { super(color, display, item, kill); this.damageSourceEntity = damageSourceEntityIn; this.displayKillItem = killItem; } - public EntityDamageSource(TextColor color, String display, String kill, Entity damageSourceEntityIn) + public EntityDamageSource(Color color, String display, String kill, Entity damageSourceEntityIn) { this(color, display, display, kill, kill, damageSourceEntityIn); } diff --git a/common/src/main/java/common/entity/EntityDamageSourceIndirect.java b/common/src/main/java/common/entity/EntityDamageSourceIndirect.java index eff37f09..bc718cc2 100755 --- a/common/src/main/java/common/entity/EntityDamageSourceIndirect.java +++ b/common/src/main/java/common/entity/EntityDamageSourceIndirect.java @@ -2,19 +2,19 @@ package common.entity; import common.entity.types.EntityLiving; import common.item.ItemStack; -import common.util.TextColor; +import common.util.Color; public class EntityDamageSourceIndirect extends EntityDamageSource { private Entity indirectEntity; - public EntityDamageSourceIndirect(TextColor color, String display, String item, String kill, String killItem, Entity source, Entity indirectEntityIn) + public EntityDamageSourceIndirect(Color color, String display, String item, String kill, String killItem, Entity source, Entity indirectEntityIn) { super(color, display, item, kill, killItem, source); this.indirectEntity = indirectEntityIn; } - public EntityDamageSourceIndirect(TextColor color, String display, Entity source) + public EntityDamageSourceIndirect(Color color, String display, Entity source) { this(color, display, display, "", "", source, source); } diff --git a/common/src/main/java/common/entity/animal/EntitySheep.java b/common/src/main/java/common/entity/animal/EntitySheep.java index f27580e5..127dffca 100755 --- a/common/src/main/java/common/entity/animal/EntitySheep.java +++ b/common/src/main/java/common/entity/animal/EntitySheep.java @@ -29,7 +29,7 @@ import common.rng.Random; import common.tags.TagObject; import common.util.Clientside; import common.util.ExtMath; -import common.util.TextColor; +import common.util.Color; import common.world.World; public class EntitySheep extends EntityAnimal @@ -100,7 +100,7 @@ public class EntitySheep extends EntityAnimal { super.entityInit(); this.dataWatcher.addObject(16, (byte)0); - this.dataWatcher.addObject(17, (byte)(TextColor.WHITE.ordinal() & 255)); + this.dataWatcher.addObject(17, (byte)(Color.WHITE.ordinal() & 255)); } /** @@ -209,7 +209,7 @@ public class EntitySheep extends EntityAnimal { super.readEntity(tagCompund); this.setSheared(tagCompund.getBool("Sheared")); - this.setFleeceColor(TextColor.byName(tagCompund.getString("Color"))); + this.setFleeceColor(Color.byName(tagCompund.getString("Color"))); } /** @@ -244,15 +244,15 @@ public class EntitySheep extends EntityAnimal /** * Gets the wool color of this sheep. */ - public TextColor getFleeceColor() + public Color getFleeceColor() { - return TextColor.values()[(this.dataWatcher.getWatchableObjectByte(17) & 255) % TextColor.values().length]; + return Color.values()[(this.dataWatcher.getWatchableObjectByte(17) & 255) % Color.values().length]; } /** * Sets the wool color of this sheep */ - public void setFleeceColor(TextColor color) + public void setFleeceColor(Color color) { this.dataWatcher.updateObject(17, (byte)(color.ordinal() & 255)); } @@ -273,23 +273,23 @@ public class EntitySheep extends EntityAnimal this.dataWatcher.updateObject(16, (byte)(sheared ? 1 : 0)); } - private static final TextColor[] RARE_COLORS = { - TextColor.BLUE, TextColor.CYAN, TextColor.DARK_GREEN, TextColor.LIGHT_BLUE, TextColor.GREEN, - TextColor.MAGENTA, TextColor.ORANGE, TextColor.DARK_VIOLET, TextColor.VIOLET, TextColor.RED + private static final Color[] RARE_COLORS = { + Color.BLUE, Color.CYAN, Color.DARK_GREEN, Color.LIGHT_BLUE, Color.GREEN, + Color.MAGENTA, Color.ORANGE, Color.DARK_VIOLET, Color.VIOLET, Color.RED }; - public static TextColor getRandomSheepColor(Random random, float temp) + public static Color getRandomSheepColor(Random random, float temp) { if(temp <= 0.0f) - return TextColor.WHITE; + return Color.WHITE; int i = random.zrange(140); - return i < 20 ? TextColor.BLACK : - (i < 30 ? TextColor.GRAY : - (i < 40 ? TextColor.LIGHT_GRAY : - (i < 70 ? TextColor.BROWN : - (i < 120 ? TextColor.WHITE : - (i < 130 ? (random.chance(10) ? RARE_COLORS[i - 120] : TextColor.WHITE) : - (random.chance(500) ? TextColor.YELLOW : TextColor.WHITE) + return i < 20 ? Color.BLACK : + (i < 30 ? Color.GRAY : + (i < 40 ? Color.LIGHT_GRAY : + (i < 70 ? Color.BROWN : + (i < 120 ? Color.WHITE : + (i < 130 ? (random.chance(10) ? RARE_COLORS[i - 120] : Color.WHITE) : + (random.chance(500) ? Color.YELLOW : Color.WHITE) ))))); } @@ -322,14 +322,14 @@ public class EntitySheep extends EntityAnimal return livingdata; } - private TextColor getDyeColorMixFromParents(EntityAnimal father, EntityAnimal mother) + private Color getDyeColorMixFromParents(EntityAnimal father, EntityAnimal mother) { - TextColor i = ((EntitySheep)father).getFleeceColor(); - TextColor j = ((EntitySheep)mother).getFleeceColor(); + Color i = ((EntitySheep)father).getFleeceColor(); + Color j = ((EntitySheep)mother).getFleeceColor(); this.inventoryCrafting.setInventorySlotContents(0, new ItemStack(ItemDye.getByColor(i))); this.inventoryCrafting.setInventorySlotContents(1, new ItemStack(ItemDye.getByColor(j))); ItemStack itemstack = CraftingRegistry.getMatching(this.inventoryCrafting); - TextColor k; + Color k; if (itemstack != null && itemstack.getItem() instanceof ItemDye dye) { diff --git a/common/src/main/java/common/entity/animal/EntityWolf.java b/common/src/main/java/common/entity/animal/EntityWolf.java index a2fdde7f..bfc20a18 100755 --- a/common/src/main/java/common/entity/animal/EntityWolf.java +++ b/common/src/main/java/common/entity/animal/EntityWolf.java @@ -33,7 +33,7 @@ import common.tags.TagObject; import common.util.Clientside; import common.util.ExtMath; import common.util.ParticleType; -import common.util.TextColor; +import common.util.Color; import common.vars.Vars; import common.world.World; @@ -118,7 +118,7 @@ public class EntityWolf extends EntityTameable super.entityInit(); this.dataWatcher.addObject(18, this.getHealth()); this.dataWatcher.addObject(19, (byte)0); - this.dataWatcher.addObject(20, (byte)(TextColor.RED.ordinal() & 255)); + this.dataWatcher.addObject(20, (byte)(Color.RED.ordinal() & 255)); } // protected void playStepSound(BlockPos pos, Block blockIn) @@ -137,7 +137,7 @@ public class EntityWolf extends EntityTameable { super.readEntity(tagCompund); this.setAngry(tagCompund.getBool("Angry")); - this.setCollarColor(TextColor.byName(tagCompund.getString("CollarColor"))); + this.setCollarColor(Color.byName(tagCompund.getString("CollarColor"))); } /** @@ -373,7 +373,7 @@ public class EntityWolf extends EntityTameable } else if (itemstack.getItem() instanceof ItemDye dye) { - TextColor enumdyecolor = dye.getColor(); + Color enumdyecolor = dye.getColor(); if (enumdyecolor != this.getCollarColor()) { @@ -492,12 +492,12 @@ public class EntityWolf extends EntityTameable } } - public TextColor getCollarColor() + public Color getCollarColor() { - return TextColor.values()[(this.dataWatcher.getWatchableObjectByte(20) & 255) % TextColor.values().length]; + return Color.values()[(this.dataWatcher.getWatchableObjectByte(20) & 255) % Color.values().length]; } - public void setCollarColor(TextColor collarcolor) + public void setCollarColor(Color collarcolor) { this.dataWatcher.updateObject(20, (byte)(collarcolor.ordinal() & 255)); } diff --git a/common/src/main/java/common/entity/item/EntityItem.java b/common/src/main/java/common/entity/item/EntityItem.java index 1180dc0e..5c54ace3 100755 --- a/common/src/main/java/common/entity/item/EntityItem.java +++ b/common/src/main/java/common/entity/item/EntityItem.java @@ -18,7 +18,7 @@ import common.util.BlockPos; import common.util.ExtMath; import common.util.ParticleType; import common.util.PortalType; -import common.util.TextColor; +import common.util.Color; import common.vars.Vars; import common.world.World; import common.world.AWorldServer; @@ -599,7 +599,7 @@ public class EntityItem extends Entity ItemStack stack = this.getEntityItem(); if(!stack.isStacked()) return null; - return TextColor.DARK_GREEN + "" + stack.getSize(); + return Color.DARK_GREEN + "" + stack.getSize(); } public EntityType getType() { diff --git a/common/src/main/java/common/entity/item/EntityXp.java b/common/src/main/java/common/entity/item/EntityXp.java index 781879e8..df2111c0 100755 --- a/common/src/main/java/common/entity/item/EntityXp.java +++ b/common/src/main/java/common/entity/item/EntityXp.java @@ -14,7 +14,7 @@ import common.util.Clientside; import common.util.ExtMath; import common.util.ParticleType; import common.util.PortalType; -import common.util.TextColor; +import common.util.Color; import common.vars.Vars; import common.world.World; @@ -396,7 +396,7 @@ public class EntityXp extends Entity implements IObjectData // if(!this.hasCustomName()) { // return super.getDisplayName(); // } - return this.hasCustomName() ? TextColor.GREEN + this.getCustomNameTag() : null; + return this.hasCustomName() ? Color.GREEN + this.getCustomNameTag() : null; } public EntityType getType() { diff --git a/common/src/main/java/common/entity/npc/Alignment.java b/common/src/main/java/common/entity/npc/Alignment.java index 5c2ca4fd..e3882f60 100755 --- a/common/src/main/java/common/entity/npc/Alignment.java +++ b/common/src/main/java/common/entity/npc/Alignment.java @@ -3,18 +3,18 @@ package common.entity.npc; import java.util.Map; import common.collect.Maps; -import common.util.TextColor; +import common.util.Color; public enum Alignment { - LAWFUL_GOOD("lgood", "Rechtsch. gut", 1, 1, TextColor.NEON), - GOOD("good", "Gut", 0, 1, TextColor.BLUE), - CHAOTIC_GOOD("cgood", "Chaotisch gut", -1, 1, TextColor.CYAN), - LAWFUL("lawful", "Rechtschaffen", 1, 0, TextColor.WHITE), - NEUTRAL("neutral", "Neutral", 0, 0, TextColor.LIGHT_GRAY), - CHAOTIC("chaotic", "Chaotisch", -1, 0, TextColor.GRAY), - LAWFUL_EVIL("levil", "Rechtsch. böse", 1, -1, TextColor.ORANGE), - EVIL("evil", "Böse", 0, -1, TextColor.RED), - CHAOTIC_EVIL("cevil", "Chaotisch böse", -1, -1, TextColor.DARK_RED); + LAWFUL_GOOD("lgood", "Rechtsch. gut", 1, 1, Color.NEON), + GOOD("good", "Gut", 0, 1, Color.BLUE), + CHAOTIC_GOOD("cgood", "Chaotisch gut", -1, 1, Color.CYAN), + LAWFUL("lawful", "Rechtschaffen", 1, 0, Color.WHITE), + NEUTRAL("neutral", "Neutral", 0, 0, Color.LIGHT_GRAY), + CHAOTIC("chaotic", "Chaotisch", -1, 0, Color.GRAY), + LAWFUL_EVIL("levil", "Rechtsch. böse", 1, -1, Color.ORANGE), + EVIL("evil", "Böse", 0, -1, Color.RED), + CHAOTIC_EVIL("cevil", "Chaotisch böse", -1, -1, Color.DARK_RED); private static final Map LOOKUP = Maps.newHashMap(); @@ -22,12 +22,12 @@ public enum Alignment { public final boolean chaotic; public final boolean good; public final boolean evil; - public final TextColor color; + public final Color color; public final String name; public final String prefix; public final String display; - private Alignment(String name, String display, int temper, int morale, TextColor color) { + private Alignment(String name, String display, int temper, int morale, Color color) { this.lawful = temper == 1; this.chaotic = temper == -1; this.good = morale == 1; @@ -35,10 +35,10 @@ public enum Alignment { this.color = color; this.name = name; this.display = display; - this.prefix = TextColor.GRAY + "[" + (temper == 0 && morale == 0 ? TextColor.LIGHT_GRAY + "~" : "") + - (this.good ? TextColor.BLUE + "*" : (this.evil ? TextColor.RED + "!" : "")) + - (this.lawful ? TextColor.GREEN + "+" : (this.chaotic ? TextColor.DARK_MAGENTA + "-" : "")) + - TextColor.GRAY + "]"; + this.prefix = Color.GRAY + "[" + (temper == 0 && morale == 0 ? Color.LIGHT_GRAY + "~" : "") + + (this.good ? Color.BLUE + "*" : (this.evil ? Color.RED + "!" : "")) + + (this.lawful ? Color.GREEN + "+" : (this.chaotic ? Color.DARK_MAGENTA + "-" : "")) + + Color.GRAY + "]"; } public static Alignment getByName(String name) { diff --git a/common/src/main/java/common/entity/npc/EntityNPC.java b/common/src/main/java/common/entity/npc/EntityNPC.java index 0e34d45a..37f8ffd7 100755 --- a/common/src/main/java/common/entity/npc/EntityNPC.java +++ b/common/src/main/java/common/entity/npc/EntityNPC.java @@ -92,7 +92,7 @@ import common.util.ExtMath; import common.util.Facing; import common.util.ParticleType; import common.util.PortalType; -import common.util.TextColor; +import common.util.Color; import common.util.Vec3; import common.util.WorldPos; import common.vars.Vars; @@ -1139,7 +1139,7 @@ public abstract class EntityNPC extends EntityLiving } public String formatStats() { - return super.formatStats() + (this.getManaPoints() == 0 ? "" : TextColor.GRAY + " [" + TextColor.MIDNIGHT + this.getManaPoints() + TextColor.GRAY + "]"); + return super.formatStats() + (this.getManaPoints() == 0 ? "" : Color.GRAY + " [" + Color.MIDNIGHT + this.getManaPoints() + Color.GRAY + "]"); } public MerchantRecipeList getTrades(EntityNPC player) { diff --git a/common/src/main/java/common/entity/types/EntityLiving.java b/common/src/main/java/common/entity/types/EntityLiving.java index 38746573..7035d3e6 100755 --- a/common/src/main/java/common/entity/types/EntityLiving.java +++ b/common/src/main/java/common/entity/types/EntityLiving.java @@ -57,7 +57,7 @@ import common.util.Clientside; import common.util.ExtMath; import common.util.ParticleType; import common.util.Serverside; -import common.util.TextColor; +import common.util.Color; import common.util.Vec3; import common.vars.Vars; import common.world.State; @@ -2243,15 +2243,15 @@ public abstract class EntityLiving extends Entity this.effectsDirty = true; } - public static TextColor getHealthColor(int health, int max) { + public static Color getHealthColor(int health, int max) { float perc = (float)health / (float)max; - return /* health <= 1.0f ? ChatFormat.DARK_RED : ( */ perc >= 1.0f ? TextColor.DARK_GREEN : (perc >= 0.75f ? TextColor.GREEN : - (perc >= 0.5f ? TextColor.YELLOW : (perc >= 0.25f ? TextColor.ORANGE : (perc >= 0.1f ? TextColor.RED : TextColor.DARK_RED)))); + return /* health <= 1.0f ? ChatFormat.DARK_RED : ( */ perc >= 1.0f ? Color.DARK_GREEN : (perc >= 0.75f ? Color.GREEN : + (perc >= 0.5f ? Color.YELLOW : (perc >= 0.25f ? Color.ORANGE : (perc >= 0.1f ? Color.RED : Color.DARK_RED)))); } - public static TextColor getMaxHpColor(int max) { - return max >= 2000 ? TextColor.BLACK : (max >= 500 ? TextColor.DARK_MAGENTA : (max >= 120 ? TextColor.MAGENTA : - (max >= 40 ? TextColor.CYAN : (max >= 15 ? TextColor.NEON : (max >= 5 ? TextColor.BLUE : TextColor.LIGHT_GRAY))))); + public static Color getMaxHpColor(int max) { + return max >= 2000 ? Color.BLACK : (max >= 500 ? Color.DARK_MAGENTA : (max >= 120 ? Color.MAGENTA : + (max >= 40 ? Color.CYAN : (max >= 15 ? Color.NEON : (max >= 5 ? Color.BLUE : Color.LIGHT_GRAY))))); } public int getEnergy(Energy type) { @@ -2272,7 +2272,7 @@ public abstract class EntityLiving extends Entity public String formatStats() { return String.format(this.getAlignment().prefix + " " + getHealthColor(this.getHealth(), this.getMaxHealth()) + "%d" + - TextColor.GRAY + "/" + getMaxHpColor(this.getMaxHealth()) + "%d", + Color.GRAY + "/" + getMaxHpColor(this.getMaxHealth()) + "%d", this.getHealth(), this.getMaxHealth()); } @@ -2327,7 +2327,7 @@ public abstract class EntityLiving extends Entity String kill; IPlayer receiver = null; if(this.combat.size() == 0) { - msg = kill = natural ? String.format("%s starb", this.getColoredName(TextColor.LIGHT_GRAY)) : null; + msg = kill = natural ? String.format("%s starb", this.getColoredName(Color.LIGHT_GRAY)) : null; } else { CombatEntry strong = null; @@ -2366,16 +2366,16 @@ public abstract class EntityLiving extends Entity ItemStack fallItem = fallEnt instanceof EntityLiving ? ((EntityLiving)fallEnt).getHeldItem() : null; receiver = fallEnt.isPlayer() ? ((EntityNPC)fallEnt).connection : null; if(fallItem != null) { // && fallItem.hasDisplayName()) { - msg = String.format("%s wurde von %s mit %s zum Fallen verdammt", this.getColoredName(TextColor.CYAN), - fallEnt.getColoredName(TextColor.CYAN), fallItem.getColoredName(TextColor.CYAN)); - kill = String.format(TextColor.CYAN + "* %s mit %s zum Fallen verdammt", - this.getColoredName(TextColor.CYAN), fallItem.getColoredName(TextColor.CYAN)); + msg = String.format("%s wurde von %s mit %s zum Fallen verdammt", this.getColoredName(Color.CYAN), + fallEnt.getColoredName(Color.CYAN), fallItem.getColoredName(Color.CYAN)); + kill = String.format(Color.CYAN + "* %s mit %s zum Fallen verdammt", + this.getColoredName(Color.CYAN), fallItem.getColoredName(Color.CYAN)); } else { - msg = String.format("%s wurde von %s zum Fallen verdammt", this.getColoredName(TextColor.CYAN), - fallEnt.getColoredName(TextColor.CYAN)); - kill = String.format(TextColor.CYAN + "* %s zum Fallen verdammt", - this.getColoredName(TextColor.CYAN)); + msg = String.format("%s wurde von %s zum Fallen verdammt", this.getColoredName(Color.CYAN), + fallEnt.getColoredName(Color.CYAN)); + kill = String.format(Color.CYAN + "* %s zum Fallen verdammt", + this.getColoredName(Color.CYAN)); } } else if(lastEnt != null) { @@ -2383,24 +2383,24 @@ public abstract class EntityLiving extends Entity receiver = lastEnt.isPlayer() ? ((EntityNPC)lastEnt).connection : null; if(lastItem != null) { // && lastItem.hasDisplayName()) { msg = String.format("%s fiel zu tief und wurde von %s mit %s erledigt", - this.getColoredName(TextColor.BLUE), - lastEnt.getColoredName(TextColor.BLUE), lastItem.getColoredName(TextColor.BLUE)); - kill = String.format(TextColor.BLUE + "* %s mit %s erledigt", - this.getColoredName(TextColor.BLUE), lastItem.getColoredName(TextColor.BLUE)); + this.getColoredName(Color.BLUE), + lastEnt.getColoredName(Color.BLUE), lastItem.getColoredName(Color.BLUE)); + kill = String.format(Color.BLUE + "* %s mit %s erledigt", + this.getColoredName(Color.BLUE), lastItem.getColoredName(Color.BLUE)); } else { - msg = String.format("%s fiel zu tief und wurde von %s erledigt", this.getColoredName(TextColor.BLUE), - lastEnt.getColoredName(TextColor.BLUE)); - kill = String.format(TextColor.BLUE + "%s erledigt", this.getColoredName(TextColor.BLUE)); + msg = String.format("%s fiel zu tief und wurde von %s erledigt", this.getColoredName(Color.BLUE), + lastEnt.getColoredName(Color.BLUE)); + kill = String.format(Color.BLUE + "%s erledigt", this.getColoredName(Color.BLUE)); } } else { - msg = kill = natural ? String.format("%s wurde zum Fallen verdammt", this.getColoredName(TextColor.CYAN)) : null; + msg = kill = natural ? String.format("%s wurde zum Fallen verdammt", this.getColoredName(Color.CYAN)) : null; } } else { msg = kill = natural ? String.format("%s fiel " + (fall.blockType() == null ? "aus zu großer Höhe" : fall.blockType()), - this.getColoredName(TextColor.NEON)) : null; + this.getColoredName(Color.NEON)) : null; } } else { diff --git a/common/src/main/java/common/init/BlockRegistry.java b/common/src/main/java/common/init/BlockRegistry.java index c3252211..266486b0 100755 --- a/common/src/main/java/common/init/BlockRegistry.java +++ b/common/src/main/java/common/init/BlockRegistry.java @@ -134,7 +134,7 @@ import common.log.Log; import common.model.TextureAnimation; import common.properties.Property; import common.util.PortalType; -import common.util.TextColor; +import common.util.Color; import common.util.Util; import common.world.State; @@ -265,7 +265,7 @@ public abstract class BlockRegistry { .setDisplay("Obsidian").setMiningLevel(3)); register("clay", (new BlockClay()).setHardness(0.6F).setSound(SoundType.GRAVEL).setDisplay("Ton").setShovelHarvestable()); register("hardened_clay", (new BlockHardenedClay()).setHardness(1.25F).setResistance(7.0F).setSound(SoundType.STONE).setDisplay("Gebrannter Ton")); - for(TextColor color : TextColor.values()) { + for(Color color : Color.values()) { register(color.getName() + "_clay", (new BlockColoredClay(color)).setHardness(1.25F).setResistance(7.0F) .setSound(SoundType.STONE).setDisplay(color.getDisplay() + " gefärbter Ton")); } @@ -414,23 +414,23 @@ public abstract class BlockRegistry { .setSound(SoundType.STONE).setDisplay("Geladener Block").setTab(CheatTab.GEMS)); register("glass", (new BlockGlass()).setHardness(0.3F).setSound(SoundType.GLASS).setDisplay("Glas")); - for(TextColor color : TextColor.values()) { + for(Color color : Color.values()) { register(color.getName() + "_glass", (new BlockStainedGlass(color)).setHardness(0.3F).setSound(SoundType.GLASS).setDisplay(color.getDisplay() + " gefärbtes Glas")); } register("glass_pane", (new BlockPane(Material.TRANSLUCENT)).setHardness(0.3F).setSound(SoundType.GLASS).setDisplay("Glasscheibe")); - for(TextColor color : TextColor.values()) { + for(Color color : Color.values()) { register(color.getName() + "_glass_pane", (new BlockStainedGlassPane(color)).setHardness(0.3F).setSound(SoundType.GLASS).setDisplay(color.getDisplay() + " gefärbte Glasscheibe")); } - for(TextColor color : TextColor.values()) { + for(Color color : Color.values()) { register(color.getName() + "_wool", (new BlockWool(color)).setHardness(0.8F).setSound(SoundType.CLOTH).setDisplay(color.getSubject(-1) + " Wolle") .setShearsEfficiency(1)); } - for(TextColor color : TextColor.values()) { + for(Color color : Color.values()) { register(color.getName() + "_carpet", (new BlockCarpet(color)).setHardness(0.1F).setSound(SoundType.CLOTH).setDisplay(color.getSubject(1) + " Teppich").setOpacity(0)); } - for(TextColor color : BlockBed.COLORS) { + for(Color color : BlockBed.COLORS) { register(color.getName() + "_bed", (new BlockBed(color)).setSound(SoundType.WOOD).setHardness(0.2F).setDisplay(color.getSubject(0) + " Bett")); } diff --git a/common/src/main/java/common/init/CraftingRegistry.java b/common/src/main/java/common/init/CraftingRegistry.java index 641a5c45..3e1d6cbc 100755 --- a/common/src/main/java/common/init/CraftingRegistry.java +++ b/common/src/main/java/common/init/CraftingRegistry.java @@ -18,7 +18,7 @@ import common.inventory.InventoryCrafting; import common.item.Item; import common.item.ItemStack; import common.item.material.ItemDye; -import common.util.TextColor; +import common.util.Color; public abstract class CraftingRegistry { @@ -156,47 +156,51 @@ public abstract class CraftingRegistry add(new ItemStack(Items.blood_brick, 1), "NN", "NN", 'N', Items.bloodbrick); add(new ItemStack(Items.coarse_dirt, 4), "DG", "GD", 'D', Items.dirt, 'G', Items.gravel); - for (TextColor color : TextColor.values()) + for (Color color : Color.values()) { ItemDye dye = ItemDye.getByColor(color); - if(color != TextColor.WHITE) + if(color != Color.WHITE) addShapeless(new ItemStack(BlockWool.getByColor(color).getItem()), dye, Items.white_wool); add(new ItemStack(BlockColoredClay.getByColor(color).getItem(), 8), "###", "#X#", "###", '#', Items.hardened_clay, 'X', dye); add(new ItemStack(BlockStainedGlass.getByColor(color).getItem(), 8), "###", "#X#", "###", '#', Items.glass, 'X', dye); add(new ItemStack(BlockStainedGlassPane.getByColor(color).getItem(), 16), "###", "###", '#', BlockStainedGlass.getByColor(color).getItem()); } - addShapeless(new ItemStack(ItemDye.getByColor(TextColor.YELLOW)), Items.dandelion); - addShapeless(new ItemStack(ItemDye.getByColor(TextColor.RED)), Items.rose); - addShapeless(new ItemStack(ItemDye.getByColor(TextColor.RED)), Items.poppy); - addShapeless(new ItemStack(ItemDye.getByColor(TextColor.WHITE), 3), Items.bone); - addShapeless(new ItemStack(ItemDye.getByColor(TextColor.MAGENTA), 2), new ItemStack(ItemDye.getByColor(TextColor.RED)), new ItemStack(ItemDye.getByColor(TextColor.WHITE))); - addShapeless(new ItemStack(ItemDye.getByColor(TextColor.ORANGE), 2), new ItemStack(ItemDye.getByColor(TextColor.RED)), new ItemStack(ItemDye.getByColor(TextColor.YELLOW))); - addShapeless(new ItemStack(ItemDye.getByColor(TextColor.GREEN), 2), new ItemStack(ItemDye.getByColor(TextColor.DARK_GREEN)), new ItemStack(ItemDye.getByColor(TextColor.WHITE))); - addShapeless(new ItemStack(ItemDye.getByColor(TextColor.GRAY), 2), new ItemStack(ItemDye.getByColor(TextColor.BLACK)), new ItemStack(ItemDye.getByColor(TextColor.WHITE))); - addShapeless(new ItemStack(ItemDye.getByColor(TextColor.LIGHT_GRAY), 2), new ItemStack(ItemDye.getByColor(TextColor.GRAY)), new ItemStack(ItemDye.getByColor(TextColor.WHITE))); - addShapeless(new ItemStack(ItemDye.getByColor(TextColor.LIGHT_GRAY), 3), new ItemStack(ItemDye.getByColor(TextColor.BLACK)), new ItemStack(ItemDye.getByColor(TextColor.WHITE)), new ItemStack(ItemDye.getByColor(TextColor.WHITE))); - addShapeless(new ItemStack(ItemDye.getByColor(TextColor.LIGHT_BLUE), 2), new ItemStack(ItemDye.getByColor(TextColor.BLUE)), new ItemStack(ItemDye.getByColor(TextColor.WHITE))); - addShapeless(new ItemStack(ItemDye.getByColor(TextColor.CYAN), 2), new ItemStack(ItemDye.getByColor(TextColor.BLUE)), new ItemStack(ItemDye.getByColor(TextColor.DARK_GREEN))); - addShapeless(new ItemStack(ItemDye.getByColor(TextColor.VIOLET), 2), new ItemStack(ItemDye.getByColor(TextColor.BLUE)), new ItemStack(ItemDye.getByColor(TextColor.RED))); - addShapeless(new ItemStack(ItemDye.getByColor(TextColor.DARK_MAGENTA), 2), new ItemStack(ItemDye.getByColor(TextColor.VIOLET)), new ItemStack(ItemDye.getByColor(TextColor.MAGENTA))); - addShapeless(new ItemStack(ItemDye.getByColor(TextColor.DARK_MAGENTA), 3), new ItemStack(ItemDye.getByColor(TextColor.BLUE)), new ItemStack(ItemDye.getByColor(TextColor.RED)), new ItemStack(ItemDye.getByColor(TextColor.MAGENTA))); - addShapeless(new ItemStack(ItemDye.getByColor(TextColor.MAGENTA), 4), new ItemStack(ItemDye.getByColor(TextColor.BLUE)), new ItemStack(ItemDye.getByColor(TextColor.RED)), new ItemStack(ItemDye.getByColor(TextColor.RED)), new ItemStack(ItemDye.getByColor(TextColor.WHITE))); - addShapeless(new ItemStack(ItemDye.getByColor(TextColor.LIGHT_BLUE)), Items.blue_orchid); - addShapeless(new ItemStack(ItemDye.getByColor(TextColor.MAGENTA)), Items.allium); - addShapeless(new ItemStack(ItemDye.getByColor(TextColor.LIGHT_GRAY)), Items.houstonia); - addShapeless(new ItemStack(ItemDye.getByColor(TextColor.RED)), Items.red_tulip); - addShapeless(new ItemStack(ItemDye.getByColor(TextColor.ORANGE)), Items.orange_tulip); - addShapeless(new ItemStack(ItemDye.getByColor(TextColor.LIGHT_GRAY)), Items.white_tulip); - addShapeless(new ItemStack(ItemDye.getByColor(TextColor.MAGENTA)), Items.pink_tulip); - addShapeless(new ItemStack(ItemDye.getByColor(TextColor.LIGHT_GRAY)), Items.daisy); - addShapeless(new ItemStack(ItemDye.getByColor(TextColor.YELLOW), 2), Items.sunflower); - addShapeless(new ItemStack(ItemDye.getByColor(TextColor.MAGENTA), 2), Items.syringa); - addShapeless(new ItemStack(ItemDye.getByColor(TextColor.RED), 2), Items.rose_bush); - addShapeless(new ItemStack(ItemDye.getByColor(TextColor.MAGENTA), 2), Items.paeonia); - addShapeless(new ItemStack(ItemDye.getByColor(TextColor.DARK_GREEN)), Items.cactus); + addShapeless(new ItemStack(ItemDye.getByColor(Color.YELLOW)), Items.dandelion); + addShapeless(new ItemStack(ItemDye.getByColor(Color.RED)), Items.rose); + addShapeless(new ItemStack(ItemDye.getByColor(Color.RED)), Items.poppy); + addShapeless(new ItemStack(ItemDye.getByColor(Color.WHITE), 3), Items.bone); + addShapeless(new ItemStack(ItemDye.getByColor(Color.MAGENTA), 2), new ItemStack(ItemDye.getByColor(Color.RED)), new ItemStack(ItemDye.getByColor(Color.WHITE))); + addShapeless(new ItemStack(ItemDye.getByColor(Color.ORANGE), 2), new ItemStack(ItemDye.getByColor(Color.RED)), new ItemStack(ItemDye.getByColor(Color.YELLOW))); + addShapeless(new ItemStack(ItemDye.getByColor(Color.GREEN), 2), new ItemStack(ItemDye.getByColor(Color.DARK_GREEN)), new ItemStack(ItemDye.getByColor(Color.WHITE))); + addShapeless(new ItemStack(ItemDye.getByColor(Color.GRAY), 2), new ItemStack(ItemDye.getByColor(Color.BLACK)), new ItemStack(ItemDye.getByColor(Color.WHITE))); + addShapeless(new ItemStack(ItemDye.getByColor(Color.LIGHT_GRAY), 2), new ItemStack(ItemDye.getByColor(Color.GRAY)), new ItemStack(ItemDye.getByColor(Color.WHITE))); + addShapeless(new ItemStack(ItemDye.getByColor(Color.LIGHT_GRAY), 3), new ItemStack(ItemDye.getByColor(Color.BLACK)), new ItemStack(ItemDye.getByColor(Color.WHITE)), new ItemStack(ItemDye.getByColor(Color.WHITE))); + addShapeless(new ItemStack(ItemDye.getByColor(Color.LIGHT_BLUE), 2), new ItemStack(ItemDye.getByColor(Color.BLUE)), new ItemStack(ItemDye.getByColor(Color.WHITE))); + addShapeless(new ItemStack(ItemDye.getByColor(Color.CYAN), 2), new ItemStack(ItemDye.getByColor(Color.BLUE)), new ItemStack(ItemDye.getByColor(Color.DARK_GREEN))); + addShapeless(new ItemStack(ItemDye.getByColor(Color.VIOLET), 2), new ItemStack(ItemDye.getByColor(Color.BLUE)), new ItemStack(ItemDye.getByColor(Color.RED))); + addShapeless(new ItemStack(ItemDye.getByColor(Color.DARK_MAGENTA), 2), new ItemStack(ItemDye.getByColor(Color.VIOLET)), new ItemStack(ItemDye.getByColor(Color.MAGENTA))); + addShapeless(new ItemStack(ItemDye.getByColor(Color.DARK_MAGENTA), 3), new ItemStack(ItemDye.getByColor(Color.BLUE)), new ItemStack(ItemDye.getByColor(Color.RED)), new ItemStack(ItemDye.getByColor(Color.MAGENTA))); + addShapeless(new ItemStack(ItemDye.getByColor(Color.MAGENTA), 4), new ItemStack(ItemDye.getByColor(Color.BLUE)), new ItemStack(ItemDye.getByColor(Color.RED)), new ItemStack(ItemDye.getByColor(Color.RED)), new ItemStack(ItemDye.getByColor(Color.WHITE))); + addShapeless(new ItemStack(ItemDye.getByColor(Color.LIGHT_BLUE)), Items.blue_orchid); + addShapeless(new ItemStack(ItemDye.getByColor(Color.MAGENTA)), Items.allium); + addShapeless(new ItemStack(ItemDye.getByColor(Color.LIGHT_GRAY)), Items.houstonia); + addShapeless(new ItemStack(ItemDye.getByColor(Color.RED)), Items.red_tulip); + addShapeless(new ItemStack(ItemDye.getByColor(Color.ORANGE)), Items.orange_tulip); + addShapeless(new ItemStack(ItemDye.getByColor(Color.LIGHT_GRAY)), Items.white_tulip); + addShapeless(new ItemStack(ItemDye.getByColor(Color.MAGENTA)), Items.pink_tulip); + addShapeless(new ItemStack(ItemDye.getByColor(Color.LIGHT_GRAY)), Items.daisy); + addShapeless(new ItemStack(ItemDye.getByColor(Color.YELLOW), 2), Items.sunflower); + addShapeless(new ItemStack(ItemDye.getByColor(Color.MAGENTA), 2), Items.syringa); + addShapeless(new ItemStack(ItemDye.getByColor(Color.RED), 2), Items.rose_bush); + addShapeless(new ItemStack(ItemDye.getByColor(Color.MAGENTA), 2), Items.paeonia); + addShapeless(new ItemStack(ItemDye.getByColor(Color.DARK_GREEN)), Items.cactus); + addShapeless(new ItemStack(ItemDye.getByColor(Color.WHITE)), Items.grinded_bones); + addShapeless(new ItemStack(ItemDye.getByColor(Color.BROWN)), Items.cocoa_powder); + addShapeless(new ItemStack(ItemDye.getByColor(Color.BLACK)), Items.ink_sack); + addShapeless(new ItemStack(ItemDye.getByColor(Color.BLUE)), Items.lapis_lazuli); - for (TextColor color : TextColor.values()) + for (Color color : Color.values()) { add(new ItemStack(BlockCarpet.getByColor(color).getItem(), 3), "##", '#', BlockWool.getByColor(color).getItem()); } @@ -230,7 +234,7 @@ public abstract class CraftingRegistry add(new ItemStack(Items.wooden_button, 1), "#", '#', planks); add(new ItemStack(Items.wooden_pressure_plate, 1), "##", '#', planks); add(new ItemStack(Items.piston, 1), "TTT", "#X#", "#R#", '#', Items.cobblestone, 'X', Items.iron_ingot, 'R', Items.charged_powder, 'T', planks); - for(TextColor color : BlockBed.COLORS) { + for(Color color : BlockBed.COLORS) { add(new ItemStack(ItemRegistry.byName(color.getName() + "_bed"), 1), "###", "XXX", '#', BlockWool.getByColor(color).getItem(), 'X', planks); } } diff --git a/common/src/main/java/common/init/ItemRegistry.java b/common/src/main/java/common/init/ItemRegistry.java index 2232d4ef..6d56de3e 100755 --- a/common/src/main/java/common/init/ItemRegistry.java +++ b/common/src/main/java/common/init/ItemRegistry.java @@ -36,6 +36,7 @@ import common.item.material.ItemBottle; import common.item.material.ItemBucket; import common.item.material.ItemDye; import common.item.material.ItemEnchantedBook; +import common.item.material.ItemGrindedBones; import common.item.material.ItemHorseArmor; import common.item.material.ItemMetal; import common.item.material.ItemRecord; @@ -79,7 +80,7 @@ import common.item.weapon.ItemSword; import common.item.weapon.ItemTrident; import common.log.Log; import common.util.Pair; -import common.util.TextColor; +import common.util.Color; import common.util.Util; import common.world.Weather; @@ -204,7 +205,7 @@ public abstract class ItemRegistry { register("green_keycard", (new ItemKey()).setDisplay("Grüne Schlüsselkarte").setTab(CheatTab.TOOLS).setMaxAmount(StackSize.L)); register("blue_keycard", (new ItemKey()).setDisplay("Blaue Schlüsselkarte").setTab(CheatTab.TOOLS).setMaxAmount(StackSize.L)); register("black_keycard", (new ItemKey()).setDisplay("Schwarze Schlüsselkarte").setTab(CheatTab.TOOLS).setMaxAmount(StackSize.L)); - for(Pair sides : ItemDie.DIE_SIDES) { + for(Pair sides : ItemDie.DIE_SIDES) { register("die_" + sides.first(), (new ItemDie(sides.first(), sides.second())).setMaxAmount(StackSize.L)); } register("chick_magnet", (new ItemMagnet(true)).setDisplay("Kükenmagnet")); @@ -258,12 +259,8 @@ public abstract class ItemRegistry { register(type.getName(), (new ItemFishFood(false, type))); register("cooked_" + type.getName(), (new ItemFishFood(true, type))); } - Item lapis = null; - for(TextColor color : TextColor.values()) { - Item dye = new ItemDye(color); - if(color == TextColor.BLUE) - lapis = dye; - register(color.getDye(), dye); + for(Color color : Color.values()) { + register(color.getName() + "_dye", new ItemDye(color)); } register("bone", (new Item()).setDisplay("Knochen").setTab(CheatTab.MATERIALS).setMaxAmount(StackSize.L)); register("sugar", (new Item()).setDisplay("Zucker").setTab(CheatTab.MATERIALS).setMaxAmount(StackSize.XXL)); @@ -295,6 +292,11 @@ public abstract class ItemRegistry { register("fireball", (new ItemFireball()).setDisplay("Feuerkugel")); Item emerald = (new Item()).setDisplay("Smaragd").setTab(CheatTab.METALS); register("emerald", emerald); + register("cocoa_powder", new Item().setTab(CheatTab.MATERIALS).setDisplay("Gemahlene Kakaobohnen").setMaxAmount(StackSize.L)); + Item lapis = new Item().setTab(CheatTab.METALS).setDisplay("Lapislazuli").setMaxAmount(StackSize.L); + register("lapis_lazuli", lapis); + register("grinded_bones", new ItemGrindedBones().setTab(CheatTab.MATERIALS).setDisplay("Gemahlene Knochen").setMaxAmount(StackSize.L)); + register("ink_sack", new Item().setTab(CheatTab.MATERIALS).setDisplay("Tintenbeutel").setMaxAmount(StackSize.L)); register("carrot", new ItemSeedFood(3, Blocks.carrots, Blocks.farmland).setDisplay("Karotte").setMaxAmount(StackSize.L)); @@ -305,7 +307,7 @@ public abstract class ItemRegistry { register("melon_seed", new ItemSeeds(Blocks.melon_stem, Blocks.farmland).setDisplay("Melonenkerne").setMaxAmount(StackSize.XL)); register("whip", (new ItemWhip()).setDisplay("Peitsche")); - register("charge_crystal", (new Item()).setDisplay("Energiekristall").setTab(CheatTab.MISC).setColor(TextColor.DARK_MAGENTA).setGleaming()); + register("charge_crystal", (new Item()).setDisplay("Energiekristall").setTab(CheatTab.MISC).setColor(Color.DARK_MAGENTA).setGleaming()); for(Enchantment ench : Enchantment.values()) { register("enchanted_book_" + ench.getName(), (new ItemEnchantedBook(ench, 1)).setUnstackable().setDisplay("Verzaubertes Buch mit " + ench.getFormattedName(1)).setTab(CheatTab.ENCHANTMENTS)); int max = ench.getMaxLevel(); @@ -323,7 +325,7 @@ public abstract class ItemRegistry { register("lead", (new ItemLead()).setDisplay("Leine").setMaxAmount(StackSize.L)); register("name_tag", (new ItemNameTag()).setDisplay("Namensschild")); for(int z = 0; z < ItemDynamite.DYNAMITE.length; z++) { - register("dynamite" + (z == 0 ? "" : ("_" + z)), (new ItemDynamite(z)).setDisplay("Dynamit" + Util.getTierSuffix(z)).setColor(TextColor.RED)); + register("dynamite" + (z == 0 ? "" : ("_" + z)), (new ItemDynamite(z)).setDisplay("Dynamit" + Util.getTierSuffix(z)).setColor(Color.RED)); } register("chain", (new Item()).setDisplay("Kette").setTab(CheatTab.MATERIALS).setMagnetic()); Item chargedPowder = (new Item()).setDisplay("Geladener Staub").setTab(CheatTab.METALS).setMagnetic(); diff --git a/common/src/main/java/common/init/Items.java b/common/src/main/java/common/init/Items.java index b7851e8c..46cd269b 100755 --- a/common/src/main/java/common/init/Items.java +++ b/common/src/main/java/common/init/Items.java @@ -23,6 +23,7 @@ import common.item.material.ItemBottle; import common.item.material.ItemBucket; import common.item.material.ItemDye; import common.item.material.ItemEnchantedBook; +import common.item.material.ItemGrindedBones; import common.item.material.ItemHorseArmor; import common.item.material.ItemMetal; import common.item.material.ItemRecord; @@ -187,7 +188,6 @@ public abstract class Items { public static final ItemAmmo bolt = get("bolt"); public static final ItemBoltgun boltgun = get("boltgun"); public static final Item bone = get("bone"); - public static final ItemDye bonemeal = get("bonemeal"); public static final ItemBook book = get("book"); public static final Item bookshelf = get("bookshelf"); public static final ItemBow bow = get("bow"); @@ -266,7 +266,6 @@ public abstract class Items { public static final Item cobblestone_slab = get("cobblestone_slab"); public static final Item cobblestone_stairs = get("cobblestone_stairs"); public static final Item cobblestone_wall = get("cobblestone_wall"); - public static final ItemDye cocoa_powder = get("cocoa_powder"); public static final Item construction_table = get("construction_table"); public static final ItemFood cooked_beef = get("cooked_beef"); public static final ItemFood cooked_chicken = get("cooked_chicken"); @@ -406,7 +405,6 @@ public abstract class Items { public static final ItemBucket hydrogen_bucket = get("hydrogen_bucket"); public static final Item ice = get("ice"); public static final ItemScanner scanner = get("scanner"); - public static final ItemDye ink_sack = get("ink_sack"); public static final Item iodine_block = get("iodine_block"); public static final Item iodine_ore = get("iodine_ore"); public static final ItemMetal iodine_powder = get("iodine_powder"); @@ -442,7 +440,6 @@ public abstract class Items { public static final Item jungle_stairs = get("jungle_stairs"); public static final Item ladder = get("ladder"); public static final Item lapis_block = get("lapis_block"); - public static final ItemDye lapis_lazuli = get("lapis_lazuli"); public static final Item lapis_ore = get("lapis_ore"); public static final Item large_fern = get("large_fern"); public static final Item large_tallgrass = get("large_tallgrass"); @@ -1066,6 +1063,14 @@ public abstract class Items { public static final Item violet_glass = get("violet_glass"); public static final Item violet_glass_pane = get("violet_glass_pane"); public static final Item violet_wool = get("violet_wool"); + public static final ItemDye white_dye = get("white_dye"); + public static final ItemDye brown_dye = get("brown_dye"); + public static final ItemDye black_dye = get("black_dye"); + public static final ItemDye blue_dye = get("blue_dye"); + public static final ItemGrindedBones grinded_bones = get("grinded_bones"); + public static final Item cocoa_powder = get("cocoa_powder"); + public static final Item ink_sack = get("ink_sack"); + public static final Item lapis_lazuli = get("lapis_lazuli"); private static T get(String id) { T item = (T)ItemRegistry.byName(id); diff --git a/common/src/main/java/common/init/MetalType.java b/common/src/main/java/common/init/MetalType.java index 492de484..4b146a38 100755 --- a/common/src/main/java/common/init/MetalType.java +++ b/common/src/main/java/common/init/MetalType.java @@ -1,6 +1,6 @@ package common.init; -import common.util.TextColor; +import common.util.Color; public enum MetalType { IRON("iron", 26, "Fe", "Eisen", 0, new ToolMaterial(2, 8.0f, 0.0f, 250, 6.0F, 2, 14, true, 15, 9, 2, 6, 5, 2).setMagnetic()), @@ -87,15 +87,15 @@ public enum MetalType { } public String formatSymbol() { - return TextColor.YELLOW + "Element-Symbol: " + TextColor.ORANGE + this.order + " " + this.sign; + return Color.YELLOW + "Element-Symbol: " + Color.ORANGE + this.order + " " + this.sign; } public String formatRarity() { - return TextColor.DARK_MAGENTA + "Seltenheit: " + TextColor.NEON + "" + (this.rarity + 1); + return Color.DARK_MAGENTA + "Seltenheit: " + Color.NEON + "" + (this.rarity + 1); } public String formatRadioactivity() { - return TextColor.RED + "Radioaktivität: " + TextColor.GREEN + String.format("%.1f RN", this.radioactivity * 100.0f); + return Color.RED + "Radioaktivität: " + Color.GREEN + String.format("%.1f RN", this.radioactivity * 100.0f); } public boolean isMagnetic() { diff --git a/common/src/main/java/common/item/Item.java b/common/src/main/java/common/item/Item.java index a46e1087..07eb2873 100755 --- a/common/src/main/java/common/item/Item.java +++ b/common/src/main/java/common/item/Item.java @@ -20,7 +20,7 @@ import common.util.ExtMath; import common.util.Facing; import common.util.HitPosition; import common.util.Serverside; -import common.util.TextColor; +import common.util.Color; import common.util.Vec3; import common.world.AWorldServer; import common.world.World; @@ -33,7 +33,7 @@ public class Item { private Item containerItem; private String display; private CheatTab tab; - private TextColor color = null; + private Color color = null; private int defColor = 0xffffffff; private boolean magnetic = false; private boolean gleaming = false; @@ -88,7 +88,7 @@ public class Item { return this; } - public final Item setColor(TextColor color) { + public final Item setColor(Color color) { this.color = color; return this; } @@ -136,8 +136,8 @@ public class Item { return this.containerItem != null; } - public final TextColor getColor(ItemStack stack) { - return this.color != null ? this.color : (stack.isItemEnchanted() ? TextColor.NEON : TextColor.WHITE); + public final Color getColor(ItemStack stack) { + return this.color != null ? this.color : (stack.isItemEnchanted() ? Color.NEON : Color.WHITE); } public final CheatTab getTab() { diff --git a/common/src/main/java/common/item/ItemStack.java b/common/src/main/java/common/item/ItemStack.java index 1d7968b9..a3d38930 100755 --- a/common/src/main/java/common/item/ItemStack.java +++ b/common/src/main/java/common/item/ItemStack.java @@ -17,7 +17,7 @@ import common.init.ItemRegistry; import common.item.weapon.ItemBow; import common.rng.Random; import common.tags.TagObject; -import common.util.TextColor; +import common.util.Color; public final class ItemStack { public static final int MAX_SIZE = 67108864; @@ -232,15 +232,15 @@ public final class ItemStack { return this.getColor() + this.getDisplayName(); } - public String getColoredName(TextColor reset) { - return TextColor.DARK_GRAY + "[" + this.getColor() + this.getDisplayName() + TextColor.DARK_GRAY + "]" + reset; + public String getColoredName(Color reset) { + return Color.DARK_GRAY + "[" + this.getColor() + this.getDisplayName() + Color.DARK_GRAY + "]" + reset; } public boolean hasDisplayName() { return this.name != null; } - public TextColor getColor() { + public Color getColor() { return this.item.getColor(this); } diff --git a/common/src/main/java/common/item/consumable/ItemAppleGold.java b/common/src/main/java/common/item/consumable/ItemAppleGold.java index ee30c7b2..d5475052 100755 --- a/common/src/main/java/common/item/consumable/ItemAppleGold.java +++ b/common/src/main/java/common/item/consumable/ItemAppleGold.java @@ -4,7 +4,7 @@ import common.effect.Effect; import common.effect.StatusEffect; import common.entity.npc.EntityNPC; import common.item.ItemStack; -import common.util.TextColor; +import common.util.Color; import common.world.World; public class ItemAppleGold extends ItemFood @@ -15,7 +15,7 @@ public class ItemAppleGold extends ItemFood { super(amount, false); this.powered = powered; - this.setColor(powered ? TextColor.MAGENTA : TextColor.NEON); + this.setColor(powered ? Color.MAGENTA : Color.NEON); if(this.powered) this.setGleaming(); } diff --git a/common/src/main/java/common/item/consumable/ItemPotion.java b/common/src/main/java/common/item/consumable/ItemPotion.java index db135718..f39cf24f 100755 --- a/common/src/main/java/common/item/consumable/ItemPotion.java +++ b/common/src/main/java/common/item/consumable/ItemPotion.java @@ -22,7 +22,7 @@ import common.util.Clientside; import common.util.Facing; import common.util.Pair; import common.util.Serverside; -import common.util.TextColor; +import common.util.Color; import common.util.Vec3; import common.world.AWorldServer; import common.world.World; @@ -74,7 +74,7 @@ public class ItemPotion extends Item this.effect = effect; this.setMaxAmount(StackSize.XS); this.setTab(CheatTab.POTIONS); - this.setColor(TextColor.ORK); + this.setColor(Color.ORK); this.setDisplay(getDisplay(this)); if(this.effect != null) this.setGleaming(); @@ -212,18 +212,18 @@ public class ItemPotion extends Item if (potion.isBadEffect()) { - tooltip.add(TextColor.RED + s1); + tooltip.add(Color.RED + s1); } else { - tooltip.add(TextColor.LIGHT_GRAY + s1); + tooltip.add(Color.LIGHT_GRAY + s1); } String effectTip = this.effect.getPotion().getTooltip(this.effect.getAmplifier()); if(effectTip != null) tooltip.add(effectTip); } else if(this.type != null) { - tooltip.add(TextColor.LIGHT_GRAY + "Wirkungslos"); + tooltip.add(Color.LIGHT_GRAY + "Wirkungslos"); } } diff --git a/common/src/main/java/common/item/material/ItemDye.java b/common/src/main/java/common/item/material/ItemDye.java index a165f991..82891f4e 100755 --- a/common/src/main/java/common/item/material/ItemDye.java +++ b/common/src/main/java/common/item/material/ItemDye.java @@ -2,7 +2,6 @@ package common.item.material; import common.block.Block; import common.block.artificial.BlockBed; -import common.block.foliage.IGrowable; import common.entity.animal.EntitySheep; import common.entity.npc.EntityNPC; import common.entity.types.EntityLiving; @@ -12,43 +11,34 @@ import common.item.CheatTab; import common.item.Item; import common.item.ItemStack; import common.item.StackSize; -import common.tileentity.TileEntity; import common.util.BlockPos; -import common.util.Clientside; import common.util.Facing; -import common.util.ParticleType; -import common.util.Serverside; -import common.util.TextColor; -import common.util.Vec3; +import common.util.Color; import common.world.State; import common.world.World; -import common.world.AWorldServer; public class ItemDye extends Item { - private static final ItemDye[] DIES = new ItemDye[TextColor.values().length]; + private static final ItemDye[] DIES = new ItemDye[Color.values().length]; - private final TextColor color; + private final Color color; - public static ItemDye getByColor(TextColor color) { + public static ItemDye getByColor(Color color) { return DIES[color.ordinal()]; } - public ItemDye(TextColor color) + public ItemDye(Color color) { this.color = color; - this.setTab(color == TextColor.BLUE ? CheatTab.METALS : CheatTab.MATERIALS); - this.setDisplay(color.getDyeName()); + this.setTab(CheatTab.MATERIALS); + this.setDisplay(color.getSubject(1) + " Farbstoff"); this.setMaxAmount(StackSize.XXL); DIES[this.color.ordinal()] = this; } - public TextColor getColor() { + public Color getColor() { return this.color; } - /** - * Called when a Block is right-clicked with this Item - */ public boolean onItemUse(ItemStack stack, EntityNPC playerIn, World worldIn, BlockPos pos, Facing side, float hitX, float hitY, float hitZ) { if (!playerIn.canPlayerEdit(pos.offset(side), side, stack)) @@ -57,18 +47,6 @@ public class ItemDye extends Item { } else { - if (this.color == TextColor.WHITE) - { - if (applyBonemeal(stack, worldIn, pos)) - { - if (!worldIn.client) - { - worldIn.playEffect(2005, pos, 0); - } - - return true; - } - } State iblockstate = worldIn.getState(pos); if(iblockstate.getBlock() instanceof BlockBed) { Block bedBlock = BlockRegistry.byName(this.color.getName() + "_bed"); @@ -104,57 +82,6 @@ public class ItemDye extends Item { } } - public static boolean applyBonemeal(ItemStack stack, World worldIn, BlockPos target) - { - State iblockstate = worldIn.getState(target); - - if (iblockstate.getBlock() instanceof IGrowable) - { - IGrowable igrowable = (IGrowable)iblockstate.getBlock(); - - if (igrowable.canGrow(worldIn, target, iblockstate, worldIn.client)) - { - if (!worldIn.client) - { - if (igrowable.canUseBonemeal(worldIn, worldIn.rand, target, iblockstate)) - { - igrowable.grow((AWorldServer)worldIn, worldIn.rand, target, iblockstate); - } - - stack.decrSize(); - } - - return true; - } - } - - return false; - } - - @Clientside - public static void spawnBonemealParticles(World worldIn, BlockPos pos, int amount) - { - if (amount == 0) - { - amount = 15; - } - - Block block = worldIn.getState(pos).getBlock(); - - if (block != Blocks.air) - { - block.setBlockBounds(worldIn, pos); - - for (int i = 0; i < amount; ++i) - { - worldIn.clientParticle(ParticleType.GROW, (double)((float)pos.getX() + worldIn.rand.floatv()), (double)pos.getY() + (double)worldIn.rand.floatv() * block.getBlockBoundsMaxY(), (double)((float)pos.getZ() + worldIn.rand.floatv())); - } - } - } - - /** - * Returns true if the item can be used on the given entity, e.g. shears on sheep. - */ public boolean itemInteractionForEntity(ItemStack stack, EntityNPC playerIn, EntityLiving target) { if (target instanceof EntitySheep) @@ -174,31 +101,4 @@ public class ItemDye extends Item { return false; } } - - @Serverside - public ItemStack dispenseStack(AWorldServer world, TileEntity source, Vec3 position, BlockPos blockpos, Facing facing, ItemStack stack) { - if(this.color != TextColor.WHITE) - return super.dispenseStack(world, source, position, blockpos, facing, stack); - BlockPos pos = blockpos = blockpos.offset(facing); - - if (applyBonemeal(stack, world, pos)) - { - if (!world.client) - { - world.playEffect(2005, pos, 0); - } - world.playEffect(1000, blockpos, 0); - } - else - { - world.playEffect(1001, blockpos, 0); - } - - return stack; - } - - @Serverside - public int getDispenseSoundId() { - return this.color == TextColor.WHITE ? 0 : super.getDispenseSoundId(); - } } diff --git a/common/src/main/java/common/item/material/ItemEnchantedBook.java b/common/src/main/java/common/item/material/ItemEnchantedBook.java index bdd7d85d..20549629 100755 --- a/common/src/main/java/common/item/material/ItemEnchantedBook.java +++ b/common/src/main/java/common/item/material/ItemEnchantedBook.java @@ -14,7 +14,7 @@ import common.item.ItemStack; import common.item.RngLoot; import common.rng.Random; import common.util.Clientside; -import common.util.TextColor; +import common.util.Color; public class ItemEnchantedBook extends Item { @@ -25,7 +25,7 @@ public class ItemEnchantedBook extends Item private final int level; public ItemEnchantedBook(Enchantment enchantment, int level) { - this.setColor(TextColor.YELLOW); + this.setColor(Color.YELLOW); this.setGleaming(); this.enchantment = enchantment; this.level = level; diff --git a/common/src/main/java/common/item/material/ItemGrindedBones.java b/common/src/main/java/common/item/material/ItemGrindedBones.java new file mode 100644 index 00000000..e96d2be2 --- /dev/null +++ b/common/src/main/java/common/item/material/ItemGrindedBones.java @@ -0,0 +1,115 @@ +package common.item.material; + +import common.block.Block; +import common.block.foliage.IGrowable; +import common.entity.npc.EntityNPC; +import common.init.Blocks; +import common.item.Item; +import common.item.ItemStack; +import common.tileentity.TileEntity; +import common.util.BlockPos; +import common.util.Clientside; +import common.util.Facing; +import common.util.ParticleType; +import common.util.Serverside; +import common.util.Vec3; +import common.world.State; +import common.world.World; +import common.world.AWorldServer; + +public class ItemGrindedBones extends Item { + public boolean onItemUse(ItemStack stack, EntityNPC playerIn, World worldIn, BlockPos pos, Facing side, float hitX, float hitY, float hitZ) + { + if (!playerIn.canPlayerEdit(pos.offset(side), side, stack)) + { + return false; + } + else + { + if (applyBonemeal(stack, worldIn, pos)) + { + if (!worldIn.client) + { + worldIn.playEffect(2005, pos, 0); + } + + return true; + } + + return false; + } + } + + public static boolean applyBonemeal(ItemStack stack, World worldIn, BlockPos target) + { + State iblockstate = worldIn.getState(target); + + if (iblockstate.getBlock() instanceof IGrowable) + { + IGrowable igrowable = (IGrowable)iblockstate.getBlock(); + + if (igrowable.canGrow(worldIn, target, iblockstate, worldIn.client)) + { + if (!worldIn.client) + { + if (igrowable.canUseBonemeal(worldIn, worldIn.rand, target, iblockstate)) + { + igrowable.grow((AWorldServer)worldIn, worldIn.rand, target, iblockstate); + } + + stack.decrSize(); + } + + return true; + } + } + + return false; + } + + @Clientside + public static void spawnParticles(World worldIn, BlockPos pos, int amount) + { + if (amount == 0) + { + amount = 15; + } + + Block block = worldIn.getState(pos).getBlock(); + + if (block != Blocks.air) + { + block.setBlockBounds(worldIn, pos); + + for (int i = 0; i < amount; ++i) + { + worldIn.clientParticle(ParticleType.GROW, (double)((float)pos.getX() + worldIn.rand.floatv()), (double)pos.getY() + (double)worldIn.rand.floatv() * block.getBlockBoundsMaxY(), (double)((float)pos.getZ() + worldIn.rand.floatv())); + } + } + } + + @Serverside + public ItemStack dispenseStack(AWorldServer world, TileEntity source, Vec3 position, BlockPos blockpos, Facing facing, ItemStack stack) { + BlockPos pos = blockpos = blockpos.offset(facing); + + if (applyBonemeal(stack, world, pos)) + { + if (!world.client) + { + world.playEffect(2005, pos, 0); + } + world.playEffect(1000, blockpos, 0); + } + else + { + world.playEffect(1001, blockpos, 0); + } + + return stack; + } + + @Serverside + public int getDispenseSoundId() { + return 0; + } +} diff --git a/common/src/main/java/common/item/material/ItemMetal.java b/common/src/main/java/common/item/material/ItemMetal.java index fb101420..8000aa8c 100755 --- a/common/src/main/java/common/item/material/ItemMetal.java +++ b/common/src/main/java/common/item/material/ItemMetal.java @@ -9,7 +9,7 @@ import common.init.MetalType; import common.item.Item; import common.item.ItemStack; import common.util.Clientside; -import common.util.TextColor; +import common.util.Color; public class ItemMetal extends Item { private final MetalType metal; @@ -17,7 +17,7 @@ public class ItemMetal extends Item { public ItemMetal(MetalType metal) { this.metal = metal; if(this.metal.radioactivity > 0.0f) - this.setColor(TextColor.GREEN); + this.setColor(Color.GREEN); if(this.metal.isMagnetic()) this.setMagnetic(); } diff --git a/common/src/main/java/common/item/projectile/ItemChargedOrb.java b/common/src/main/java/common/item/projectile/ItemChargedOrb.java index 3651d683..38705053 100755 --- a/common/src/main/java/common/item/projectile/ItemChargedOrb.java +++ b/common/src/main/java/common/item/projectile/ItemChargedOrb.java @@ -12,7 +12,7 @@ import common.item.ItemStack; import common.util.BlockPos; import common.util.Facing; import common.util.ParticleType; -import common.util.TextColor; +import common.util.Color; import common.world.State; import common.world.World; @@ -22,7 +22,7 @@ public class ItemChargedOrb extends Item { this.setTab(CheatTab.MAGIC); this.setMaxDamage(16); - this.setColor(TextColor.DARK_MAGENTA); + this.setColor(Color.DARK_MAGENTA); this.setFragile(); } diff --git a/common/src/main/java/common/item/projectile/ItemDie.java b/common/src/main/java/common/item/projectile/ItemDie.java index 76690dda..73118aff 100755 --- a/common/src/main/java/common/item/projectile/ItemDie.java +++ b/common/src/main/java/common/item/projectile/ItemDie.java @@ -19,25 +19,25 @@ import common.util.Clientside; import common.util.Facing; import common.util.Pair; import common.util.Serverside; -import common.util.TextColor; +import common.util.Color; import common.util.Vec3; import common.world.AWorldServer; import common.world.World; public class ItemDie extends Item { - public static final Pair[] DIE_SIDES = new Pair[] { - new Pair(4, TextColor.DARK_GREEN), - new Pair(6, TextColor.NEON), - new Pair(8, TextColor.DARK_MAGENTA), - new Pair(10, TextColor.MAGENTA), - new Pair(12, TextColor.DARK_RED), - new Pair(20, TextColor.ORANGE) + public static final Pair[] DIE_SIDES = new Pair[] { + new Pair(4, Color.DARK_GREEN), + new Pair(6, Color.NEON), + new Pair(8, Color.DARK_MAGENTA), + new Pair(10, Color.MAGENTA), + new Pair(12, Color.DARK_RED), + new Pair(20, Color.ORANGE) }; public static final Map DICE = Maps.newTreeMap(); private final int sides; - private final TextColor color; + private final Color color; public static final ItemDie getBySides(int sides) { ItemDie die = DICE.get(sides); @@ -48,7 +48,7 @@ public class ItemDie extends Item return DICE.values(); } - public ItemDie(int sides, TextColor color) + public ItemDie(int sides, Color color) { this.sides = sides; this.color = color; @@ -61,7 +61,7 @@ public class ItemDie extends Item return this.sides; } - public TextColor getDieColor() { + public Color getDieColor() { return this.color; } diff --git a/common/src/main/java/common/item/spawner/ItemCharTemplate.java b/common/src/main/java/common/item/spawner/ItemCharTemplate.java index 568997b0..78635b61 100755 --- a/common/src/main/java/common/item/spawner/ItemCharTemplate.java +++ b/common/src/main/java/common/item/spawner/ItemCharTemplate.java @@ -23,7 +23,7 @@ import common.util.ExtMath; import common.util.Facing; import common.util.HitPosition; import common.util.Serverside; -import common.util.TextColor; +import common.util.Color; import common.world.State; import common.world.World; @@ -67,7 +67,7 @@ public class ItemCharTemplate extends Item @Clientside public void addInformation(ItemStack stack, EntityNPC player, List tooltip) { Dimension dim = this.spawned.species.origin == null ? null : DimensionRegistry.getDimension(this.spawned.species.origin); - tooltip.add(TextColor.ORANGE + "Herkunft: " + (dim == null ? "???" : dim.getDisplay())); + tooltip.add(Color.ORANGE + "Herkunft: " + (dim == null ? "???" : dim.getDisplay())); } public boolean onItemUse(ItemStack stack, EntityNPC playerIn, World worldIn, BlockPos pos, Facing side, float hitX, float hitY, float hitZ) diff --git a/common/src/main/java/common/item/spawner/ItemMobTemplate.java b/common/src/main/java/common/item/spawner/ItemMobTemplate.java index 1aab7381..810b5f13 100755 --- a/common/src/main/java/common/item/spawner/ItemMobTemplate.java +++ b/common/src/main/java/common/item/spawner/ItemMobTemplate.java @@ -21,7 +21,7 @@ import common.util.ExtMath; import common.util.Facing; import common.util.HitPosition; import common.util.Serverside; -import common.util.TextColor; +import common.util.Color; import common.world.State; import common.world.World; @@ -59,7 +59,7 @@ public class ItemMobTemplate extends Item EntityInfo egg = EntityRegistry.DNA.get(this.entityId); if(egg != null) { Dimension dim = egg.origin() == null ? null : DimensionRegistry.getDimension(egg.origin()); - tooltip.add(TextColor.ORANGE + "Herkunft: " + (dim == null ? "???" : dim.getDisplay())); + tooltip.add(Color.ORANGE + "Herkunft: " + (dim == null ? "???" : dim.getDisplay())); } } diff --git a/common/src/main/java/common/item/tool/ItemScanner.java b/common/src/main/java/common/item/tool/ItemScanner.java index 2e32a9d7..6cd24b16 100755 --- a/common/src/main/java/common/item/tool/ItemScanner.java +++ b/common/src/main/java/common/item/tool/ItemScanner.java @@ -4,19 +4,19 @@ import common.entity.npc.EntityNPC; import common.item.ItemStack; import common.item.WieldType; import common.util.BlockPos; -import common.util.TextColor; +import common.util.Color; import common.util.Vec3; import common.world.AWorldServer; public class ItemScanner extends ItemWand { public ItemScanner() { - this.setColor(TextColor.BLUE); + this.setColor(Color.BLUE); } public void onUse(ItemStack stack, EntityNPC player, AWorldServer world, Vec3 vec) { BlockPos pos = new BlockPos(vec); - player.connection.addHotbar(TextColor.NEON + "* Position in %s: %.1f %.1f %.1f, %.1f K, %.1f °C, G: %.1f °C, %.1f %%", world.dimension.getDisplay(), + player.connection.addHotbar(Color.NEON + "* Position in %s: %.1f %.1f %.1f, %.1f K, %.1f °C, G: %.1f °C, %.1f %%", world.dimension.getDisplay(), vec.xCoord, vec.yCoord, vec.zCoord, world.getTemperatureK(pos), world.getTemperatureC(pos), world.getGenTemperature(pos.getX(), pos.getZ()), world.getGenHumidity(pos.getX(), pos.getZ())); } diff --git a/common/src/main/java/common/item/tool/ItemSpaceNavigator.java b/common/src/main/java/common/item/tool/ItemSpaceNavigator.java index 0d338fbc..0b543626 100755 --- a/common/src/main/java/common/item/tool/ItemSpaceNavigator.java +++ b/common/src/main/java/common/item/tool/ItemSpaceNavigator.java @@ -7,7 +7,7 @@ import common.item.Item; import common.item.ItemStack; import common.util.BlockPos; import common.util.Clientside; -import common.util.TextColor; +import common.util.Color; public class ItemSpaceNavigator extends Item { @Clientside @@ -15,7 +15,7 @@ public class ItemSpaceNavigator extends Item { public ItemSpaceNavigator() { this.setUnstackable(); - this.setColor(TextColor.DARK_GREEN); + this.setColor(Color.DARK_GREEN); this.setMagnetic(); } @@ -30,20 +30,20 @@ public class ItemSpaceNavigator extends Item { @Clientside public String getHotbarText(EntityNPC player, ItemStack stack) { BlockPos pos = player.getPosition(); - return TextColor.ORANGE + this.localTime + " / " + - String.format("%s bei %d, %d, %d", player.worldObj.dimension.getDisplay() + TextColor.ORANGE, + return Color.ORANGE + this.localTime + " / " + + String.format("%s bei %d, %d, %d", player.worldObj.dimension.getDisplay() + Color.ORANGE, pos.getX(), pos.getY(), pos.getZ()); } @Clientside public void addInformation(ItemStack stack, EntityNPC player, List tooltip) { - tooltip.add(TextColor.ORANGE + this.localTime); + tooltip.add(Color.ORANGE + this.localTime); String[] dims = player.worldObj.dimension.getBaseNames(); for(int z = dims.length - 1; z >= 0; z--) { - tooltip.add(TextColor.ORANGE + dims[z]); + tooltip.add(Color.ORANGE + dims[z]); } BlockPos pos = player.getPosition(); - tooltip.add(TextColor.ORANGE + String.format("%s bei %d, %d, %d", player.worldObj.dimension.getDisplay() - + TextColor.ORANGE, pos.getX(), pos.getY(), pos.getZ())); + tooltip.add(Color.ORANGE + String.format("%s bei %d, %d, %d", player.worldObj.dimension.getDisplay() + + Color.ORANGE, pos.getX(), pos.getY(), pos.getZ())); } } diff --git a/common/src/main/java/common/item/tool/ItemWand.java b/common/src/main/java/common/item/tool/ItemWand.java index 31b8250e..e5876e3f 100755 --- a/common/src/main/java/common/item/tool/ItemWand.java +++ b/common/src/main/java/common/item/tool/ItemWand.java @@ -12,7 +12,7 @@ import common.util.BlockPos; import common.util.Clientside; import common.util.ExtMath; import common.util.Facing; -import common.util.TextColor; +import common.util.Color; import common.util.Vec3; import common.world.World; import common.world.AWorldServer; @@ -43,7 +43,7 @@ public abstract class ItemWand extends Item { @Clientside public void addInformation(ItemStack stack, EntityNPC playerIn, List tooltip) { - tooltip.add(TextColor.DARK_GREEN + "Reichweite: " + TextColor.GREEN + this.getRange(stack, playerIn) + " Blöcke"); + tooltip.add(Color.DARK_GREEN + "Reichweite: " + Color.GREEN + this.getRange(stack, playerIn) + " Blöcke"); } public abstract int getRange(ItemStack stack, EntityNPC player); diff --git a/common/src/main/java/common/item/tool/ItemWeatherToken.java b/common/src/main/java/common/item/tool/ItemWeatherToken.java index 21538f56..e816c648 100755 --- a/common/src/main/java/common/item/tool/ItemWeatherToken.java +++ b/common/src/main/java/common/item/tool/ItemWeatherToken.java @@ -4,7 +4,7 @@ import common.entity.npc.EntityNPC; import common.init.SoundEvent; import common.item.Item; import common.item.ItemStack; -import common.util.TextColor; +import common.util.Color; import common.world.Weather; import common.world.World; import common.world.AWorldServer; @@ -15,7 +15,7 @@ public class ItemWeatherToken extends Item { public ItemWeatherToken(Weather weather) { this.weather = weather; this.setUnstackable(); - this.setColor(TextColor.VIOLET); + this.setColor(Color.VIOLET); this.setDisplay("Wetterkristall (" + this.weather.getDisplay() + ")"); this.setMagnetic(); } diff --git a/common/src/main/java/common/item/weapon/ItemBanHammer.java b/common/src/main/java/common/item/weapon/ItemBanHammer.java index e61983e8..9d73c692 100755 --- a/common/src/main/java/common/item/weapon/ItemBanHammer.java +++ b/common/src/main/java/common/item/weapon/ItemBanHammer.java @@ -9,13 +9,13 @@ import common.item.CheatTab; import common.item.ItemStack; import common.item.tool.ItemWand; import common.util.BoundingBox; -import common.util.TextColor; +import common.util.Color; import common.util.Vec3; import common.world.AWorldServer; public class ItemBanHammer extends ItemWand { public ItemBanHammer() { - this.setColor(TextColor.DARK_RED); + this.setColor(Color.DARK_RED); this.setTab(CheatTab.WEAPONS); this.setMagnetic(); } diff --git a/common/src/main/java/common/item/weapon/ItemExterminator.java b/common/src/main/java/common/item/weapon/ItemExterminator.java index 98abcdb4..28ff033b 100755 --- a/common/src/main/java/common/item/weapon/ItemExterminator.java +++ b/common/src/main/java/common/item/weapon/ItemExterminator.java @@ -6,14 +6,14 @@ import common.init.SoundEvent; import common.item.CheatTab; import common.item.Item; import common.item.ItemStack; -import common.util.TextColor; +import common.util.Color; import common.world.World; import common.world.AWorldServer; public class ItemExterminator extends Item { public ItemExterminator() { this.setUnstackable(); - this.setColor(TextColor.DARK_RED); + this.setColor(Color.DARK_RED); this.setTab(CheatTab.WEAPONS); this.setMagnetic(); } @@ -22,11 +22,11 @@ public class ItemExterminator extends Item { if(!world.client && player.connection.isAdmin()) { world.playSoundAtEntity(player, SoundEvent.CLICK, 1.0F); if(world.dimension == Space.INSTANCE) - player.connection.addHotbar(TextColor.RED + "Der Weltraum kann nicht zerstört werden (lol)"); + player.connection.addHotbar(Color.RED + "Der Weltraum kann nicht zerstört werden (lol)"); else if(!((AWorldServer)world).exterminate()) - player.connection.addHotbar(TextColor.YELLOW + "Die Welt %s ist bereits zerstört", world.dimension.getDisplay()); + player.connection.addHotbar(Color.YELLOW + "Die Welt %s ist bereits zerstört", world.dimension.getDisplay()); else - player.connection.addHotbar(TextColor.CRIMSON + "Die Welt %s wurde vernichtet >:)-", world.dimension.getDisplay()); + player.connection.addHotbar(Color.CRIMSON + "Die Welt %s wurde vernichtet >:)-", world.dimension.getDisplay()); // if (!playerIn.capabilities.isCreativeMode) // { diff --git a/common/src/main/java/common/item/weapon/ItemTrident.java b/common/src/main/java/common/item/weapon/ItemTrident.java index d7a5bbf2..89efff59 100755 --- a/common/src/main/java/common/item/weapon/ItemTrident.java +++ b/common/src/main/java/common/item/weapon/ItemTrident.java @@ -4,13 +4,13 @@ import common.entity.npc.EntityNPC; import common.item.CheatTab; import common.item.ItemStack; import common.item.tool.ItemWand; -import common.util.TextColor; +import common.util.Color; import common.util.Vec3; import common.world.AWorldServer; public class ItemTrident extends ItemWand { public ItemTrident() { - this.setColor(TextColor.NEON); + this.setColor(Color.NEON); this.setTab(CheatTab.WEAPONS); this.setMagnetic(); } diff --git a/common/src/main/java/common/log/Log.java b/common/src/main/java/common/log/Log.java index 752bb4eb..2c18704e 100644 --- a/common/src/main/java/common/log/Log.java +++ b/common/src/main/java/common/log/Log.java @@ -6,7 +6,7 @@ import java.util.List; import common.collect.Lists; import common.network.IThreadListener; -import common.util.TextColor; +import common.util.Color; import common.util.Util; public enum Log { @@ -68,7 +68,7 @@ public enum Log { if(((c >= CHR_COLORS1) && (c <= CHR_COLORE1)) || ((c >= CHR_COLORS2) && (c <= CHR_COLORE2))) { if(pos - last != 0) System.err.print(str.substring(last, pos)); - color = TextColor.getColor(c); // (c >= CHR_COLORS2) && (c <= CHR_COLORE2) ? aux_colors[c - CHR_COLORS2] : text_colors[c - CHR_COLORS1]; + color = Color.getColor(c); // (c >= CHR_COLORS2) && (c <= CHR_COLORE2) ? aux_colors[c - CHR_COLORS2] : text_colors[c - CHR_COLORS1]; if(colors) System.err.printf("\u001b[38;2;%d;%d;%dm", (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff); last = ++pos; @@ -143,8 +143,8 @@ public enum Log { public void log(LogLevel level, String msg) { if(level.ordinal() > Log.level.ordinal()) return; - String prefix = String.format(TextColor.DARK_GRAY + "[" + TextColor.GREEN + "%s" + TextColor.DARK_GRAY + "][" + TextColor.LIGHT_GRAY + "%s" + TextColor.DARK_GRAY + "|" + TextColor.LIGHT_GRAY + "%s" + - TextColor.DARK_GRAY + "][%s%s" + TextColor.DARK_GRAY + "] ", + String prefix = String.format(Color.DARK_GRAY + "[" + Color.GREEN + "%s" + Color.DARK_GRAY + "][" + Color.LIGHT_GRAY + "%s" + Color.DARK_GRAY + "|" + Color.LIGHT_GRAY + "%s" + + Color.DARK_GRAY + "][%s%s" + Color.DARK_GRAY + "] ", str_time(Util.rtime()), this.prefix, Thread.currentThread().getName(), level.color, level.log); String[] lines = msg.split("\n"); if(/* Game.getGame() == null || */ Log.sync.isMainThread()) { diff --git a/common/src/main/java/common/log/LogLevel.java b/common/src/main/java/common/log/LogLevel.java index 3eb3e203..9a259df2 100644 --- a/common/src/main/java/common/log/LogLevel.java +++ b/common/src/main/java/common/log/LogLevel.java @@ -3,22 +3,22 @@ package common.log; import common.util.Displayable; import common.util.ExtMath; import common.util.Identifyable; -import common.util.TextColor; +import common.util.Color; public enum LogLevel implements Displayable, Identifyable { - SILENT("silent", "Nichts", "UNK?", TextColor.BLACK), - USER("user", "Benutzer", "USER", TextColor.WHITE), - ERROR("error", "Fehler", "ERR!", TextColor.RED), - WARN("warn", "Warnung", "WARN", TextColor.YELLOW), - INFO("info", "Info", "INFO", TextColor.BLUE), - PERF("perf", "Leistung", "PERF", TextColor.CYAN), - DEBUG("debug", "*Debug*", "DBG#", TextColor.MAGENTA), - TRACE("trace", "*Trace*", "TRC#", TextColor.VIOLET); + SILENT("silent", "Nichts", "UNK?", Color.BLACK), + USER("user", "Benutzer", "USER", Color.WHITE), + ERROR("error", "Fehler", "ERR!", Color.RED), + WARN("warn", "Warnung", "WARN", Color.YELLOW), + INFO("info", "Info", "INFO", Color.BLUE), + PERF("perf", "Leistung", "PERF", Color.CYAN), + DEBUG("debug", "*Debug*", "DBG#", Color.MAGENTA), + TRACE("trace", "*Trace*", "TRC#", Color.VIOLET); public final String id; public final String name; public final String log; - public final TextColor color; + public final Color color; public static LogLevel parse(String str) { for(LogLevel level : values()) { @@ -33,7 +33,7 @@ public enum LogLevel implements Displayable, Identifyable { } } - private LogLevel(String id, String name, String log, TextColor color) { + private LogLevel(String id, String name, String log, Color color) { this.id = id; this.name = name; this.log = log; diff --git a/common/src/main/java/common/tileentity/Device.java b/common/src/main/java/common/tileentity/Device.java index 4eeeb21d..800a9720 100755 --- a/common/src/main/java/common/tileentity/Device.java +++ b/common/src/main/java/common/tileentity/Device.java @@ -11,20 +11,20 @@ import common.rng.Random; import common.tags.TagObject; import java.util.List; import common.util.ExtMath; -import common.util.TextColor; +import common.util.Color; public abstract class Device extends TileEntity implements IInventory, ITickable { public static enum Status { - OFF(TextColor.DARK_GRAY, "Inaktiv"), - COOLING(TextColor.YELLOW, "Abkühlen ..."), - RUNNING(TextColor.GREEN, "Aktiv"), - OVERHEAT(TextColor.RED, "Überhitzt!"), - BROKEN(TextColor.BLACK, "Defekt!"); + OFF(Color.DARK_GRAY, "Inaktiv"), + COOLING(Color.YELLOW, "Abkühlen ..."), + RUNNING(Color.GREEN, "Aktiv"), + OVERHEAT(Color.RED, "Überhitzt!"), + BROKEN(Color.BLACK, "Defekt!"); - public final TextColor color; + public final Color color; public final String name; - private Status(TextColor color, String name) { + private Status(Color color, String name) { this.color = color; this.name = name; } diff --git a/common/src/main/java/common/util/TextColor.java b/common/src/main/java/common/util/Color.java similarity index 81% rename from common/src/main/java/common/util/TextColor.java rename to common/src/main/java/common/util/Color.java index 7717218a..61e6ac98 100755 --- a/common/src/main/java/common/util/TextColor.java +++ b/common/src/main/java/common/util/Color.java @@ -5,13 +5,13 @@ import java.util.regex.Pattern; import common.collect.Maps; -public enum TextColor implements Identifyable, Displayable { +public enum Color implements Identifyable, Displayable { CRIMSON(0x02, 0x601010, "crimson", 'C', "Blutrot", "Blutrotes", "Blutroter", "Blutrote"), DARK_RED(0x03, 0x7f0000, "dark_red", 'r', "Dunkelrot", "Dunkelrotes", "Dunkelroter", "Dunkelrote"), RED(0x04, 0xcf0000, "red", 'R', "Rot", "Rotes", "Roter", "Rote"), DARK_BROWN(0x05, 0x56250b, "dark_brown", 'w', "Dunkelbraun", "Dunkelbraunes", "Dunkelbrauner", "Dunkelbraune"), ORANGE(0x06, 0xff7000, "orange", 'o', "Orange", "Oranges", "Oranger", "Orange"), - BROWN(0x07, 0x8c5606, "brown", 'W', "Braun", "Braunes", "Brauner", "Braune", "cocoa_powder", "Gemahlene Kakaobohnen"), + BROWN(0x07, 0x8c5606, "brown", 'W', "Braun", "Braunes", "Brauner", "Braune"), LIGHT_BROWN(0x08, 0x9c7636, "light_brown", 'l', "Hellbraun", "Hellbraunes", "Hellbrauner", "Hellbraune"), BEIGE(0x09, 0xcfcfaf, "beige", 'L', "Beige", "Beiges", "Beiger", "Beige"), YELLOW(0x0b, 0xbfbf00, "yellow", 'y', "Gelb", "Gelbes", "Gelber", "Gelbe"), @@ -23,22 +23,22 @@ public enum TextColor implements Identifyable, Displayable { CYAN(0x12, 0x00bfbf, "cyan", 'c', "Türkis", "Türkises", "Türkiser", "Türkise"), NEON(0x13, 0x80c0f0, "neon", 'n', "Neongrün", "Neongrünes", "Neongrüner", "Neongrüne"), MIDNIGHT(0x14, 0x000080, "midnight", 'm', "Mitternachtsblau", "Mitternachtsblaues", "Mitternachtsblauer", "Mitternachtsblaue"), - BLUE(0x15, 0x0000cf, "blue", 'b', "Blau", "Blaues", "Blauer", "Blaue", "lapis_lazuli", "Lapislazuli"), + BLUE(0x15, 0x0000cf, "blue", 'b', "Blau", "Blaues", "Blauer", "Blaue"), LIGHT_BLUE(0x16, 0x5f5fff, "light_blue", 'B', "Hellblau", "Hellblaues", "Hellblauer", "Hellblaue"), VIOLET(0x17, 0x6000ff, "violet", 'V', "Violett", "Violettes", "Violetter", "Violette"), DARK_VIOLET(0x18, 0x5400be, "dark_violet", 'v', "Dunkelviolett", "Dunkelviolettes", "Dunkelvioletter", "Dunkelviolette"), DARK_MAGENTA(0x19, 0x6f006f, "dark_magenta", 'm', "Dunkelmagenta", "Dunkelmagenta", "Dunkelmagenta", "Dunkelmagenta"), MAGENTA(0x1a, 0xbf00bf, "magenta", 'M', "Magenta", "Magenta", "Magenta", "Magenta"), - WHITE(0x1b, 0xffffff, "white", '4', "Weiß", "Weißes", "Weißer", "Weiße", "bonemeal", "Knochenmehl"), + WHITE(0x1b, 0xffffff, "white", '4', "Weiß", "Weißes", "Weißer", "Weiße"), LIGHT_GRAY(0x1c, 0xc0c0c0, "light_gray", '3', "Hellgrau", "Hellgraues", "Hellgrauer", "Hellgraue"), GRAY(0x1d, 0x808080, "gray", '2', "Grau", "Graues", "Grauer", "Graue"), DARK_GRAY(0x1e, 0x585858, "dark_gray", '1', "Dunkelgrau", "Dunkelgraues", "Dunkelgrauer", "Dunkelgraue"), - BLACK(0x1f, 0x000000, "black", '0', "Schwarz", "Schwarzes", "Schwarzer", "Schwarze", "ink_sack", "Tintenbeutel"); + BLACK(0x1f, 0x000000, "black", '0', "Schwarz", "Schwarzes", "Schwarzer", "Schwarze"); public static final char RESET = 0x01; public static final char COMMAND = 0x11; - private static final Map LOOKUP = Maps.newHashMap(); + private static final Map LOOKUP = Maps.newHashMap(); private static final Map CODE_LOOKUP = Maps.newHashMap(); private static final Pattern STRIP_PATTERN = Pattern.compile("[\u0001\u0002\u0003\u0004\u0005\u0006\u0007\u0008\u0009\u000b\u000c\r\u000e\u000f" + "\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f]"); @@ -56,11 +56,9 @@ public enum TextColor implements Identifyable, Displayable { private final String subject; private final String msubject; private final String fsubject; - private final String dye; - private final String dyeName; static { - for(TextColor color : values()) { + for(Color color : values()) { if(color.code < COLORS.length) { COLORS[color.code] = color.color; SHADOW[color.code] = color.shadow; @@ -86,16 +84,16 @@ public enum TextColor implements Identifyable, Displayable { return code < SHADOW.length ? SHADOW[code] : 0x000000; } - public static TextColor byName(String name) { - TextColor type = LOOKUP.get(name.toLowerCase()); + public static Color byName(String name) { + Color type = LOOKUP.get(name.toLowerCase()); return type == null ? WHITE : type; } - public static TextColor getExact(String name) { + public static Color getExact(String name) { return LOOKUP.get(name.toLowerCase()); } - private TextColor(int code, int color, String id, char colorId, String display, String subject, String msubject, String fsubject, String dye, String dyeName) { + private Color(int code, int color, String id, char colorId, String display, String subject, String msubject, String fsubject) { this.format = Character.toString(this.code = (char)code); this.color = color; this.shadow = Util.mixColor(Util.mixColor(this.color, 0x000000), 0x000000); @@ -105,12 +103,6 @@ public enum TextColor implements Identifyable, Displayable { this.subject = subject; this.msubject = msubject; this.fsubject = fsubject; - this.dye = dye; - this.dyeName = dyeName; - } - - private TextColor(int code, int color, String id, char colorId, String display, String subject, String msubject, String fsubject) { - this(code, color, id, colorId, display, subject, msubject, fsubject, id + "_dye", msubject + " Farbstoff"); } public String toString() { @@ -129,14 +121,6 @@ public enum TextColor implements Identifyable, Displayable { return type == null ? this.display : (type < 0 ? this.fsubject : (type > 0 ? this.msubject : this.subject)); } - public String getDye() { - return this.dye; - } - - public String getDyeName() { - return this.dyeName; - } - public int getColor() { return this.color; } diff --git a/server/src/main/java/server/Server.java b/server/src/main/java/server/Server.java index 14d809fa..c053e4fb 100755 --- a/server/src/main/java/server/Server.java +++ b/server/src/main/java/server/Server.java @@ -87,7 +87,7 @@ import common.util.ExtMath; import common.util.Pair; import common.util.PortalType; import common.util.Position; -import common.util.TextColor; +import common.util.Color; import common.util.Triplet; import common.util.Util; import common.util.Var; @@ -1074,8 +1074,8 @@ public final class Server implements IThreadListener, Executor { nplayer.setHealth(nplayer.getHealth()); conn.sendPlayerAbilities(); if(message != null) - conn.addHotbar(TextColor.DARK_RED + message); - conn.addFeed(TextColor.RED + "* Bei %d, %d, %d in Dimension %s gestorben", pos.getX(), pos.getY(), pos.getZ(), + conn.addHotbar(Color.DARK_RED + message); + conn.addFeed(Color.RED + "* Bei %d, %d, %d in Dimension %s gestorben", pos.getX(), pos.getY(), pos.getZ(), old.worldObj.dimension.getDisplay()); } diff --git a/server/src/main/java/server/clipboard/ReorderRegistry.java b/server/src/main/java/server/clipboard/ReorderRegistry.java index 936a26eb..73788658 100755 --- a/server/src/main/java/server/clipboard/ReorderRegistry.java +++ b/server/src/main/java/server/clipboard/ReorderRegistry.java @@ -15,7 +15,7 @@ import common.block.tech.BlockAnvil; import common.init.BlockRegistry; import common.init.Blocks; import common.init.WoodType; -import common.util.TextColor; +import common.util.Color; import common.util.Vec3i; import common.world.State; @@ -48,7 +48,7 @@ public abstract class ReorderRegistry { PLACE_LAST.add(BlockRegistry.byName(wood.getName() + "_sapling")); } // PLACE_LAST.add(Blocks.bed); - for(TextColor color : BlockBed.COLORS) { + for(Color color : BlockBed.COLORS) { PLACE_LAST.add(BlockRegistry.byName(color.getName() + "_bed")); } PLACE_LAST.add(Blocks.tallgrass); diff --git a/server/src/main/java/server/command/ColorParser.java b/server/src/main/java/server/command/ColorParser.java index 0f0c75c7..2386bc27 100644 --- a/server/src/main/java/server/command/ColorParser.java +++ b/server/src/main/java/server/command/ColorParser.java @@ -1,6 +1,6 @@ package server.command; -import common.util.TextColor; +import common.util.Color; public class ColorParser extends IntParser { public ColorParser(String name, Integer def, Object ... completions) { @@ -8,7 +8,7 @@ public class ColorParser extends IntParser { } public ColorParser(String name, Integer def) { - this(name, def, (Object[])TextColor.values()); + this(name, def, (Object[])Color.values()); } public Integer parse(CommandEnvironment env, String input) { @@ -16,7 +16,7 @@ public class ColorParser extends IntParser { input = input.substring(1); } else { - TextColor color = TextColor.getExact(input); + Color color = Color.getExact(input); if(color != null) return color.getColor(); } diff --git a/server/src/main/java/server/command/Command.java b/server/src/main/java/server/command/Command.java index 87beeb78..14628c3d 100644 --- a/server/src/main/java/server/command/Command.java +++ b/server/src/main/java/server/command/Command.java @@ -9,7 +9,7 @@ import common.collect.Lists; import common.collect.Maps; import common.util.BlockPos; import common.util.CharValidator; -import common.util.TextColor; +import common.util.Color; import common.util.Vec3; import common.world.World; import server.command.DoubleParser.DefType; @@ -23,8 +23,8 @@ public abstract class Command implements Executable { private int parPos = 0; private boolean parReq = true; - public static String asCommand(TextColor color, String command, Object ... args) { - return String.format(TextColor.DARK_GRAY + "[" + TextColor.COMMAND + "%s" + TextColor.DARK_GRAY + "]" + (color == null ? TextColor.RESET : color), String.format(command, args)); + public static String asCommand(Color color, String command, Object ... args) { + return String.format(Color.DARK_GRAY + "[" + Color.COMMAND + "%s" + Color.DARK_GRAY + "]" + (color == null ? Color.RESET : color), String.format(command, args)); } protected Command(String name) { diff --git a/server/src/main/java/server/command/CommandEnvironment.java b/server/src/main/java/server/command/CommandEnvironment.java index 4941e489..15c0c060 100644 --- a/server/src/main/java/server/command/CommandEnvironment.java +++ b/server/src/main/java/server/command/CommandEnvironment.java @@ -12,7 +12,7 @@ import common.collect.Lists; import common.collect.Maps; import common.collect.Sets; import common.log.Log; -import common.util.TextColor; +import common.util.Color; import server.Server; import server.command.commands.*; @@ -171,13 +171,13 @@ public class CommandEnvironment { catch(RunException e) { Throwable cause = e; do { - exec.log(TextColor.RED + cause.getMessage()); + exec.log(Color.RED + cause.getMessage()); cause = cause.getCause(); } while(cause != null); } catch(Throwable t) { - exec.log(TextColor.RED + "Fehler: %s", t.getMessage()); + exec.log(Color.RED + "Fehler: %s", t.getMessage()); Log.CONSOLE.error(t, "Fehler beim Ausführen von Befehl '%s'", cmd); } finally { diff --git a/server/src/main/java/server/command/commands/CommandExterminatus.java b/server/src/main/java/server/command/commands/CommandExterminatus.java index 4bc99108..ac195836 100644 --- a/server/src/main/java/server/command/commands/CommandExterminatus.java +++ b/server/src/main/java/server/command/commands/CommandExterminatus.java @@ -1,7 +1,7 @@ package server.command.commands; import common.dimension.Space; -import common.util.TextColor; +import common.util.Color; import server.command.Command; import server.command.CommandEnvironment; import server.command.Executor; @@ -20,8 +20,8 @@ public class CommandExterminatus extends Command { throw new RunException("Der Weltraum kann nicht zerstört werden (lol?)"); else if(world.isExterminated()) throw new RunException("Dimension %s ist bereits zerstört", world.dimension.getDisplay()); - exec.log(TextColor.YELLOW + "Dimension %s wird zerstört ...", world.dimension.getDisplay()); + exec.log(Color.YELLOW + "Dimension %s wird zerstört ...", world.dimension.getDisplay()); world.exterminate(); - exec.log(TextColor.CRIMSON + "Die Welt %s wurde vernichtet >:)-", world.dimension.getDisplay()); + exec.log(Color.CRIMSON + "Die Welt %s wurde vernichtet >:)-", world.dimension.getDisplay()); } } diff --git a/server/src/main/java/server/command/commands/CommandGod.java b/server/src/main/java/server/command/commands/CommandGod.java index b3449f1e..f88f8310 100644 --- a/server/src/main/java/server/command/commands/CommandGod.java +++ b/server/src/main/java/server/command/commands/CommandGod.java @@ -4,7 +4,7 @@ import java.util.List; import common.effect.Effect; import common.entity.npc.EntityNPC; -import common.util.TextColor; +import common.util.Color; import server.command.Command; import server.command.CommandEnvironment; import server.command.Executor; @@ -25,7 +25,7 @@ public class CommandGod extends Command { for(EntityNPC player : players) { player.setGodMode(!remove); if(!quiet) - player.connection.addFeed(!remove ? (TextColor.GREEN + "Statuseffekte wurden hinzugefügt") : (TextColor.RED + "Statuseffekte wurden entfernt")); + player.connection.addFeed(!remove ? (Color.GREEN + "Statuseffekte wurden hinzugefügt") : (Color.RED + "Statuseffekte wurden entfernt")); if(quiet || player.connection != exec) exec.log("Statuseffekte " + (!remove ? "an %s gegeben" : "von %s entfernt"), player.getCommandName()); } diff --git a/server/src/main/java/server/command/commands/CommandLoad.java b/server/src/main/java/server/command/commands/CommandLoad.java index 9cfa2ea9..e45e0789 100644 --- a/server/src/main/java/server/command/commands/CommandLoad.java +++ b/server/src/main/java/server/command/commands/CommandLoad.java @@ -14,7 +14,7 @@ import common.init.Blocks; import common.init.NameRegistry; import common.packet.SPacketDimensions; import common.rng.Random; -import common.util.TextColor; +import common.util.Color; import server.Server; import server.command.ArgumentParser; import server.command.Command; @@ -126,7 +126,7 @@ public class CommandLoad extends Command { if(Converter.convert(dir, name, pos -> env.getServer().schedule(() -> { Planet planet = registerPlanet(env.getServer(), star, name, display, sky, fog, clouds, orbit, rotation, (float)offset, (float)gravity, (float)temperature, brightness); this.loadingDim = null; - exec.log(TextColor.GREEN + "Welt %s wurde erfolgreich in Dimension '%s' konvertiert", dir, display); + exec.log(Color.GREEN + "Welt %s wurde erfolgreich in Dimension '%s' konvertiert", dir, display); if(teleport && pos != null) { Player player = env.getServer().getPlayer(((Player)exec).getUser()); if(player != null && player.getPresentEntity() != null) @@ -137,12 +137,12 @@ public class CommandLoad extends Command { throw new RunException("Welt %s konnte nicht konvertiert werden", dir); } else { - exec.log(TextColor.ACID + "Welt %s wird in Dimension '%s' konvertiert ...", dir, display); + exec.log(Color.ACID + "Welt %s wird in Dimension '%s' konvertiert ...", dir, display); } return; } Planet planet = registerPlanet(env.getServer(), star, name, display, sky, fog, clouds, orbit, rotation, (float)offset, (float)gravity, (float)temperature, brightness); - exec.log(TextColor.GREEN + "Dimension '%s' wurde registriert", display); + exec.log(Color.GREEN + "Dimension '%s' wurde registriert", display); if(teleport && ((Player)exec).getPresentEntity() != null) ((Player)exec).getPresentEntity().teleport(CommandWorld.adjust(env.getServer().getWorld(planet), ((Player)exec).getPresentEntity().getPosition()), planet); } diff --git a/server/src/main/java/server/command/commands/CommandNoclip.java b/server/src/main/java/server/command/commands/CommandNoclip.java index a89be804..7400ee7e 100644 --- a/server/src/main/java/server/command/commands/CommandNoclip.java +++ b/server/src/main/java/server/command/commands/CommandNoclip.java @@ -3,7 +3,7 @@ package server.command.commands; import java.util.List; import common.entity.npc.EntityNPC; -import common.util.TextColor; +import common.util.Color; import server.command.Command; import server.command.CommandEnvironment; import server.command.Executor; @@ -27,7 +27,7 @@ public class CommandNoclip extends Command { continue; player.setNoclip(!remove); if(!quiet) - player.connection.addFeed((!remove ? TextColor.GREEN : TextColor.RED) + "NoClip wurde " + (!remove ? "eingeschaltet" : "ausgeschaltet")); + player.connection.addFeed((!remove ? Color.GREEN : Color.RED) + "NoClip wurde " + (!remove ? "eingeschaltet" : "ausgeschaltet")); if(quiet || player.connection != exec) exec.log("NoClip für %s " + (!remove ? "eingeschaltet" : "ausgeschaltet"), player.getCommandName()); done++; diff --git a/server/src/main/java/server/command/commands/CommandPasswd.java b/server/src/main/java/server/command/commands/CommandPasswd.java index c82b2867..485350a7 100644 --- a/server/src/main/java/server/command/commands/CommandPasswd.java +++ b/server/src/main/java/server/command/commands/CommandPasswd.java @@ -4,7 +4,7 @@ import java.security.MessageDigest; import common.network.IPlayer; import common.util.EncryptUtil; -import common.util.TextColor; +import common.util.Color; import server.command.Command; import server.command.CommandEnvironment; import server.command.Executor; @@ -50,20 +50,20 @@ public class CommandPasswd extends Command { protected void accept() { User plr = env.getServer().getUser(user.getUser()); if(!((Player)exec).isAdmin() || plr == null || (plr.isAdmin() && plr != exec) || (plr.getPasswordHash() == null && plr == exec) || (plr.getPubkey() != null && plr == exec)) { - exec.log(TextColor.DARK_RED + "Ein Fehler ist aufgetreten"); + exec.log(Color.DARK_RED + "Ein Fehler ist aufgetreten"); return; } if(this.checkField != null && !MessageDigest.isEqual(EncryptUtil.hashPassword(this.checkField.get(), plr.getPasswordHash().second()), plr.getPasswordHash().first())) { - exec.log(TextColor.RED + "Falsches Passwort eingegeben"); + exec.log(Color.RED + "Falsches Passwort eingegeben"); return; } if(!this.passwordField.get().equals(this.confirmField.get())) { - exec.log(TextColor.RED + "Passwörter stimmen nicht überein"); + exec.log(Color.RED + "Passwörter stimmen nicht überein"); return; } plr.setPasswordHash(EncryptUtil.hashPassword(this.passwordField.get())); plr.setPubkey(null); - exec.log(TextColor.GREEN + "Passwort" + (plr != exec ? " für %s" : "") + " gesetzt", plr.getUser()); + exec.log(Color.GREEN + "Passwort" + (plr != exec ? " für %s" : "") + " gesetzt", plr.getUser()); } }); } @@ -74,7 +74,7 @@ public class CommandPasswd extends Command { throw new RunException("Das Passwort ist zu kurz, mindestens 8 Zeichen sind erforderlich"); user.setPasswordHash(EncryptUtil.hashPassword(password)); user.setPubkey(null); - exec.log(TextColor.GREEN + "Passwort für %s gesetzt", user.getUser()); + exec.log(Color.GREEN + "Passwort für %s gesetzt", user.getUser()); } } } diff --git a/server/src/main/java/server/command/commands/CommandPlayers.java b/server/src/main/java/server/command/commands/CommandPlayers.java index 0edf5317..ebc8c6d6 100644 --- a/server/src/main/java/server/command/commands/CommandPlayers.java +++ b/server/src/main/java/server/command/commands/CommandPlayers.java @@ -4,7 +4,7 @@ import java.util.List; import common.entity.npc.EntityNPC; import common.util.ExtMath; -import common.util.TextColor; +import common.util.Color; import server.command.Command; import server.command.CommandEnvironment; import server.command.Executor; @@ -21,13 +21,13 @@ public class CommandPlayers extends Command { public void exec(CommandEnvironment env, Executor exec, boolean coords) { List players = env.getServer().getPlayers(); if(players.isEmpty()) { - exec.log(TextColor.DARK_GRAY + "Es sind keine Spieler online"); + exec.log(Color.DARK_GRAY + "Es sind keine Spieler online"); return; } - exec.log(TextColor.GREEN + "Es " + (players.size() == 1 ? "ist" : "sind") + " " + TextColor.YELLOW + "%d" + TextColor.GREEN + " Spieler online", players.size()); + exec.log(Color.GREEN + "Es " + (players.size() == 1 ? "ist" : "sind") + " " + Color.YELLOW + "%d" + Color.GREEN + " Spieler online", players.size()); for(Player player : players) { EntityNPC entity = player.getPresentEntity(); - exec.log("%s%s" + TextColor.GRAY + ": '%s" + TextColor.GRAY + "'" + (coords && entity != null ? " [" + TextColor.ORANGE + "%s @ %d, %d, %d" + TextColor.GRAY + "]" : ""), player.isAdmin() ? TextColor.RED : TextColor.NEON, player.getUser(), entity == null ? TextColor.DARK_GRAY + "<->" : TextColor.ACID + entity.getCommandName(), entity == null ? null : entity.worldObj.dimension.getDisplay(), entity == null ? null : ExtMath.floord(entity.posX), entity == null ? null : ExtMath.floord(entity.posY), entity == null ? null : ExtMath.floord(entity.posZ)); + exec.log("%s%s" + Color.GRAY + ": '%s" + Color.GRAY + "'" + (coords && entity != null ? " [" + Color.ORANGE + "%s @ %d, %d, %d" + Color.GRAY + "]" : ""), player.isAdmin() ? Color.RED : Color.NEON, player.getUser(), entity == null ? Color.DARK_GRAY + "<->" : Color.ACID + entity.getCommandName(), entity == null ? null : entity.worldObj.dimension.getDisplay(), entity == null ? null : ExtMath.floord(entity.posX), entity == null ? null : ExtMath.floord(entity.posY), entity == null ? null : ExtMath.floord(entity.posZ)); } } } diff --git a/server/src/main/java/server/command/commands/CommandPubkey.java b/server/src/main/java/server/command/commands/CommandPubkey.java index 36824061..7669823b 100644 --- a/server/src/main/java/server/command/commands/CommandPubkey.java +++ b/server/src/main/java/server/command/commands/CommandPubkey.java @@ -6,7 +6,7 @@ import java.security.PublicKey; import common.network.IPlayer; import common.util.EncryptUtil; import common.util.Pair; -import common.util.TextColor; +import common.util.Color; import server.command.Command; import server.command.CommandEnvironment; import server.command.Executor; @@ -48,11 +48,11 @@ public class CommandPubkey extends Command { protected void accept() { User plr = env.getServer().getUser(user.getUser()); if(!((Player)exec).isAdmin() || plr == null || (plr.isAdmin() && plr != exec)) { - exec.log(TextColor.DARK_RED + "Ein Fehler ist aufgetreten"); + exec.log(Color.DARK_RED + "Ein Fehler ist aufgetreten"); return; } if(this.checkField != null && plr.getPasswordHash() != null && !MessageDigest.isEqual(EncryptUtil.hashPassword(this.checkField.get(), plr.getPasswordHash().second()), plr.getPasswordHash().first())) { - exec.log(TextColor.RED + "Falsches Passwort eingegeben"); + exec.log(Color.RED + "Falsches Passwort eingegeben"); return; } Pair key; @@ -60,12 +60,12 @@ public class CommandPubkey extends Command { key = EncryptUtil.parseArmoredPubkey(this.keyField.get()); } catch(IllegalArgumentException e) { - exec.log(TextColor.RED + "Ungültiger Schlüssel"); + exec.log(Color.RED + "Ungültiger Schlüssel"); return; } plr.setPasswordHash(null); plr.setPubkey(key.first()); - exec.log(TextColor.GREEN + "Schlüssel" + (plr != exec ? " für %s" : "") + " gesetzt", plr.getUser()); + exec.log(Color.GREEN + "Schlüssel" + (plr != exec ? " für %s" : "") + " gesetzt", plr.getUser()); } }); } @@ -81,7 +81,7 @@ public class CommandPubkey extends Command { } user.setPasswordHash(null); user.setPubkey(key.first()); - exec.log(TextColor.GREEN + "Schlüssel für %s gesetzt", user.getUser()); + exec.log(Color.GREEN + "Schlüssel für %s gesetzt", user.getUser()); } } } diff --git a/server/src/main/java/server/command/commands/CommandRegister.java b/server/src/main/java/server/command/commands/CommandRegister.java index cc569e01..d96acc35 100644 --- a/server/src/main/java/server/command/commands/CommandRegister.java +++ b/server/src/main/java/server/command/commands/CommandRegister.java @@ -2,7 +2,7 @@ package server.command.commands; import common.network.IPlayer; import common.util.EncryptUtil; -import common.util.TextColor; +import common.util.Color; import server.command.Command; import server.command.CommandEnvironment; import server.command.Executor; @@ -45,18 +45,18 @@ public class CommandRegister extends Command { protected void accept() { if(!((Player)exec).isAdmin() || env.getServer().getUser(username) != null || env.getServer().loadPlayerData(username) != null) { - exec.log(TextColor.DARK_RED + "Ein Fehler ist aufgetreten"); + exec.log(Color.DARK_RED + "Ein Fehler ist aufgetreten"); return; } if(!this.passwordField.get().equals(this.confirmField.get())) { - exec.log(TextColor.RED + "Passwörter stimmen nicht überein"); + exec.log(Color.RED + "Passwörter stimmen nicht überein"); return; } User user = new User(username); user.setPasswordHash(EncryptUtil.hashPassword(this.passwordField.get())); user.setAdmin(admin); env.getServer().addUser(user); - exec.log(TextColor.GREEN + "Spieler %s registriert", username); + exec.log(Color.GREEN + "Spieler %s registriert", username); } }); } @@ -69,7 +69,7 @@ public class CommandRegister extends Command { user.setPasswordHash(EncryptUtil.hashPassword(password)); user.setAdmin(admin); env.getServer().addUser(user); - exec.log(TextColor.GREEN + "Spieler %s registriert", username); + exec.log(Color.GREEN + "Spieler %s registriert", username); } } } diff --git a/server/src/main/java/server/command/commands/CommandRegkey.java b/server/src/main/java/server/command/commands/CommandRegkey.java index 741b8574..bdb5ec5e 100644 --- a/server/src/main/java/server/command/commands/CommandRegkey.java +++ b/server/src/main/java/server/command/commands/CommandRegkey.java @@ -5,7 +5,7 @@ import java.security.PublicKey; import common.network.IPlayer; import common.util.EncryptUtil; import common.util.Pair; -import common.util.TextColor; +import common.util.Color; import server.command.Command; import server.command.CommandEnvironment; import server.command.Executor; @@ -48,7 +48,7 @@ public class CommandRegkey extends Command { protected void accept() { if(!((Player)exec).isAdmin() || env.getServer().getUser(username) != null || env.getServer().loadPlayerData(username) != null) { - exec.log(TextColor.DARK_RED + "Ein Fehler ist aufgetreten"); + exec.log(Color.DARK_RED + "Ein Fehler ist aufgetreten"); return; } Pair key; @@ -56,14 +56,14 @@ public class CommandRegkey extends Command { key = EncryptUtil.parseArmoredPubkey(this.keyField.get()); } catch(IllegalArgumentException e) { - exec.log(TextColor.RED + "Ungültiger Schlüssel"); + exec.log(Color.RED + "Ungültiger Schlüssel"); return; } User user = new User(username); user.setPubkey(key.first()); user.setAdmin(admin); env.getServer().addUser(user); - exec.log(TextColor.GREEN + "Spieler %s registriert", username); + exec.log(Color.GREEN + "Spieler %s registriert", username); } }); } @@ -81,7 +81,7 @@ public class CommandRegkey extends Command { user.setPubkey(key.first()); user.setAdmin(admin); env.getServer().addUser(user); - exec.log(TextColor.GREEN + "Spieler %s registriert", username); + exec.log(Color.GREEN + "Spieler %s registriert", username); } } } diff --git a/server/src/main/java/server/command/commands/CommandSave.java b/server/src/main/java/server/command/commands/CommandSave.java index e974d130..bd96d38c 100644 --- a/server/src/main/java/server/command/commands/CommandSave.java +++ b/server/src/main/java/server/command/commands/CommandSave.java @@ -2,7 +2,7 @@ package server.command.commands; import common.packet.SPacketMessage; import common.packet.SPacketMessage.Type; -import common.util.TextColor; +import common.util.Color; import server.command.Command; import server.command.CommandEnvironment; import server.command.Executor; @@ -19,18 +19,18 @@ public class CommandSave extends Command { public void exec(CommandEnvironment env, Executor exec, boolean message, boolean flush) { if(message) - env.getServer().sendPacket(new SPacketMessage(TextColor.RED + "Speichere Serverdaten, der Server könnte kurz einfrieren", Type.FEED)); - exec.log(TextColor.ORANGE + "Speichere Spielerdaten ..."); + env.getServer().sendPacket(new SPacketMessage(Color.RED + "Speichere Serverdaten, der Server könnte kurz einfrieren", Type.FEED)); + exec.log(Color.ORANGE + "Speichere Spielerdaten ..."); env.getServer().saveAllPlayerData(true); - exec.log(TextColor.ORANGE + "Speichere Weltdaten ..."); + exec.log(Color.ORANGE + "Speichere Weltdaten ..."); env.getServer().saveAllWorlds(true); env.getServer().resetSaveTimer(); if(flush) { - exec.log(TextColor.ORANGE + "Beende E/A ..."); + exec.log(Color.ORANGE + "Beende E/A ..."); Region.finishWrite(); } - exec.log(TextColor.DARK_GREEN + "Alle Serverdaten wurden gespeichert"); + exec.log(Color.DARK_GREEN + "Alle Serverdaten wurden gespeichert"); if(message) - env.getServer().sendPacket(new SPacketMessage(TextColor.GREEN + "Die Serverdaten wurden gespeichert", Type.FEED)); + env.getServer().sendPacket(new SPacketMessage(Color.GREEN + "Die Serverdaten wurden gespeichert", Type.FEED)); } } diff --git a/server/src/main/java/server/command/commands/CommandSv.java b/server/src/main/java/server/command/commands/CommandSv.java index e823bb7a..90c48db2 100644 --- a/server/src/main/java/server/command/commands/CommandSv.java +++ b/server/src/main/java/server/command/commands/CommandSv.java @@ -5,7 +5,7 @@ import java.util.Map.Entry; import common.collect.Lists; import common.packet.SPacketServerConfig; -import common.util.TextColor; +import common.util.Color; import server.command.ArgumentSplitter; import server.command.Command; import server.command.CommandEnvironment; @@ -41,17 +41,17 @@ public class CommandSv extends Command { private String formatVariable(String name, SVar sv, String separator, boolean censor) { String value = sv.get(); - StringBuilder sb = new StringBuilder(TextColor.YELLOW + name + TextColor.GRAY + " " + separator + " "); + StringBuilder sb = new StringBuilder(Color.YELLOW + name + Color.GRAY + " " + separator + " "); if(sv.noDef && sv.def.equals(value)) - sb.append(TextColor.DARK_GRAY + "[ - ]"); + sb.append(Color.DARK_GRAY + "[ - ]"); else if(censor && name.equals("password") && !value.isEmpty()) - sb.append(TextColor.NEON + "'****'"); + sb.append(Color.NEON + "'****'"); else if(sv.type == ValueType.STRING) - sb.append(TextColor.NEON + "'" + value + "'"); + sb.append(Color.NEON + "'" + value + "'"); else - sb.append(((sv.type == ValueType.BOOLEAN ? (value.equals("true") ? TextColor.GREEN : TextColor.RED) : TextColor.BLUE)) + value); + sb.append(((sv.type == ValueType.BOOLEAN ? (value.equals("true") ? Color.GREEN : Color.RED) : Color.BLUE)) + value); if(!sv.def.equals(value)) - sb.append(TextColor.GRAY + " (" + (sv.noDef ? TextColor.DARK_GRAY + "[ - ]" : TextColor.BROWN + sv.def) + TextColor.GRAY + ")"); + sb.append(Color.GRAY + " (" + (sv.noDef ? Color.DARK_GRAY + "[ - ]" : Color.BROWN + sv.def) + Color.GRAY + ")"); return sb.toString(); } @@ -62,7 +62,7 @@ public class CommandSv extends Command { for(Entry entry : env.getServer().getVariables().entrySet()) { exec.log(this.formatVariable(entry.getKey(), entry.getValue(), "=", true)); } - exec.log(TextColor.GREEN + "SVARs insgesamt registriert: %d", env.getServer().getVariables().size()); + exec.log(Color.GREEN + "SVARs insgesamt registriert: %d", env.getServer().getVariables().size()); return null; } SVar sv = env.getServer().getVariables().get(variable); @@ -82,7 +82,7 @@ public class CommandSv extends Command { Integer.parseInt(value); } catch(NumberFormatException e) { - throw new RunException(TextColor.DARK_RED + "'%s' ist keine gültige Zahl", value); + throw new RunException(Color.DARK_RED + "'%s' ist keine gültige Zahl", value); } } else if(sv.type == ValueType.FLOAT) { @@ -90,7 +90,7 @@ public class CommandSv extends Command { Float.parseFloat(value); } catch(NumberFormatException e) { - throw new RunException(TextColor.DARK_RED + "'%s' ist keine gültige Zahl", value); + throw new RunException(Color.DARK_RED + "'%s' ist keine gültige Zahl", value); } } sv.set(value, false, true); diff --git a/server/src/main/java/server/command/commands/CommandUsers.java b/server/src/main/java/server/command/commands/CommandUsers.java index abf3b5d2..01147ae1 100644 --- a/server/src/main/java/server/command/commands/CommandUsers.java +++ b/server/src/main/java/server/command/commands/CommandUsers.java @@ -2,7 +2,7 @@ package server.command.commands; import java.util.Collection; -import common.util.TextColor; +import common.util.Color; import server.command.Command; import server.command.CommandEnvironment; import server.command.Executor; @@ -16,12 +16,12 @@ public class CommandUsers extends Command { public void exec(CommandEnvironment env, Executor exec) { Collection users = env.getServer().getUsers(); if(users.isEmpty()) { - exec.log(TextColor.DARK_GRAY + "Es sind keine Spieler registriert"); + exec.log(Color.DARK_GRAY + "Es sind keine Spieler registriert"); return; } - exec.log(TextColor.GREEN + "Es " + (users.size() == 1 ? "ist" : "sind") + " " + TextColor.YELLOW + "%d" + TextColor.GREEN + " Spieler registriert", users.size()); + exec.log(Color.GREEN + "Es " + (users.size() == 1 ? "ist" : "sind") + " " + Color.YELLOW + "%d" + Color.GREEN + " Spieler registriert", users.size()); for(User user : users) { - exec.log("%s%s" + TextColor.GRAY + ": %s" + TextColor.GRAY + ", %s", user.isAdmin() ? TextColor.RED : TextColor.NEON, user.getUser(), user.isOnline() ? TextColor.DARK_GREEN + "Online" : TextColor.DARK_GRAY + "Offline", user.getPubkey() != null ? TextColor.YELLOW + "Pubkey" : (user.getPasswordHash() != null ? TextColor.MAGENTA + "Passwort" : TextColor.BLACK + "Kein Login")); + exec.log("%s%s" + Color.GRAY + ": %s" + Color.GRAY + ", %s", user.isAdmin() ? Color.RED : Color.NEON, user.getUser(), user.isOnline() ? Color.DARK_GREEN + "Online" : Color.DARK_GRAY + "Offline", user.getPubkey() != null ? Color.YELLOW + "Pubkey" : (user.getPasswordHash() != null ? Color.MAGENTA + "Passwort" : Color.BLACK + "Kein Login")); } } } diff --git a/server/src/main/java/server/command/commands/CommandWarps.java b/server/src/main/java/server/command/commands/CommandWarps.java index 6f323a9b..284c1d32 100644 --- a/server/src/main/java/server/command/commands/CommandWarps.java +++ b/server/src/main/java/server/command/commands/CommandWarps.java @@ -6,7 +6,7 @@ import java.util.Map.Entry; import common.dimension.Dimension; import common.util.ExtMath; import common.util.Position; -import common.util.TextColor; +import common.util.Color; import server.command.Command; import server.command.CommandEnvironment; import server.command.Executor; @@ -22,7 +22,7 @@ public class CommandWarps extends Command { public void exec(CommandEnvironment env, Executor exec, Dimension dim) { Map warps = env.getServer().getWarps(); if(warps.isEmpty()) { - exec.log(TextColor.DARK_GRAY + "Es sind keine Warps definiert"); + exec.log(Color.DARK_GRAY + "Es sind keine Warps definiert"); return; } int n = 0; @@ -32,15 +32,15 @@ public class CommandWarps extends Command { n++; } if(dim != null && n == 0) { - exec.log(TextColor.DARK_GRAY + "Es sind keine Warps in %s vorhanden", dim.getDisplay()); + exec.log(Color.DARK_GRAY + "Es sind keine Warps in %s vorhanden", dim.getDisplay()); return; } - exec.log(TextColor.GREEN + "Es " + (n == 1 ? "ist" : "sind") + " " + TextColor.YELLOW + "%d" + TextColor.GREEN + " Warp" + (n == 1 ? "" : "s") + " " + (dim == null ? "" : "in Dimension %s ") + "vorhanden", n, dim == null ? null : dim.getDisplay()); + exec.log(Color.GREEN + "Es " + (n == 1 ? "ist" : "sind") + " " + Color.YELLOW + "%d" + Color.GREEN + " Warp" + (n == 1 ? "" : "s") + " " + (dim == null ? "" : "in Dimension %s ") + "vorhanden", n, dim == null ? null : dim.getDisplay()); for(Entry warp : warps.entrySet()) { Position pos = warp.getValue(); Dimension wdim = pos.getDimension(); if(wdim != null && (dim == null || wdim == dim)) - exec.log(TextColor.NEON + "%s" + TextColor.GRAY + ": " + TextColor.ORANGE + "%s" + (dim == null ? " @ " : "") + "%d, %d, %d", warp.getKey(), dim != null ? "" : wdim.getDisplay(), ExtMath.floord(pos.xCoord), ExtMath.floord(pos.yCoord), ExtMath.floord(pos.zCoord)); + exec.log(Color.NEON + "%s" + Color.GRAY + ": " + Color.ORANGE + "%s" + (dim == null ? " @ " : "") + "%d, %d, %d", warp.getKey(), dim != null ? "" : wdim.getDisplay(), ExtMath.floord(pos.xCoord), ExtMath.floord(pos.yCoord), ExtMath.floord(pos.zCoord)); } } } diff --git a/server/src/main/java/server/network/LoginHandler.java b/server/src/main/java/server/network/LoginHandler.java index c8a14d90..fe934c98 100755 --- a/server/src/main/java/server/network/LoginHandler.java +++ b/server/src/main/java/server/network/LoginHandler.java @@ -22,7 +22,7 @@ import common.packet.RPacketRequestEncrypt; import common.packet.RPacketResponse; import common.packet.RPacketServerConfig; import common.util.EncryptUtil; -import common.util.TextColor; +import common.util.Color; import server.Server; import server.vars.SVars; @@ -68,7 +68,7 @@ public class LoginHandler implements ILoginHandler public void onDisconnect(String reason) { - Log.NETWORK.info(this.getConnectionInfo() + " wurde beim Login getrennt: " + TextColor.stripCodes(reason)); + Log.NETWORK.info(this.getConnectionInfo() + " wurde beim Login getrennt: " + Color.stripCodes(reason)); } public String getConnectionInfo() diff --git a/server/src/main/java/server/network/Player.java b/server/src/main/java/server/network/Player.java index 90513c30..8ec45c38 100755 --- a/server/src/main/java/server/network/Player.java +++ b/server/src/main/java/server/network/Player.java @@ -116,7 +116,7 @@ import common.util.Facing; import common.util.IntHashMap; import common.util.PortalType; import common.util.Position; -import common.util.TextColor; +import common.util.Color; import common.util.Vec3i; import common.util.WorldPos; import common.vars.Vars; @@ -559,24 +559,24 @@ public class Player extends User implements Executor, IPlayer public void sendPickupMessage(Entity entity, int amount) { if(entity instanceof EntityItem) if(amount == 1) - this.addFeed(TextColor.DARK_GREEN + "* %s aufgelesen", - ((EntityItem)entity).getEntityItem().getColoredName(TextColor.DARK_GREEN)); + this.addFeed(Color.DARK_GREEN + "* %s aufgelesen", + ((EntityItem)entity).getEntityItem().getColoredName(Color.DARK_GREEN)); else - this.addFeed(TextColor.DARK_GREEN + "* %d %s aufgelesen", amount, - ((EntityItem)entity).getEntityItem().getColoredName(TextColor.DARK_GREEN)); + this.addFeed(Color.DARK_GREEN + "* %d %s aufgelesen", amount, + ((EntityItem)entity).getEntityItem().getColoredName(Color.DARK_GREEN)); else if(entity instanceof EntityArrow) - this.addFeed(TextColor.DARK_GREEN + "* Pfeil aufgelesen", amount); + this.addFeed(Color.DARK_GREEN + "* Pfeil aufgelesen", amount); else if(entity instanceof EntityXp) - this.addFeed(TextColor.GREEN + "* %d Erfahrung gesammelt", amount); + this.addFeed(Color.GREEN + "* %d Erfahrung gesammelt", amount); } public void sendThrowMessage(ItemStack stack) { if(stack.getSize() == 1) - this.addFeed(TextColor.DARK_RED + "* %s weg geworfen", - stack.getColoredName(TextColor.DARK_RED)); + this.addFeed(Color.DARK_RED + "* %s weg geworfen", + stack.getColoredName(Color.DARK_RED)); else - this.addFeed(TextColor.DARK_RED + "* %d %s weg geworfen", stack.getSize(), - stack.getColoredName(TextColor.DARK_RED)); + this.addFeed(Color.DARK_RED + "* %d %s weg geworfen", stack.getSize(), + stack.getColoredName(Color.DARK_RED)); } @@ -683,7 +683,7 @@ public class Player extends User implements Executor, IPlayer { if (chest.getLockCode() != null && !this.entity.canOpen(chest.getLockCode())) { - this.addHotbar(TextColor.RED + "%s ist verschlossen!", chest.getName()); + this.addHotbar(Color.RED + "%s ist verschlossen!", chest.getName()); this.sendPacket(new SPacketSoundEffect(SoundEvent.DOOR, this.entity.posX, this.entity.posY, this.entity.posZ, 1.0F)); return; } @@ -1337,14 +1337,14 @@ public class Player extends User implements Executor, IPlayer BlockPos point = pos == null ? this.entity.getPosition() : pos; String msg = this.selectPoint(point, false); if(msg != null) - this.addHotbar(TextColor.DARK_RED + msg); + this.addHotbar(Color.DARK_RED + msg); } private void selectPos2(BlockPos pos) { BlockPos point = pos == null ? this.entity.getPosition() : pos; String msg = this.selectPoint(point, true); if(msg != null) - this.addHotbar(TextColor.MIDNIGHT + msg); + this.addHotbar(Color.MIDNIGHT + msg); } private String selectPoint(BlockPos position, boolean second) { @@ -1389,7 +1389,7 @@ public class Player extends User implements Executor, IPlayer } if(this.edit == EditAction.TRANSFORM && (this.rotation != 0 || this.flipX || this.flipZ)) msg += "; " + this.getRotationInfo(); - this.addHotbar(TextColor.YELLOW + msg); + this.addHotbar(Color.YELLOW + msg); } private int getSelectionArea() { @@ -1433,7 +1433,7 @@ public class Player extends User implements Executor, IPlayer to = to.add(transform.mulX(this.selOffset.getX(), this.selOffset.getZ()), this.selOffset.getY(), transform.mulZ(this.selOffset.getX(), this.selOffset.getZ())); } placer.commit(); - this.addHotbar(TextColor.YELLOW + "Zwischenablage wurde bei %d, %d, %d eingefügt", to.getX(), to.getY(), to.getZ()); + this.addHotbar(Color.YELLOW + "Zwischenablage wurde bei %d, %d, %d eingefügt", to.getX(), to.getY(), to.getZ()); return true; } @@ -1505,7 +1505,7 @@ public class Player extends User implements Executor, IPlayer this.flipX = this.flipZ = false; BlockPos pos = this.entity.getPosition(); this.selOffset = new Vec3i(mx - pos.getX(), my - pos.getY(), mz - pos.getZ()); - this.addHotbar(TextColor.YELLOW + "Auswahl wurde in die Zwischenablage kopiert"); + this.addHotbar(Color.YELLOW + "Auswahl wurde in die Zwischenablage kopiert"); return true; } @@ -1534,7 +1534,7 @@ public class Player extends User implements Executor, IPlayer else return; String info = this.getRotationInfo(); - this.addHotbar(TextColor.YELLOW + (info.isEmpty() ? "Keine Drehung" : info)); + this.addHotbar(Color.YELLOW + (info.isEmpty() ? "Keine Drehung" : info)); } private void rotateClipboard() { @@ -1542,7 +1542,7 @@ public class Player extends User implements Executor, IPlayer return; this.rotation = (this.rotation + 90) % 360; String info = this.getRotationInfo(); - this.addHotbar(TextColor.YELLOW + (info.isEmpty() ? "Keine Drehung" : info)); + this.addHotbar(Color.YELLOW + (info.isEmpty() ? "Keine Drehung" : info)); } public TagObject readCharacter() { @@ -1576,7 +1576,7 @@ public class Player extends User implements Executor, IPlayer public void onDisconnect(String reason) { - Log.NETWORK.info(this.getUser() + " wurde getrennt: " + TextColor.stripCodes(reason)); + Log.NETWORK.info(this.getUser() + " wurde getrennt: " + Color.stripCodes(reason)); this.server.sendPacket(new SPacketMessage(String.format("%s hat das Spiel verlassen", this.getUser()), Type.FEED)); this.server.removePlayer(this); } @@ -1690,10 +1690,10 @@ public class Player extends User implements Executor, IPlayer Player target = this.server.getPlayer(space < 0 ? line.substring(1) : line.substring(1, space)); if(target == null) return false; - target.addChat(this.entity.getColoredName(TextColor.LIGHT_GRAY) + " -> " + target.entity.getColoredName(TextColor.LIGHT_GRAY) + " " + + target.addChat(this.entity.getColoredName(Color.LIGHT_GRAY) + " -> " + target.entity.getColoredName(Color.LIGHT_GRAY) + " " + line); if(target != this) - this.addChat(target.entity.getColoredName(TextColor.LIGHT_GRAY) + " -> " + this.entity.getColoredName(TextColor.LIGHT_GRAY) + " " + + this.addChat(target.entity.getColoredName(Color.LIGHT_GRAY) + " -> " + this.entity.getColoredName(Color.LIGHT_GRAY) + " " + line); return true; } @@ -1704,7 +1704,7 @@ public class Player extends User implements Executor, IPlayer String str = line.substring(1).trim(); if(str.isEmpty()) return false; - this.server.sendPacket(new SPacketMessage(String.format(TextColor.LIGHT_GRAY + "* %s %s", this.entity.getColoredName(TextColor.LIGHT_GRAY), str), Type.CHAT)); + this.server.sendPacket(new SPacketMessage(String.format(Color.LIGHT_GRAY + "* %s %s", this.entity.getColoredName(Color.LIGHT_GRAY), str), Type.CHAT)); return true; } @@ -1715,7 +1715,7 @@ public class Player extends User implements Executor, IPlayer this.entity.flying &= this.entity.hasEffect(Effect.FLYING) || this.entity.canNaturallyFly(); this.entity.fallDistance = 0.0F; this.sendPlayerAbilities(); - this.addFeed(TextColor.RED + "NoClip wurde deaktiviert"); + this.addFeed(Color.RED + "NoClip wurde deaktiviert"); } } @@ -1873,7 +1873,7 @@ public class Player extends User implements Executor, IPlayer if(this.isAdmin()) this.server.getScriptEnvironment().execute(command, this); else - this.addConsole(TextColor.DARK_RED + "Nur Admins können Befehle ausführen"); + this.addConsole(Color.DARK_RED + "Nur Admins können Befehle ausführen"); } private List completeCommand(String command) { @@ -1891,7 +1891,7 @@ public class Player extends User implements Executor, IPlayer public void log(String msg) { if(this.forcedExec != null) - this.forcedExec.log(TextColor.ACID + "Als " + TextColor.GREEN + "%s" + TextColor.DARK_GRAY + ": " + TextColor.RESET + "%s", this.getUser(), msg); + this.forcedExec.log(Color.ACID + "Als " + Color.GREEN + "%s" + Color.DARK_GRAY + ": " + Color.RESET + "%s", this.getUser(), msg); else this.addConsole(msg); } @@ -1934,7 +1934,7 @@ public class Player extends User implements Executor, IPlayer case CHAT: if(!this.sendPlayer(msg) && !this.sendEmote(msg)) - this.server.sendPacket(new SPacketMessage(String.format("%s %s", this.entity.getColoredName(TextColor.LIGHT_GRAY), msg), Type.CHAT)); + this.server.sendPacket(new SPacketMessage(String.format("%s %s", this.entity.getColoredName(Color.LIGHT_GRAY), msg), Type.CHAT)); break; case DISPLAY: @@ -2653,14 +2653,14 @@ public class Player extends User implements Executor, IPlayer if(this.isAdmin()) { boolean god = !this.entity.hasEffect(Effect.HASTE) || this.entity.getEffect(Effect.HASTE).getAmplifier() != 255; this.entity.setGodMode(god); - this.addFeed(god ? (TextColor.GREEN + "Statuseffekte wurden hinzugefügt") : (TextColor.RED + "Statuseffekte wurden entfernt")); + this.addFeed(god ? (Color.GREEN + "Statuseffekte wurden hinzugefügt") : (Color.RED + "Statuseffekte wurden entfernt")); } break; case NOCLIP: if(this.isAdmin()) { this.entity.setNoclip(!this.entity.noclip); - this.addFeed((this.entity.noclip ? TextColor.GREEN : TextColor.RED) + "NoClip ist jetzt " + (this.entity.noclip ? "eingeschaltet" : "ausgeschaltet")); + this.addFeed((this.entity.noclip ? Color.GREEN : Color.RED) + "NoClip ist jetzt " + (this.entity.noclip ? "eingeschaltet" : "ausgeschaltet")); } break; @@ -2670,7 +2670,7 @@ public class Player extends User implements Executor, IPlayer this.entity.removeEffect(Effect.SPEED); else this.entity.addEffect(new StatusEffect(Effect.SPEED, Integer.MAX_VALUE, 19)); - this.addFeed(TextColor.GREEN + "Deine Geschwindigkeit wurde auf %dx geändert", (int)(this.entity.getAIMoveSpeed() * 10.0f)); + this.addFeed(Color.GREEN + "Deine Geschwindigkeit wurde auf %dx geändert", (int)(this.entity.getAIMoveSpeed() * 10.0f)); // int speed = this.playerEntity.speed != 1.0f ? 1 : 5; // this.playerEntity.speed = (float)speed; // this.playerEntity.sendPlayerAbilities(); @@ -2684,7 +2684,7 @@ public class Player extends User implements Executor, IPlayer this.entity.setHealth(this.entity.getMaxHealth()); this.entity.setManaPoints(this.entity.getMaxMana()); this.entity.clearEffects(true); - this.addFeed(TextColor.DARK_GREEN + "Du wurdest geheilt"); + this.addFeed(Color.DARK_GREEN + "Du wurdest geheilt"); } break; @@ -2745,7 +2745,7 @@ public class Player extends User implements Executor, IPlayer mem = Runtime.getRuntime().freeMemory() - mem; mem = mem < 0L ? 0L : mem; // sender.addConsole("Server-JVM GC ausgeführt: ", ); - this.addFeed(TextColor.DARK_GREEN + "%s%s MB freigegeben, %s MB von %s MB verwendet (%s %%)", worlds > 0 ? worlds + " entladen, " : "", mem / 1024L / 1024L, (Runtime.getRuntime().totalMemory() - + this.addFeed(Color.DARK_GREEN + "%s%s MB freigegeben, %s MB von %s MB verwendet (%s %%)", worlds > 0 ? worlds + " entladen, " : "", mem / 1024L / 1024L, (Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()) / 1024L / 1024L, Runtime.getRuntime().totalMemory() / 1024L / 1024L, Runtime.getRuntime().freeMemory() * 100L / Runtime.getRuntime().maxMemory()); } @@ -2919,11 +2919,11 @@ public class Player extends User implements Executor, IPlayer if(!slot.isItemValid(stack)) return; if(old.getSize() == 1) - this.addFeed(TextColor.DARK_RED + "* %s zerstört", - old.getColoredName(TextColor.DARK_RED)); + this.addFeed(Color.DARK_RED + "* %s zerstört", + old.getColoredName(Color.DARK_RED)); else - this.addFeed(TextColor.DARK_RED + "* %d %s zerstört", old.getSize(), - old.getColoredName(TextColor.DARK_RED)); + this.addFeed(Color.DARK_RED + "* %d %s zerstört", old.getSize(), + old.getColoredName(Color.DARK_RED)); } } else if(!slot.isItemValid(stack)) @@ -2933,11 +2933,11 @@ public class Player extends User implements Executor, IPlayer this.entity.openContainer.detectAndSendChanges(); this.entity.worldObj.playSoundAtEntity(this.entity, SoundEvent.POP, 0.2F); if(amount == 1) - this.addFeed(TextColor.DARK_GREEN + "* %s geschummelt", - stack.getColoredName(TextColor.DARK_GREEN)); + this.addFeed(Color.DARK_GREEN + "* %s geschummelt", + stack.getColoredName(Color.DARK_GREEN)); else - this.addFeed(TextColor.DARK_GREEN + "* %d %s geschummelt", amount, - stack.getColoredName(TextColor.DARK_GREEN)); + this.addFeed(Color.DARK_GREEN + "* %d %s geschummelt", amount, + stack.getColoredName(Color.DARK_GREEN)); } public void processSign(CPacketSign packetIn) @@ -2971,7 +2971,7 @@ public class Player extends User implements Executor, IPlayer // boolean color = this.playerEntity.canUse(Permissions.SIGNFORMAT); for (int i = 0; i < lines.length; ++i) { - tileentitysign.text[i] = TextColor.stripCodes(lines[i]); // lines[i]; // color ? lines[i] : ChatFormat.stripCodes(lines[i]); + tileentitysign.text[i] = Color.stripCodes(lines[i]); // lines[i]; // color ? lines[i] : ChatFormat.stripCodes(lines[i]); } // if(this.signCommand != null) { diff --git a/server/src/main/java/server/world/Converter.java b/server/src/main/java/server/world/Converter.java index e2e21173..d785607c 100644 --- a/server/src/main/java/server/world/Converter.java +++ b/server/src/main/java/server/world/Converter.java @@ -108,7 +108,7 @@ import common.util.BlockPos; import common.util.Facing; import common.util.Facing.Axis; import common.util.NibbleArray; -import common.util.TextColor; +import common.util.Color; import common.world.State; public abstract class Converter { @@ -290,9 +290,9 @@ public abstract class Converter { private static final Map ENTITY_MAP = Maps.newHashMap(); private static final Map> TILE_MAP = Maps.newHashMap(); private static final State[] BLOCK_MAP = new State[65536]; - private static final TextColor[] COLOR_LOOKUP = new TextColor[] { - TextColor.WHITE, TextColor.ORANGE, TextColor.MAGENTA, TextColor.LIGHT_BLUE, TextColor.YELLOW, TextColor.GREEN, TextColor.MAGENTA, TextColor.GRAY, - TextColor.LIGHT_GRAY, TextColor.CYAN, TextColor.VIOLET, TextColor.BLUE, TextColor.BROWN, TextColor.DARK_GREEN, TextColor.RED, TextColor.BLACK + private static final Color[] COLOR_LOOKUP = new Color[] { + Color.WHITE, Color.ORANGE, Color.MAGENTA, Color.LIGHT_BLUE, Color.YELLOW, Color.GREEN, Color.MAGENTA, Color.GRAY, + Color.LIGHT_GRAY, Color.CYAN, Color.VIOLET, Color.BLUE, Color.BROWN, Color.DARK_GREEN, Color.RED, Color.BLACK }; private static void mapEntity(Class clazz, String ... names) {