mirror of
https://github.com/Creators-of-Create/Create.git
synced 2024-12-28 16:06:48 +01:00
Display Arm Interaction Points
- placed mechanical arms will show their in/out puts if you look at them while holding a wrench
This commit is contained in:
parent
5cf3dde0a1
commit
957f9355b7
1 changed files with 54 additions and 7 deletions
|
@ -6,6 +6,7 @@ import java.util.Map;
|
|||
import java.util.Map.Entry;
|
||||
|
||||
import com.simibubi.create.AllBlocks;
|
||||
import com.simibubi.create.AllItems;
|
||||
import com.simibubi.create.CreateClient;
|
||||
import com.simibubi.create.content.logistics.block.mechanicalArm.ArmInteractionPoint.Mode;
|
||||
import com.simibubi.create.foundation.networking.AllPackets;
|
||||
|
@ -14,11 +15,15 @@ import net.minecraft.block.BlockState;
|
|||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.entity.player.PlayerEntity;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.ActionResultType;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.math.BlockRayTraceResult;
|
||||
import net.minecraft.util.math.RayTraceResult;
|
||||
import net.minecraft.util.math.shapes.VoxelShape;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.api.distmarker.Dist;
|
||||
import net.minecraftforge.client.event.RenderWorldLastEvent;
|
||||
import net.minecraftforge.event.entity.player.PlayerInteractEvent;
|
||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||
import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
|
||||
|
@ -29,6 +34,8 @@ public class ArmInteractionPointHandler {
|
|||
static Map<BlockPos, ArmInteractionPoint> currentSelection = new HashMap<>();
|
||||
static ItemStack currentItem;
|
||||
|
||||
static long lastBlockPos = -1;
|
||||
|
||||
@SubscribeEvent
|
||||
public static void rightClickingBlocksSelectsThem(PlayerInteractEvent.RightClickBlock event) {
|
||||
if (currentItem == null)
|
||||
|
@ -74,21 +81,61 @@ public class ArmInteractionPointHandler {
|
|||
|
||||
public static void tick() {
|
||||
PlayerEntity player = Minecraft.getInstance().player;
|
||||
World world = Minecraft.getInstance().world;
|
||||
|
||||
if (player == null)
|
||||
return;
|
||||
|
||||
ItemStack heldItemMainhand = player.getHeldItemMainhand();
|
||||
if (!AllBlocks.MECHANICAL_ARM.isIn(heldItemMainhand)) {
|
||||
currentItem = null;
|
||||
return;
|
||||
}
|
||||
if (heldItemMainhand != currentItem) {
|
||||
currentSelection.clear();
|
||||
currentItem = heldItemMainhand;
|
||||
} else {
|
||||
if (heldItemMainhand != currentItem) {
|
||||
currentSelection.clear();
|
||||
currentItem = heldItemMainhand;
|
||||
}
|
||||
|
||||
drawOutlines(currentSelection);
|
||||
}
|
||||
|
||||
for (Iterator<Entry<BlockPos, ArmInteractionPoint>> iterator = currentSelection.entrySet()
|
||||
checkForWrench(heldItemMainhand);
|
||||
}
|
||||
|
||||
private static void checkForWrench(ItemStack heldItem) {
|
||||
if(!AllItems.WRENCH.isIn(heldItem)) {
|
||||
return;
|
||||
}
|
||||
|
||||
RayTraceResult objectMouseOver = Minecraft.getInstance().objectMouseOver;
|
||||
if (!(objectMouseOver instanceof BlockRayTraceResult)) {
|
||||
return;
|
||||
}
|
||||
|
||||
BlockRayTraceResult result = (BlockRayTraceResult) objectMouseOver;
|
||||
BlockPos pos = result.getPos();
|
||||
|
||||
TileEntity te = Minecraft.getInstance().world.getTileEntity(pos);
|
||||
if (!(te instanceof ArmTileEntity)) {
|
||||
lastBlockPos = -1;
|
||||
currentSelection.clear();
|
||||
return;
|
||||
}
|
||||
|
||||
if (lastBlockPos == -1 || lastBlockPos != pos.toLong()) {
|
||||
currentSelection.clear();
|
||||
ArmTileEntity arm = (ArmTileEntity) te;
|
||||
arm.inputs.forEach(point -> currentSelection.put(point.pos, point));
|
||||
arm.outputs.forEach(point -> currentSelection.put(point.pos, point));
|
||||
lastBlockPos = pos.toLong();
|
||||
}
|
||||
|
||||
if (lastBlockPos != -1) {
|
||||
drawOutlines(currentSelection);
|
||||
}
|
||||
}
|
||||
|
||||
private static void drawOutlines(Map<BlockPos, ArmInteractionPoint> selection) {
|
||||
World world = Minecraft.getInstance().world;
|
||||
for (Iterator<Entry<BlockPos, ArmInteractionPoint>> iterator = selection.entrySet()
|
||||
.iterator(); iterator.hasNext();) {
|
||||
Entry<BlockPos, ArmInteractionPoint> entry = iterator.next();
|
||||
BlockPos pos = entry.getKey();
|
||||
|
|
Loading…
Reference in a new issue