From 441d475e6e9798fb345876196bd2ee04ac4133d3 Mon Sep 17 00:00:00 2001 From: Daniel Date: Thu, 25 Jul 2024 22:15:05 +0300 Subject: [PATCH] updated textures, better logic --- .../lumiscope/items/radars/LongRadar.java | 28 ++++++---- .../lumiscope/items/radars/ShortRadar.java | 52 +++++++++++++----- .../lumiscope/textures/items/long_radar.png | Bin 238 -> 773 bytes .../lumiscope/textures/items/short_radar.png | Bin 238 -> 704 bytes 4 files changed, 53 insertions(+), 27 deletions(-) diff --git a/src/main/java/com/lumijiez/lumiscope/items/radars/LongRadar.java b/src/main/java/com/lumijiez/lumiscope/items/radars/LongRadar.java index 39cd22a..29f517b 100644 --- a/src/main/java/com/lumijiez/lumiscope/items/radars/LongRadar.java +++ b/src/main/java/com/lumijiez/lumiscope/items/radars/LongRadar.java @@ -23,6 +23,7 @@ public class LongRadar extends ItemBase { public LongRadar() { super("long_radar"); setMaxStackSize(1); + setMaxDamage(100); } @Override @@ -41,51 +42,54 @@ public class LongRadar extends ItemBase { @Override public ActionResult onItemRightClick(World world, EntityPlayer player, EnumHand hand) { if (!world.isRemote) { - StringBuilder message = new StringBuilder(); - boolean playerNearby = false; + player.getHeldItem(hand).damageItem(1, player); - ITextComponent warningMessage = new TextComponentString("WARNING: Cannot detect players less than 500 meters from you!") + ITextComponent warningMessage = new TextComponentString("WARNING: Cannot detect players less than 300 meters from you!") .setStyle(new Style().setColor(TextFormatting.RED)); player.sendMessage(warningMessage); + boolean playerNearby = false; + for (EntityPlayer otherPlayer : world.playerEntities) { if (!otherPlayer.equals(player)) { - playerNearby = true; - double deltaX = otherPlayer.posX - player.posX; double deltaZ = otherPlayer.posZ - player.posZ; double distance = Math.sqrt(deltaX * deltaX + deltaZ * deltaZ); - if (distance <= 500) continue; + if (distance <= 300) continue; double angle = Math.atan2(deltaZ, deltaX); double angleDegrees = Math.toDegrees(angle) - 90; angleDegrees = (angleDegrees + 360) % 360; + angleDegrees = (angleDegrees > 180) ? angleDegrees - 360 : angleDegrees; + double margin = RANDOM.nextDouble() * 20; double halfMargin = margin / 2; double startAngle = (angleDegrees - halfMargin + 360) % 360; + startAngle = (startAngle > 180) ? startAngle - 360 : startAngle; + double endAngle = (angleDegrees + halfMargin + 360) % 360; + endAngle = (endAngle > 180) ? endAngle - 360 : endAngle; String distanceMessage = distance > 50000 ? " (very far)" : ""; ITextComponent intervalMessage; if (startAngle > endAngle) { - intervalMessage = new TextComponentString(String.format("Look in the interval (%.1f - %.1f degrees)%s", startAngle, endAngle, distanceMessage)) + intervalMessage = new TextComponentString(String.format("Look in the interval of %.1f - %.1f degrees%s", startAngle, endAngle, distanceMessage)) .setStyle(new Style().setColor(TextFormatting.GREEN)); } else { - intervalMessage = new TextComponentString(String.format("Look in the interval (%.1f - %.1f degrees)%s", startAngle, endAngle, distanceMessage)) + intervalMessage = new TextComponentString(String.format("Look in the interval of %.1f - %.1f degrees%s", startAngle, endAngle, distanceMessage)) .setStyle(new Style().setColor(TextFormatting.GREEN)); } - message.append(intervalMessage.getFormattedText()).append("\n"); + player.sendMessage(intervalMessage); + playerNearby = true; } } - if (playerNearby) { - player.sendMessage(new TextComponentString(message.toString())); - } else { + if (!playerNearby) { ITextComponent noPlayersMessage = new TextComponentString("No other players found.") .setStyle(new Style().setColor(TextFormatting.GRAY)); player.sendMessage(noPlayersMessage); diff --git a/src/main/java/com/lumijiez/lumiscope/items/radars/ShortRadar.java b/src/main/java/com/lumijiez/lumiscope/items/radars/ShortRadar.java index 43f9e0e..e9abea4 100644 --- a/src/main/java/com/lumijiez/lumiscope/items/radars/ShortRadar.java +++ b/src/main/java/com/lumijiez/lumiscope/items/radars/ShortRadar.java @@ -7,6 +7,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.ActionResult; import net.minecraft.util.EnumActionResult; import net.minecraft.util.EnumHand; +import net.minecraft.util.math.MathHelper; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.Style; import net.minecraft.util.text.TextComponentString; @@ -20,6 +21,7 @@ public class ShortRadar extends ItemBase { public ShortRadar() { super("short_radar"); setMaxStackSize(1); + setMaxDamage(70); } @Override @@ -34,29 +36,49 @@ public class ShortRadar extends ItemBase { @Override public ActionResult onItemRightClick(World world, EntityPlayer player, EnumHand hand) { if (!world.isRemote) { + player.getHeldItem(hand).damageItem(1, player); + boolean playerNearby = false; - ITextComponent message; - if (isPlayerNearby(world, player)) { - message = new TextComponentString("There are players within 200 meters!") - .setStyle(new Style().setColor(TextFormatting.GREEN)); - } else { - message = new TextComponentString("No players within 200 meters.") - .setStyle(new Style().setColor(TextFormatting.RED)); + for (EntityPlayer otherPlayer : world.playerEntities) { + if (!otherPlayer.equals(player) && player.getDistance(otherPlayer) <= 100) { + playerNearby = true; + String direction = getPlayerDirection(player, otherPlayer); + ITextComponent message = new TextComponentString(otherPlayer.getName() + " to the " + direction + "!") + .setStyle(new Style().setColor(TextFormatting.GREEN)); + player.sendMessage(message); + } } - player.sendMessage(message); - player.getCooldownTracker().setCooldown(this, 1200); + if (!playerNearby) { + ITextComponent noPlayersMessage = new TextComponentString("No players within 100 meters.") + .setStyle(new Style().setColor(TextFormatting.RED)); + player.sendMessage(noPlayersMessage); + } + + player.getCooldownTracker().setCooldown(this, 200); } return new ActionResult<>(EnumActionResult.SUCCESS, player.getHeldItem(hand)); } - private boolean isPlayerNearby(World world, EntityPlayer player) { - for (EntityPlayer otherPlayer : world.playerEntities) { - if (!otherPlayer.equals(player) && player.getDistance(otherPlayer) <= 200) { - return true; - } + private String getPlayerDirection(EntityPlayer player, EntityPlayer otherPlayer) { + double deltaX = otherPlayer.posX - player.posX; + double deltaZ = otherPlayer.posZ - player.posZ; + double angle = MathHelper.atan2(deltaZ, deltaX) * (180 / Math.PI) - 90; + if (angle < 0) { + angle += 360; } - return false; + + angle = (angle + 180) % 360; + + if (angle >= 337.5 || angle < 22.5) return "north"; + if (angle >= 22.5 && angle < 67.5) return "northeast"; + if (angle >= 67.5 && angle < 112.5) return "east"; + if (angle >= 112.5 && angle < 157.5) return "southeast"; + if (angle >= 157.5 && angle < 202.5) return "south"; + if (angle >= 202.5 && angle < 247.5) return "southwest"; + if (angle >= 247.5 && angle < 292.5) return "west"; + if (angle >= 292.5) return "northwest"; + return "unknown direction"; } } diff --git a/src/main/resources/assets/lumiscope/textures/items/long_radar.png b/src/main/resources/assets/lumiscope/textures/items/long_radar.png index 37947cca3651a1af60775a2c71c9189ef7336321..895b2b0b7772438c806bca4b0df01d607e9fef97 100644 GIT binary patch delta 732 zcmV<20wewI0fh#T83+ad001BJ|6!3KAb$yPNLh0L092I#092I$7uTf20007-Nkl1PlWHJd#Nxaa$5N7TAUR&5!Xr?8yAEpwo{6|%H8?=yJX|9pL=eOYmVYvfV#YWR zyab}cBVev5NB!e2kARfFY)x(sjj)!LpVyNw?@RDzOdUr-`W2+yqa>)}ktV>NoPj5fWeS`Sg)c6-0F9-H74rXOZm1ZH3V(Ii>1NaV9$sNYXWJp8+ O000062fI-Te*$pVfS>O>_%)r2R7=#&*=dVZs3i^AxIEH8h&+WU-*I>ZmeBA2y z|M@ygoqId==e=Q4KYL?=MC)m*B(;Z8*0ZCoMw|(FA++(Q-yXgD4*rhZKjd#P@#|bW mH1Wm1*%MZ}`0q4UsbsqFoOx;M%34RD*$kepelF{r5}E)a3QA1? diff --git a/src/main/resources/assets/lumiscope/textures/items/short_radar.png b/src/main/resources/assets/lumiscope/textures/items/short_radar.png index c7a34bbef3044c0a18e13110a087cabcc435a43a..e480d1b7f979290e9db56d637bbed7aecd955447 100644 GIT binary patch delta 663 zcmV;I0%-m20l)>283+ad001BJ|6!3KAb$yPNLh0L092I#092I$7uTf200072Nkl1vJngFi_$Go{qBFd--nD?!7EqJ)H!T@>hrb`^A0 zcu@$VU>7n3!_q=5$sh^?gG{Xqr%gnz-0aBCPoxxWGf3V#V5T|GE;tW3}-27cd{hLr#? zG5G;Yx@G8oL||pc578nb;E@mVi0~~gV)-Gl(~*VQkK^cm^c<6KM;jGAvVW89at&VI zXlSNBOizT%eXt3PZ#GgYkqBL|k>&f#NWYios!ynEMJpS(p6^KN?^r>EYt>rN{R zoH@K&dxcXIW9)u#p9RGwDt}La`YL}=ez=6WDcflZm&=z4Nj3*ByIk~n=h@P7o2eO@ zYF-JWC^B)Ab*;fK?90n%zTL_QL145YmbO$UrHGBHFh(meDaNu+81ieTW#w?2NkZv? xT)2CmVCeN2eBQagf8$U%Sy2(X)PD!yCsuX>tUQsR2mk;807*qoL@@94e3UL;AL>4nJ@ErzW#^d=bQhZu2!5a5x{g`u%^t z&Qj;zPW^drnAFeSSRm1Q+A2xyVU+dksH+iY0$vDh{OPwx@4kb-Bli#a8%+E<*A7j5 k@o)Bol`j4}ja4d{E<9&m+PbpV5ok7pr>mdKI;Vst0H-ubn*aa+