diff --git a/src/main/java/de/ellpeck/naturesaura/items/ItemRangeVisualizer.java b/src/main/java/de/ellpeck/naturesaura/items/ItemRangeVisualizer.java index fa1bdcc6..823b5563 100644 --- a/src/main/java/de/ellpeck/naturesaura/items/ItemRangeVisualizer.java +++ b/src/main/java/de/ellpeck/naturesaura/items/ItemRangeVisualizer.java @@ -2,25 +2,24 @@ package de.ellpeck.naturesaura.items; import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.ListMultimap; +import de.ellpeck.naturesaura.NaturesAura; import de.ellpeck.naturesaura.api.render.IVisualizable; -import de.ellpeck.naturesaura.blocks.BlockDimensionRail; import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; +import net.minecraft.util.ActionResult; import net.minecraft.util.EnumActionResult; import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumHand; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.TextComponentTranslation; import net.minecraft.world.World; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.entity.player.PlayerInteractEvent; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; -import java.util.HashSet; -import java.util.Set; - public class ItemRangeVisualizer extends ItemImpl { public static final ListMultimap VISUALIZED_BLOCKS = ArrayListMultimap.create(); @@ -29,20 +28,29 @@ public class ItemRangeVisualizer extends ItemImpl { public ItemRangeVisualizer() { super("range_visualizer"); + this.setMaxStackSize(1); + MinecraftForge.EVENT_BUS.register(this); } + @Override + public ActionResult onItemRightClick(World worldIn, EntityPlayer playerIn, EnumHand handIn) { + ItemStack stack = playerIn.getHeldItem(handIn); + if (playerIn.isSneaking()) { + clear(); + playerIn.sendStatusMessage(new TextComponentTranslation("info." + NaturesAura.MOD_ID + ".range_visualizer.end_all"), true); + return new ActionResult<>(EnumActionResult.SUCCESS, stack); + } + return new ActionResult<>(EnumActionResult.PASS, stack); + } + @Override public EnumActionResult onItemUse(EntityPlayer player, World worldIn, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) { IBlockState state = worldIn.getBlockState(pos); Block block = state.getBlock(); if (block instanceof IVisualizable) { - int dim = worldIn.provider.getDimension(); if (worldIn.isRemote) - if (VISUALIZED_BLOCKS.containsEntry(dim, pos)) - VISUALIZED_BLOCKS.remove(dim, pos); - else - VISUALIZED_BLOCKS.put(dim, pos); + visualize(player, VISUALIZED_BLOCKS, worldIn.provider.getDimension(), pos); return EnumActionResult.SUCCESS; } return EnumActionResult.PASS; @@ -57,6 +65,16 @@ public class ItemRangeVisualizer extends ItemImpl { VISUALIZED_RAILS.clear(); } + public static void visualize(EntityPlayer player, ListMultimap map, int dim, T value) { + if (map.containsEntry(dim, value)) { + map.remove(dim, value); + player.sendStatusMessage(new TextComponentTranslation("info." + NaturesAura.MOD_ID + ".range_visualizer.end"), true); + } else { + map.put(dim, value); + player.sendStatusMessage(new TextComponentTranslation("info." + NaturesAura.MOD_ID + ".range_visualizer.start"), true); + } + } + @SubscribeEvent public void onInteract(PlayerInteractEvent.EntityInteractSpecific event) { ItemStack stack = event.getItemStack(); @@ -66,10 +84,7 @@ public class ItemRangeVisualizer extends ItemImpl { if (entity instanceof IVisualizable) { if (entity.world.isRemote) { int dim = entity.world.provider.getDimension(); - if (VISUALIZED_ENTITIES.containsEntry(dim, entity)) - VISUALIZED_ENTITIES.remove(dim, entity); - else - VISUALIZED_ENTITIES.put(dim, entity); + visualize(event.getEntityPlayer(), VISUALIZED_ENTITIES, dim, entity); } event.getEntityPlayer().swingArm(event.getHand()); event.setCancellationResult(EnumActionResult.SUCCESS); diff --git a/src/main/java/de/ellpeck/naturesaura/packet/PacketClient.java b/src/main/java/de/ellpeck/naturesaura/packet/PacketClient.java index a1fe482d..88304989 100644 --- a/src/main/java/de/ellpeck/naturesaura/packet/PacketClient.java +++ b/src/main/java/de/ellpeck/naturesaura/packet/PacketClient.java @@ -5,7 +5,6 @@ import de.ellpeck.naturesaura.items.ItemRangeVisualizer; import io.netty.buffer.ByteBuf; import net.minecraft.client.Minecraft; import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; import net.minecraftforge.fml.common.network.simpleimpl.IMessage; import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler; import net.minecraftforge.fml.common.network.simpleimpl.MessageContext; @@ -48,17 +47,13 @@ public class PacketClient implements IMessage { @SideOnly(Side.CLIENT) public IMessage onMessage(PacketClient message, MessageContext ctx) { NaturesAura.proxy.scheduleTask(() -> { - World world = Minecraft.getMinecraft().world; - if (world != null) { + Minecraft mc = Minecraft.getMinecraft(); + if (mc.world != null) { switch (message.type) { case 0: // dimension rail visualization int goalDim = message.data[0]; BlockPos goalPos = new BlockPos(message.data[1], message.data[2], message.data[3]); - if (ItemRangeVisualizer.VISUALIZED_RAILS.containsEntry(goalDim, goalPos)) - ItemRangeVisualizer.VISUALIZED_RAILS.remove(goalDim, goalPos); - else - ItemRangeVisualizer.VISUALIZED_RAILS.put(goalDim, goalPos); - break; + ItemRangeVisualizer.visualize(mc.player, ItemRangeVisualizer.VISUALIZED_RAILS, goalDim, goalPos); } } }); diff --git a/src/main/resources/assets/naturesaura/lang/en_US.lang b/src/main/resources/assets/naturesaura/lang/en_US.lang index c83bf6ef..80b63475 100644 --- a/src/main/resources/assets/naturesaura/lang/en_US.lang +++ b/src/main/resources/assets/naturesaura/lang/en_US.lang @@ -105,8 +105,8 @@ container.naturesaura.animal_spawner.name=Altar of Birthing info.naturesaura.aura_in_area=Aura Around info.naturesaura.book.landing=$(aura) is a complicated matter, and creating, collecting and making use of it can be difficult.$(br)The $(item)Book of Natural Aura$() contains all the information one requires to do so. info.naturesaura.book.subtitle=The guide to Nature's Aura -info.naturesaura.stored_pos=You jotted down the position -info.naturesaura.connected=You made a connection +info.naturesaura.stored_pos=You jot down the position +info.naturesaura.connected=You make a connection info.naturesaura.same_position=This seems to be the position from your notes... info.naturesaura.too_far=The distance seems too great... info.naturesaura.stored_pos_gone=Your notes seem out of date... @@ -115,6 +115,9 @@ info.naturesaura.ender_crate=Ender Crate: %s info.naturesaura.ender_access=Ender Ocular: %s info.naturesaura.ender_name.missing=No Ender Name info.naturesaura.ender_name=Ender Name: %s +info.naturesaura.range_visualizer.start=You take note of the magnification... +info.naturesaura.range_visualizer.end=You lose focus of the magnification... +info.naturesaura.range_visualizer.end_all=You lose focus of all magnifications... advancement.naturesaura.root=Nature's Aura advancement.naturesaura.root.desc=Becoming a magical botanist