Fixed issue #21: "Placement Exceeds Your Reach" message displays when a block is placed in survival with 0 range upgrades.
Fixed issue #22: Sometimes two blocks are placed at once when in regular build mode. Fixed mouse clicks in Modifier Settings sometimes being in the wrong place. Fixed typing in multiple text fields at once. Added diagonal line, wall, slope floor and cube icons. Added undo, redo, replace and 'open modifier settings' buttons. (Only last 2 work for now).
@@ -11,7 +11,7 @@ apply plugin: 'net.minecraftforge.gradle.forge'
|
|||||||
//Only edit below this line, the above code adds and enables the necessary things for Forge to be setup.
|
//Only edit below this line, the above code adds and enables the necessary things for Forge to be setup.
|
||||||
|
|
||||||
|
|
||||||
version = "1.12.2-2.2"
|
version = "1.12.2-2.4"
|
||||||
group = "nl.requios.effortlessbuilding" // http://maven.apache.org/guides/mini/guide-naming-conventions.html
|
group = "nl.requios.effortlessbuilding" // http://maven.apache.org/guides/mini/guide-naming-conventions.html
|
||||||
archivesBaseName = "effortlessbuilding"
|
archivesBaseName = "effortlessbuilding"
|
||||||
|
|
||||||
|
|||||||
@@ -55,7 +55,7 @@ public class BuildConfig {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static class Visuals {
|
public static class Visuals {
|
||||||
@Comment({"Show a block preview if you have a block in hand on build mode Normal"})
|
@Comment({"Show a block preview if you have a block in hand on build mode NORMAL"})
|
||||||
public boolean alwaysShowBlockPreview = false;
|
public boolean alwaysShowBlockPreview = false;
|
||||||
|
|
||||||
@Comment({"How long the dissolve effect takes when placing blocks.",
|
@Comment({"How long the dissolve effect takes when placing blocks.",
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ public class EffortlessBuilding
|
|||||||
{
|
{
|
||||||
public static final String MODID = "effortlessbuilding";
|
public static final String MODID = "effortlessbuilding";
|
||||||
public static final String NAME = "Effortless Building";
|
public static final String NAME = "Effortless Building";
|
||||||
public static final String VERSION = "1.12.2-2.2";
|
public static final String VERSION = "1.12.2-2.4";
|
||||||
|
|
||||||
@Mod.Instance(EffortlessBuilding.MODID)
|
@Mod.Instance(EffortlessBuilding.MODID)
|
||||||
public static EffortlessBuilding instance;
|
public static EffortlessBuilding instance;
|
||||||
@@ -86,14 +86,17 @@ public class EffortlessBuilding
|
|||||||
EffortlessBuilding.packetHandler.registerMessage(ModeSettingsMessage.MessageHandler.class, ModeSettingsMessage.class, 1, Side.SERVER);
|
EffortlessBuilding.packetHandler.registerMessage(ModeSettingsMessage.MessageHandler.class, ModeSettingsMessage.class, 1, Side.SERVER);
|
||||||
EffortlessBuilding.packetHandler.registerMessage(ModeSettingsMessage.MessageHandler.class, ModeSettingsMessage.class, 1, Side.CLIENT);
|
EffortlessBuilding.packetHandler.registerMessage(ModeSettingsMessage.MessageHandler.class, ModeSettingsMessage.class, 1, Side.CLIENT);
|
||||||
|
|
||||||
EffortlessBuilding.packetHandler.registerMessage(BlockPlacedMessage.MessageHandler.class, BlockPlacedMessage.class, 2, Side.SERVER);
|
EffortlessBuilding.packetHandler.registerMessage(ModeActionMessage.MessageHandler.class, ModeActionMessage.class, 2, Side.SERVER);
|
||||||
EffortlessBuilding.packetHandler.registerMessage(BlockPlacedMessage.MessageHandler.class, BlockPlacedMessage.class, 2, Side.CLIENT);
|
EffortlessBuilding.packetHandler.registerMessage(ModeActionMessage.MessageHandler.class, ModeActionMessage.class, 2, Side.CLIENT);
|
||||||
|
|
||||||
EffortlessBuilding.packetHandler.registerMessage(BlockBrokenMessage.MessageHandler.class, BlockBrokenMessage.class, 3, Side.SERVER);
|
EffortlessBuilding.packetHandler.registerMessage(BlockPlacedMessage.MessageHandler.class, BlockPlacedMessage.class, 3, Side.SERVER);
|
||||||
|
EffortlessBuilding.packetHandler.registerMessage(BlockPlacedMessage.MessageHandler.class, BlockPlacedMessage.class, 3, Side.CLIENT);
|
||||||
|
|
||||||
EffortlessBuilding.packetHandler.registerMessage(CancelModeMessage.MessageHandler.class, CancelModeMessage.class, 4, Side.SERVER);
|
EffortlessBuilding.packetHandler.registerMessage(BlockBrokenMessage.MessageHandler.class, BlockBrokenMessage.class, 4, Side.SERVER);
|
||||||
|
|
||||||
EffortlessBuilding.packetHandler.registerMessage(RequestLookAtMessage.MessageHandler.class, RequestLookAtMessage.class, 5, Side.CLIENT);
|
EffortlessBuilding.packetHandler.registerMessage(CancelModeMessage.MessageHandler.class, CancelModeMessage.class, 5, Side.SERVER);
|
||||||
|
|
||||||
|
EffortlessBuilding.packetHandler.registerMessage(RequestLookAtMessage.MessageHandler.class, RequestLookAtMessage.class, 6, Side.CLIENT);
|
||||||
|
|
||||||
proxy.preInit(event);
|
proxy.preInit(event);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ import net.minecraft.entity.player.EntityPlayerMP;
|
|||||||
import net.minecraft.item.Item;
|
import net.minecraft.item.Item;
|
||||||
import net.minecraft.item.ItemBlock;
|
import net.minecraft.item.ItemBlock;
|
||||||
import net.minecraft.util.ResourceLocation;
|
import net.minecraft.util.ResourceLocation;
|
||||||
import net.minecraft.util.SoundEvent;
|
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
import net.minecraftforge.common.config.Config;
|
import net.minecraftforge.common.config.Config;
|
||||||
@@ -19,7 +18,6 @@ import net.minecraftforge.event.entity.player.PlayerEvent;
|
|||||||
import net.minecraftforge.event.world.BlockEvent;
|
import net.minecraftforge.event.world.BlockEvent;
|
||||||
import net.minecraftforge.fml.client.event.ConfigChangedEvent;
|
import net.minecraftforge.fml.client.event.ConfigChangedEvent;
|
||||||
import net.minecraftforge.fml.common.Mod;
|
import net.minecraftforge.fml.common.Mod;
|
||||||
import net.minecraftforge.fml.common.eventhandler.Event;
|
|
||||||
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
||||||
import nl.requios.effortlessbuilding.buildmode.BuildModes;
|
import nl.requios.effortlessbuilding.buildmode.BuildModes;
|
||||||
import nl.requios.effortlessbuilding.buildmode.ModeSettingsManager;
|
import nl.requios.effortlessbuilding.buildmode.ModeSettingsManager;
|
||||||
@@ -29,7 +27,6 @@ import nl.requios.effortlessbuilding.capability.ModeCapabilityManager;
|
|||||||
import nl.requios.effortlessbuilding.capability.ModifierCapabilityManager;
|
import nl.requios.effortlessbuilding.capability.ModifierCapabilityManager;
|
||||||
import nl.requios.effortlessbuilding.helper.ReachHelper;
|
import nl.requios.effortlessbuilding.helper.ReachHelper;
|
||||||
import nl.requios.effortlessbuilding.helper.SurvivalHelper;
|
import nl.requios.effortlessbuilding.helper.SurvivalHelper;
|
||||||
import nl.requios.effortlessbuilding.network.BlockPlacedMessage;
|
|
||||||
import nl.requios.effortlessbuilding.network.RequestLookAtMessage;
|
import nl.requios.effortlessbuilding.network.RequestLookAtMessage;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -87,10 +84,10 @@ public class EventHandler
|
|||||||
BuildModes.BuildModeEnum buildMode = ModeSettingsManager.getModeSettings(player).getBuildMode();
|
BuildModes.BuildModeEnum buildMode = ModeSettingsManager.getModeSettings(player).getBuildMode();
|
||||||
ModifierSettingsManager.ModifierSettings modifierSettings = ModifierSettingsManager.getModifierSettings(player);
|
ModifierSettingsManager.ModifierSettings modifierSettings = ModifierSettingsManager.getModifierSettings(player);
|
||||||
|
|
||||||
if (buildMode != BuildModes.BuildModeEnum.Normal || modifierSettings.doQuickReplace()) {
|
if (buildMode != BuildModes.BuildModeEnum.NORMAL || modifierSettings.doQuickReplace()) {
|
||||||
event.setCanceled(true);
|
event.setCanceled(true);
|
||||||
} else {
|
} else {
|
||||||
//Normal mode, let vanilla handle block placing
|
//NORMAL mode, let vanilla handle block placing
|
||||||
//But modifiers and QuickReplace should still work
|
//But modifiers and QuickReplace should still work
|
||||||
|
|
||||||
//Send message to client, which sends message back with raytrace info
|
//Send message to client, which sends message back with raytrace info
|
||||||
@@ -105,10 +102,10 @@ public class EventHandler
|
|||||||
//Cancel event if necessary
|
//Cancel event if necessary
|
||||||
//If cant break far then dont cancel event ever
|
//If cant break far then dont cancel event ever
|
||||||
BuildModes.BuildModeEnum buildMode = ModeSettingsManager.getModeSettings(event.getPlayer()).getBuildMode();
|
BuildModes.BuildModeEnum buildMode = ModeSettingsManager.getModeSettings(event.getPlayer()).getBuildMode();
|
||||||
if (buildMode != BuildModes.BuildModeEnum.Normal && ReachHelper.canBreakFar(event.getPlayer())) {
|
if (buildMode != BuildModes.BuildModeEnum.NORMAL && ReachHelper.canBreakFar(event.getPlayer())) {
|
||||||
event.setCanceled(true);
|
event.setCanceled(true);
|
||||||
} else {
|
} else {
|
||||||
//Normal mode, let vanilla handle block breaking
|
//NORMAL mode, let vanilla handle block breaking
|
||||||
//But modifiers and QuickReplace should still work
|
//But modifiers and QuickReplace should still work
|
||||||
//Dont break the original block yourself, otherwise Tinkers Hammer and Veinminer won't work
|
//Dont break the original block yourself, otherwise Tinkers Hammer and Veinminer won't work
|
||||||
BuildModes.onBlockBroken(event.getPlayer(), event.getPos(), false);
|
BuildModes.onBlockBroken(event.getPlayer(), event.getPos(), false);
|
||||||
|
|||||||
@@ -1,12 +1,10 @@
|
|||||||
package nl.requios.effortlessbuilding.buildmode;
|
package nl.requios.effortlessbuilding.buildmode;
|
||||||
|
|
||||||
import net.minecraft.block.state.IBlockState;
|
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
import net.minecraft.util.EnumFacing;
|
import net.minecraft.util.EnumFacing;
|
||||||
import net.minecraft.util.EnumHand;
|
import net.minecraft.util.EnumHand;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.util.math.Vec3d;
|
import net.minecraft.util.math.Vec3d;
|
||||||
import net.minecraftforge.event.world.BlockEvent;
|
|
||||||
import nl.requios.effortlessbuilding.EffortlessBuilding;
|
import nl.requios.effortlessbuilding.EffortlessBuilding;
|
||||||
import nl.requios.effortlessbuilding.buildmodifier.*;
|
import nl.requios.effortlessbuilding.buildmodifier.*;
|
||||||
import nl.requios.effortlessbuilding.compatibility.CompatHelper;
|
import nl.requios.effortlessbuilding.compatibility.CompatHelper;
|
||||||
@@ -28,15 +26,15 @@ public class BuildModes {
|
|||||||
public static Dictionary<EntityPlayer, Boolean> currentlyBreakingServer = new Hashtable<>();
|
public static Dictionary<EntityPlayer, Boolean> currentlyBreakingServer = new Hashtable<>();
|
||||||
|
|
||||||
public enum BuildModeEnum {
|
public enum BuildModeEnum {
|
||||||
Normal ("Normal", new Normal()),
|
NORMAL("effortlessbuilding.mode.normal", new Normal()),
|
||||||
NormalPlus ("Normal+", new NormalPlus()),
|
NORMAL_PLUS("effortlessbuilding.mode.normal_plus", new NormalPlus()),
|
||||||
Line ("Line", new Line()),
|
LINE("effortlessbuilding.mode.line", new Line()),
|
||||||
Wall ("Wall", new Wall()),
|
WALL("effortlessbuilding.mode.wall", new Wall()),
|
||||||
Floor ("Floor", new Floor()),
|
FLOOR("effortlessbuilding.mode.floor", new Floor()),
|
||||||
DiagonalLine ("", new DiagonalLine()),
|
DIAGONAL_LINE("effortlessbuilding.mode.diagonal_line", new DiagonalLine()),
|
||||||
DiagonalWall ("", new DiagonalWall()),
|
DIAGONAL_WALL("effortlessbuilding.mode.diagonal_wall", new DiagonalWall()),
|
||||||
SlopeFloor ("", new SlopeFloor()),
|
SLOPE_FLOOR("effortlessbuilding.mode.slope_floor", new SlopeFloor()),
|
||||||
Cube ("", new Cube());
|
CUBE("effortlessbuilding.mode.cube", new Cube());
|
||||||
|
|
||||||
public String name;
|
public String name;
|
||||||
public IBuildMode instance;
|
public IBuildMode instance;
|
||||||
@@ -83,7 +81,7 @@ public class BuildModes {
|
|||||||
|
|
||||||
//Check if player reach does not exceed startpos
|
//Check if player reach does not exceed startpos
|
||||||
int maxReach = ReachHelper.getMaxReach(player);
|
int maxReach = ReachHelper.getMaxReach(player);
|
||||||
if (player.getPosition().distanceSq(startPos) > maxReach * maxReach) {
|
if (buildMode != BuildModeEnum.NORMAL && player.getPosition().distanceSq(startPos) > maxReach * maxReach) {
|
||||||
EffortlessBuilding.log(player, "Placement exceeds your reach.");
|
EffortlessBuilding.log(player, "Placement exceeds your reach.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -110,7 +108,7 @@ public class BuildModes {
|
|||||||
Vec3d hitVec = buildMode.instance.getHitVec(player);
|
Vec3d hitVec = buildMode.instance.getHitVec(player);
|
||||||
if (hitVec == null) hitVec = message.getHitVec();
|
if (hitVec == null) hitVec = message.getHitVec();
|
||||||
|
|
||||||
BuildModifiers.onBlockPlaced(player, coordinates, sideHit, hitVec);
|
BuildModifiers.onBlockPlaced(player, coordinates, sideHit, hitVec, message.getPlaceStartPos());
|
||||||
|
|
||||||
//Only works when finishing a buildmode is equal to placing some blocks
|
//Only works when finishing a buildmode is equal to placing some blocks
|
||||||
//No intermediate blocks allowed
|
//No intermediate blocks allowed
|
||||||
|
|||||||
@@ -98,6 +98,7 @@ public class Floor implements IBuildMode {
|
|||||||
if (selected == null) return list;
|
if (selected == null) return list;
|
||||||
|
|
||||||
//check if it doesnt go through blocks
|
//check if it doesnt go through blocks
|
||||||
|
//TODO collision within a 1 block radius to selected is fine
|
||||||
if (!skipRaytrace) {
|
if (!skipRaytrace) {
|
||||||
RayTraceResult rayTraceResult = player.world.rayTraceBlocks(start, selected, false, true, false);
|
RayTraceResult rayTraceResult = player.world.rayTraceBlocks(start, selected, false, true, false);
|
||||||
if (rayTraceResult != null && rayTraceResult.typeOfHit == RayTraceResult.Type.BLOCK) {
|
if (rayTraceResult != null && rayTraceResult.typeOfHit == RayTraceResult.Type.BLOCK) {
|
||||||
|
|||||||
@@ -0,0 +1,50 @@
|
|||||||
|
package nl.requios.effortlessbuilding.buildmode;
|
||||||
|
|
||||||
|
import net.minecraft.client.Minecraft;
|
||||||
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
|
import net.minecraft.util.text.TextFormatting;
|
||||||
|
import net.minecraftforge.fml.relauncher.Side;
|
||||||
|
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||||
|
import nl.requios.effortlessbuilding.EffortlessBuilding;
|
||||||
|
import nl.requios.effortlessbuilding.buildmodifier.ModifierSettingsManager;
|
||||||
|
import nl.requios.effortlessbuilding.gui.buildmode.RadialMenu;
|
||||||
|
import nl.requios.effortlessbuilding.gui.buildmodifier.ModifierSettingsGui;
|
||||||
|
|
||||||
|
public class ModeOptions {
|
||||||
|
|
||||||
|
public enum ActionEnum {
|
||||||
|
UNDO,
|
||||||
|
REDO,
|
||||||
|
REPLACE,
|
||||||
|
OPEN_MODIFIER_SETTINGS
|
||||||
|
}
|
||||||
|
|
||||||
|
//Called on both client and server
|
||||||
|
public static void performAction(EntityPlayer player, ActionEnum action) {
|
||||||
|
EffortlessBuilding.log("Doing "+action.name());
|
||||||
|
|
||||||
|
switch (action) {
|
||||||
|
case UNDO:
|
||||||
|
break;
|
||||||
|
case REDO:
|
||||||
|
break;
|
||||||
|
case REPLACE:
|
||||||
|
ModifierSettingsManager.ModifierSettings modifierSettings = ModifierSettingsManager.getModifierSettings(player);
|
||||||
|
modifierSettings.setQuickReplace(!modifierSettings.doQuickReplace());
|
||||||
|
EffortlessBuilding.log(player, "Set " + TextFormatting.GOLD + "Quick Replace " + TextFormatting.RESET + (
|
||||||
|
modifierSettings.doQuickReplace() ? "on" : "off"), true);
|
||||||
|
break;
|
||||||
|
case OPEN_MODIFIER_SETTINGS:
|
||||||
|
if (player.world.isRemote)
|
||||||
|
openModifierSettings();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@SideOnly(Side.CLIENT)
|
||||||
|
private static void openModifierSettings() {
|
||||||
|
Minecraft.getMinecraft().displayGuiScreen(new ModifierSettingsGui());
|
||||||
|
RadialMenu.instance.setVisibility(0f);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -55,7 +55,7 @@ public class ModeSettingsManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static class ModeSettings {
|
public static class ModeSettings {
|
||||||
private BuildModes.BuildModeEnum buildMode = BuildModes.BuildModeEnum.Normal;
|
private BuildModes.BuildModeEnum buildMode = BuildModes.BuildModeEnum.NORMAL;
|
||||||
|
|
||||||
public ModeSettings() {
|
public ModeSettings() {
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -122,6 +122,7 @@ public class Wall implements IBuildMode {
|
|||||||
if (selected == null) return list;
|
if (selected == null) return list;
|
||||||
|
|
||||||
//check if it doesnt go through blocks
|
//check if it doesnt go through blocks
|
||||||
|
//TODO collision within a 1 block radius to selected is fine
|
||||||
if (!skipRaytrace) {
|
if (!skipRaytrace) {
|
||||||
RayTraceResult rayTraceResult = player.world.rayTraceBlocks(start, selected, false, true, false);
|
RayTraceResult rayTraceResult = player.world.rayTraceBlocks(start, selected, false, true, false);
|
||||||
if (rayTraceResult != null && rayTraceResult.typeOfHit == RayTraceResult.Type.BLOCK) {
|
if (rayTraceResult != null && rayTraceResult.typeOfHit == RayTraceResult.Type.BLOCK) {
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ import java.util.List;
|
|||||||
public class BuildModifiers {
|
public class BuildModifiers {
|
||||||
|
|
||||||
//Called from BuildModes
|
//Called from BuildModes
|
||||||
public static void onBlockPlaced(EntityPlayer player, List<BlockPos> startCoordinates, EnumFacing sideHit, Vec3d hitVec) {
|
public static void onBlockPlaced(EntityPlayer player, List<BlockPos> startCoordinates, EnumFacing sideHit, Vec3d hitVec, boolean placeStartPos) {
|
||||||
World world = player.world;
|
World world = player.world;
|
||||||
ItemRandomizerBag.renewRandomness();
|
ItemRandomizerBag.renewRandomness();
|
||||||
|
|
||||||
@@ -46,7 +46,7 @@ public class BuildModifiers {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//place blocks
|
//place blocks
|
||||||
for (int i = 0; i < coordinates.size(); i++) {
|
for (int i = placeStartPos ? 0 : 1; i < coordinates.size(); i++) {
|
||||||
BlockPos blockPos = coordinates.get(i);
|
BlockPos blockPos = coordinates.get(i);
|
||||||
IBlockState blockState = blockStates.get(i);
|
IBlockState blockState = blockStates.get(i);
|
||||||
ItemStack itemStack = itemStacks.get(i);
|
ItemStack itemStack = itemStacks.get(i);
|
||||||
|
|||||||
@@ -3,8 +3,6 @@ package nl.requios.effortlessbuilding.capability;
|
|||||||
import net.minecraft.nbt.NBTBase;
|
import net.minecraft.nbt.NBTBase;
|
||||||
import net.minecraft.nbt.NBTTagCompound;
|
import net.minecraft.nbt.NBTTagCompound;
|
||||||
import net.minecraft.util.EnumFacing;
|
import net.minecraft.util.EnumFacing;
|
||||||
import net.minecraft.util.math.BlockPos;
|
|
||||||
import net.minecraft.util.math.Vec3d;
|
|
||||||
import net.minecraftforge.common.capabilities.Capability;
|
import net.minecraftforge.common.capabilities.Capability;
|
||||||
import net.minecraftforge.common.capabilities.CapabilityInject;
|
import net.minecraftforge.common.capabilities.CapabilityInject;
|
||||||
import net.minecraftforge.common.capabilities.ICapabilitySerializable;
|
import net.minecraftforge.common.capabilities.ICapabilitySerializable;
|
||||||
@@ -66,7 +64,7 @@ public class ModeCapabilityManager {
|
|||||||
|
|
||||||
//TODO add mode settings
|
//TODO add mode settings
|
||||||
|
|
||||||
ModeSettings modeSettings = new ModeSettings(BuildModes.BuildModeEnum.Normal);
|
ModeSettings modeSettings = new ModeSettings(BuildModes.BuildModeEnum.NORMAL);
|
||||||
instance.setModeData(modeSettings);
|
instance.setModeData(modeSettings);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,8 +3,13 @@ package nl.requios.effortlessbuilding.gui.buildmode;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
import net.minecraft.client.resources.I18n;
|
||||||
|
import net.minecraft.util.text.TextFormatting;
|
||||||
|
import nl.requios.effortlessbuilding.EffortlessBuilding;
|
||||||
|
import nl.requios.effortlessbuilding.buildmode.ModeOptions;
|
||||||
import nl.requios.effortlessbuilding.buildmode.ModeSettingsManager;
|
import nl.requios.effortlessbuilding.buildmode.ModeSettingsManager;
|
||||||
import nl.requios.effortlessbuilding.proxy.ClientProxy;
|
import nl.requios.effortlessbuilding.proxy.ClientProxy;
|
||||||
|
import org.apache.commons.lang3.text.WordUtils;
|
||||||
import org.lwjgl.opengl.GL11;
|
import org.lwjgl.opengl.GL11;
|
||||||
|
|
||||||
import com.google.common.base.Stopwatch;
|
import com.google.common.base.Stopwatch;
|
||||||
@@ -33,7 +38,7 @@ public class RadialMenu extends GuiScreen {
|
|||||||
private float visibility = 0.0f;
|
private float visibility = 0.0f;
|
||||||
private Stopwatch lastChange = Stopwatch.createStarted();
|
private Stopwatch lastChange = Stopwatch.createStarted();
|
||||||
public BuildModeEnum switchTo = null;
|
public BuildModeEnum switchTo = null;
|
||||||
//public ButtonAction doAction = null;
|
public ModeOptions.ActionEnum doAction = null;
|
||||||
public boolean actionUsed = false;
|
public boolean actionUsed = false;
|
||||||
|
|
||||||
private float clampVis(final float f) {
|
private float clampVis(final float f) {
|
||||||
@@ -50,6 +55,10 @@ public class RadialMenu extends GuiScreen {
|
|||||||
lastChange = Stopwatch.createStarted();
|
lastChange = Stopwatch.createStarted();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setVisibility(float visibility) {
|
||||||
|
this.visibility = visibility;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isVisible() {
|
public boolean isVisible() {
|
||||||
return visibility > 0.001;
|
return visibility > 0.001;
|
||||||
}
|
}
|
||||||
@@ -67,34 +76,18 @@ public class RadialMenu extends GuiScreen {
|
|||||||
public double y1, y2;
|
public double y1, y2;
|
||||||
public boolean highlighted;
|
public boolean highlighted;
|
||||||
|
|
||||||
//public final ButtonAction action;
|
public final ModeOptions.ActionEnum action;
|
||||||
public TextureAtlasSprite icon;
|
|
||||||
public int color;
|
|
||||||
public String name;
|
public String name;
|
||||||
public EnumFacing textSide;
|
public EnumFacing textSide;
|
||||||
|
|
||||||
public MenuButton(final String name, /*final ButtonAction action,*/ final double x, final double y,
|
public MenuButton(final String name, final ModeOptions.ActionEnum action, final double x, final double y,
|
||||||
final TextureAtlasSprite ico, final EnumFacing textSide) {
|
final EnumFacing textSide) {
|
||||||
this.name = name;
|
this.name = I18n.format(name);
|
||||||
//this.action = action;
|
this.action = action;
|
||||||
x1 = x;
|
x1 = x - 10;
|
||||||
x2 = x + 18;
|
x2 = x + 10;
|
||||||
y1 = y;
|
y1 = y - 10;
|
||||||
y2 = y + 18;
|
y2 = y + 10;
|
||||||
icon = ico;
|
|
||||||
color = 0xffffff;
|
|
||||||
this.textSide = textSide;
|
|
||||||
}
|
|
||||||
|
|
||||||
public MenuButton(final String name, /*final ButtonAction action,*/ final double x, final double y,
|
|
||||||
final int col, final EnumFacing textSide) {
|
|
||||||
this.name = name;
|
|
||||||
//this.action = action;
|
|
||||||
x1 = x;
|
|
||||||
x2 = x + 18;
|
|
||||||
y1 = y;
|
|
||||||
y2 = y + 18;
|
|
||||||
color = col;
|
|
||||||
this.textSide = textSide;
|
this.textSide = textSide;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -115,13 +108,7 @@ public class RadialMenu extends GuiScreen {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void drawScreen(final int mouseX, final int mouseY, final float partialTicks) {
|
public void drawScreen(final int mouseX, final int mouseY, final float partialTicks) {
|
||||||
//TODO chisels compat
|
if (!isVisible()) return;
|
||||||
// final ChiselToolType tool = ClientSide.instance.getHeldToolType( EnumHand.MAIN_HAND );
|
|
||||||
//
|
|
||||||
// if ( tool != null )
|
|
||||||
// {
|
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
|
|
||||||
GlStateManager.pushMatrix();
|
GlStateManager.pushMatrix();
|
||||||
GlStateManager.translate( 0.0F, 0.0F, 200.0F );
|
GlStateManager.translate( 0.0F, 0.0F, 200.0F );
|
||||||
@@ -150,7 +137,8 @@ public class RadialMenu extends GuiScreen {
|
|||||||
|
|
||||||
final double ringInnerEdge = 20;
|
final double ringInnerEdge = 20;
|
||||||
final double ringOuterEdge = 50;
|
final double ringOuterEdge = 50;
|
||||||
final double textDistance = 65;
|
final double textDistance = 60;
|
||||||
|
final double buttonDistance = 90;
|
||||||
final double quarterCircle = Math.PI / 2.0;
|
final double quarterCircle = Math.PI / 2.0;
|
||||||
|
|
||||||
if ( mouseRadians < -quarterCircle ) {
|
if ( mouseRadians < -quarterCircle ) {
|
||||||
@@ -160,15 +148,17 @@ public class RadialMenu extends GuiScreen {
|
|||||||
final ArrayList<MenuRegion> modes = new ArrayList<MenuRegion>();
|
final ArrayList<MenuRegion> modes = new ArrayList<MenuRegion>();
|
||||||
final ArrayList<MenuButton> buttons = new ArrayList<MenuButton>();
|
final ArrayList<MenuButton> buttons = new ArrayList<MenuButton>();
|
||||||
|
|
||||||
// buttons.add( new MenuButton( "mod.chiselsandbits.other.undo", ButtonAction.UNDO, textDistance, -20, ClientSide.undoIcon, EnumFacing.EAST ) );
|
buttons.add(new MenuButton("effortlessbuilding.action.undo", ModeOptions.ActionEnum.UNDO, -buttonDistance - 26, -13, EnumFacing.UP));
|
||||||
// buttons.add( new MenuButton( "mod.chiselsandbits.other.redo", ButtonAction.REDO, textDistance, 4, ClientSide.redoIcon, EnumFacing.EAST ) );
|
buttons.add(new MenuButton("effortlessbuilding.action.redo", ModeOptions.ActionEnum.REDO, -buttonDistance, -13, EnumFacing.UP));
|
||||||
|
buttons.add(new MenuButton("effortlessbuilding.action.open_modifier_settings", ModeOptions.ActionEnum.OPEN_MODIFIER_SETTINGS, -buttonDistance - 26, 13, EnumFacing.DOWN));
|
||||||
|
buttons.add(new MenuButton("effortlessbuilding.action.replace", ModeOptions.ActionEnum.REPLACE, -buttonDistance, 13, EnumFacing.DOWN));
|
||||||
|
|
||||||
for (final BuildModeEnum mode : BuildModeEnum.values()) {
|
for (final BuildModeEnum mode : BuildModeEnum.values()) {
|
||||||
modes.add(new MenuRegion(mode));
|
modes.add(new MenuRegion(mode));
|
||||||
}
|
}
|
||||||
|
|
||||||
switchTo = null;
|
switchTo = null;
|
||||||
//doAction = null;
|
doAction = null;
|
||||||
|
|
||||||
if (!modes.isEmpty()) {
|
if (!modes.isEmpty()) {
|
||||||
final int totalModes = Math.max( 3, modes.size() );
|
final int totalModes = Math.max( 3, modes.size() );
|
||||||
@@ -217,9 +207,9 @@ public class RadialMenu extends GuiScreen {
|
|||||||
|| inTriangle(x1m1, y1m1, x1m2, y1m2, x2m2, y2m2, mouseXCenter, mouseYCenter);
|
|| inTriangle(x1m1, y1m1, x1m2, y1m2, x2m2, y2m2, mouseXCenter, mouseYCenter);
|
||||||
|
|
||||||
if (beginRadians <= mouseRadians && mouseRadians <= endRadians && isMouseInQuad) {
|
if (beginRadians <= mouseRadians && mouseRadians <= endRadians && isMouseInQuad) {
|
||||||
r = 0.6f;//0.6f;
|
r = 0.6f;
|
||||||
g = 0.8f;//0.3f;
|
g = 0.8f;
|
||||||
b = 1f;//0.0f;
|
b = 1f;
|
||||||
a = 0.6f;
|
a = 0.6f;
|
||||||
menuRegion.highlighted = true;
|
menuRegion.highlighted = true;
|
||||||
switchTo = menuRegion.mode;
|
switchTo = menuRegion.mode;
|
||||||
@@ -235,19 +225,24 @@ public class RadialMenu extends GuiScreen {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (final MenuButton btn : buttons) {
|
for (final MenuButton btn : buttons) {
|
||||||
final float a = 0.5f;
|
float r = 0.8f;
|
||||||
float f = 0f;
|
float g = 0.8f;
|
||||||
|
float b = 0.8f;
|
||||||
|
float a = 0.5f;
|
||||||
|
|
||||||
if (btn.x1 <= mouseXCenter && btn.x2 >= mouseXCenter && btn.y1 <= mouseYCenter && btn.y2 >= mouseYCenter) {
|
if (btn.x1 <= mouseXCenter && btn.x2 >= mouseXCenter && btn.y1 <= mouseYCenter && btn.y2 >= mouseYCenter) {
|
||||||
f = 1;
|
r = 0.0f;
|
||||||
|
g = 0.5f;
|
||||||
|
b = 1f;
|
||||||
|
a = 0.6f;
|
||||||
btn.highlighted = true;
|
btn.highlighted = true;
|
||||||
//doAction = btn.action;
|
doAction = btn.action;
|
||||||
}
|
}
|
||||||
|
|
||||||
buffer.pos(middleX + btn.x1, middleY + btn.y1, zLevel).color(f, f, f, a).endVertex();
|
buffer.pos(middleX + btn.x1, middleY + btn.y1, zLevel).color(r, g, b, a).endVertex();
|
||||||
buffer.pos(middleX + btn.x1, middleY + btn.y2, zLevel).color(f, f, f, a).endVertex();
|
buffer.pos(middleX + btn.x1, middleY + btn.y2, zLevel).color(r, g, b, a).endVertex();
|
||||||
buffer.pos(middleX + btn.x2, middleY + btn.y2, zLevel).color(f, f, f, a).endVertex();
|
buffer.pos(middleX + btn.x2, middleY + btn.y2, zLevel).color(r, g, b, a).endVertex();
|
||||||
buffer.pos(middleX + btn.x2, middleY + btn.y1, zLevel).color(f, f, f, a).endVertex();
|
buffer.pos(middleX + btn.x2, middleY + btn.y1, zLevel).color(r, g, b, a).endVertex();
|
||||||
}
|
}
|
||||||
|
|
||||||
tessellator.draw();
|
tessellator.draw();
|
||||||
@@ -263,12 +258,12 @@ public class RadialMenu extends GuiScreen {
|
|||||||
|
|
||||||
buffer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX_COLOR);
|
buffer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX_COLOR);
|
||||||
|
|
||||||
for (final MenuRegion mnuRgn : modes) {
|
for (final MenuRegion menuRegion : modes) {
|
||||||
|
|
||||||
final double x = (mnuRgn.x1 + mnuRgn.x2) * 0.5 * (ringOuterEdge * 0.6 + 0.4 * ringInnerEdge);
|
final double x = (menuRegion.x1 + menuRegion.x2) * 0.5 * (ringOuterEdge * 0.6 + 0.4 * ringInnerEdge);
|
||||||
final double y = (mnuRgn.y1 + mnuRgn.y2) * 0.5 * (ringOuterEdge * 0.6 + 0.4 * ringInnerEdge);
|
final double y = (menuRegion.y1 + menuRegion.y2) * 0.5 * (ringOuterEdge * 0.6 + 0.4 * ringInnerEdge);
|
||||||
|
|
||||||
final TextureAtlasSprite sprite = ClientProxy.getBuildModeIcon(mnuRgn.mode);
|
final TextureAtlasSprite sprite = ClientProxy.getBuildModeIcon(menuRegion.mode);
|
||||||
|
|
||||||
final double scalex = 16 * 0.5;
|
final double scalex = 16 * 0.5;
|
||||||
final double scaley = 16 * 0.5;
|
final double scaley = 16 * 0.5;
|
||||||
@@ -280,55 +275,53 @@ public class RadialMenu extends GuiScreen {
|
|||||||
final float f = 1f;
|
final float f = 1f;
|
||||||
final float a = 1f;
|
final float a = 1f;
|
||||||
|
|
||||||
final double u1 = 0f;
|
final double u1 = 0;
|
||||||
final double u2 = 16f;
|
final double u2 = 16;
|
||||||
final double v1 = 0f;
|
final double v1 = 0;
|
||||||
final double v2 = 16f;
|
final double v2 = 16;
|
||||||
|
|
||||||
buffer.pos(middleX + x1, middleY + y1, zLevel).tex( sprite.getInterpolatedU(u1), sprite.getInterpolatedV(v1)).color(f, f, f, a).endVertex();
|
buffer.pos(middleX + x1, middleY + y1, zLevel).tex(sprite.getInterpolatedU(u1), sprite.getInterpolatedV(v1)).color(f, f, f, a).endVertex();
|
||||||
buffer.pos(middleX + x1, middleY + y2, zLevel).tex( sprite.getInterpolatedU(u1), sprite.getInterpolatedV(v2)).color(f, f, f, a).endVertex();
|
buffer.pos(middleX + x1, middleY + y2, zLevel).tex(sprite.getInterpolatedU(u1), sprite.getInterpolatedV(v2)).color(f, f, f, a).endVertex();
|
||||||
buffer.pos(middleX + x2, middleY + y2, zLevel).tex( sprite.getInterpolatedU(u2), sprite.getInterpolatedV(v2)).color(f, f, f, a).endVertex();
|
buffer.pos(middleX + x2, middleY + y2, zLevel).tex(sprite.getInterpolatedU(u2), sprite.getInterpolatedV(v2)).color(f, f, f, a).endVertex();
|
||||||
buffer.pos(middleX + x2, middleY + y1, zLevel).tex( sprite.getInterpolatedU(u2), sprite.getInterpolatedV(v1)).color(f, f, f, a).endVertex();
|
buffer.pos(middleX + x2, middleY + y1, zLevel).tex(sprite.getInterpolatedU(u2), sprite.getInterpolatedV(v1)).color(f, f, f, a).endVertex();
|
||||||
}
|
}
|
||||||
|
|
||||||
for (final MenuButton btn : buttons) {
|
for (final MenuButton button : buttons) {
|
||||||
|
|
||||||
final float f = switchTo == null ? 1.0f : 0.5f;
|
final float f = 1f;
|
||||||
final float a = 1.0f;
|
final float a = 1f;
|
||||||
|
|
||||||
final double u1 = 0;
|
final double u1 = 0;
|
||||||
final double u2 = 16;
|
final double u2 = 16;
|
||||||
final double v1 = 0;
|
final double v1 = 0;
|
||||||
final double v2 = 16;
|
final double v2 = 16;
|
||||||
|
|
||||||
final TextureAtlasSprite sprite = btn.icon == null ? Minecraft.getMinecraft().getTextureMapBlocks().getAtlasSprite(ModelLoader.White.LOCATION.toString()) : btn.icon;
|
final TextureAtlasSprite sprite = ClientProxy.getModeOptionIcon(button.action);
|
||||||
|
|
||||||
final double btnx1 = btn.x1 + 1;
|
final double btnmiddleX = (button.x1 + button.x2) / 2.0;
|
||||||
final double btnx2 = btn.x2 - 1;
|
final double btnmiddleY = (button.y1 + button.y2) / 2.0;
|
||||||
final double btny1 = btn.y1 + 1;
|
final double btnx1 = btnmiddleX - 8;
|
||||||
final double btny2 = btn.y2 - 1;
|
final double btnx2 = btnmiddleX + 8;
|
||||||
|
final double btny1 = btnmiddleY - 8;
|
||||||
|
final double btny2 = btnmiddleY + 8;
|
||||||
|
|
||||||
final float red = f * ((btn.color >> 16 & 0xff) / 255.0f);
|
buffer.pos(middleX + btnx1, middleY + btny1, zLevel).tex(sprite.getInterpolatedU(u1), sprite.getInterpolatedV(v1)).color(f, f, f, a).endVertex();
|
||||||
final float green = f * ((btn.color >> 8 & 0xff) / 255.0f);
|
buffer.pos(middleX + btnx1, middleY + btny2, zLevel).tex(sprite.getInterpolatedU(u1), sprite.getInterpolatedV(v2)).color(f, f, f, a).endVertex();
|
||||||
final float blue = f * ((btn.color & 0xff) / 255.0f);
|
buffer.pos(middleX + btnx2, middleY + btny2, zLevel).tex(sprite.getInterpolatedU(u2), sprite.getInterpolatedV(v2)).color(f, f, f, a).endVertex();
|
||||||
|
buffer.pos(middleX + btnx2, middleY + btny1, zLevel).tex(sprite.getInterpolatedU(u2), sprite.getInterpolatedV(v1)).color(f, f, f, a).endVertex();
|
||||||
buffer.pos(middleX + btnx1, middleY + btny1, zLevel).tex(sprite.getInterpolatedU(u1), sprite.getInterpolatedV(v1)).color(red, green, blue, a).endVertex();
|
|
||||||
buffer.pos(middleX + btnx1, middleY + btny2, zLevel).tex(sprite.getInterpolatedU(u1), sprite.getInterpolatedV(v2)).color(red, green, blue, a).endVertex();
|
|
||||||
buffer.pos(middleX + btnx2, middleY + btny2, zLevel).tex(sprite.getInterpolatedU(u2), sprite.getInterpolatedV(v2)).color(red, green, blue, a).endVertex();
|
|
||||||
buffer.pos(middleX + btnx2, middleY + btny1, zLevel).tex(sprite.getInterpolatedU(u2), sprite.getInterpolatedV(v1)).color(red, green, blue, a).endVertex();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
tessellator.draw();
|
tessellator.draw();
|
||||||
|
|
||||||
for (final MenuRegion mnuRgn : modes) {
|
for (final MenuRegion menuRegion : modes) {
|
||||||
|
|
||||||
if (mnuRgn.highlighted) {
|
if (menuRegion.highlighted) {
|
||||||
final double x = (mnuRgn.x1 + mnuRgn.x2) * 0.5;
|
final double x = (menuRegion.x1 + menuRegion.x2) * 0.5;
|
||||||
final double y = (mnuRgn.y1 + mnuRgn.y2) * 0.5;
|
final double y = (menuRegion.y1 + menuRegion.y2) * 0.5;
|
||||||
|
|
||||||
int fixed_x = (int) (x * textDistance);
|
int fixed_x = (int) (x * textDistance);
|
||||||
final int fixed_y = (int) (y * textDistance);
|
final int fixed_y = (int) (y * textDistance) - fontRenderer.FONT_HEIGHT / 2;
|
||||||
final String text = mnuRgn.mode.name;
|
final String text = I18n.format(menuRegion.mode.name);
|
||||||
|
|
||||||
if ( x <= -0.2 ) {
|
if ( x <= -0.2 ) {
|
||||||
fixed_x -= fontRenderer.getStringWidth(text);
|
fixed_x -= fontRenderer.getStringWidth(text);
|
||||||
@@ -340,29 +333,45 @@ public class RadialMenu extends GuiScreen {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (final MenuButton btn : buttons) {
|
for (final MenuButton button : buttons) {
|
||||||
if (btn.highlighted) {
|
if (button.highlighted) {
|
||||||
final String text = btn.name;
|
String text = TextFormatting.AQUA + button.name;
|
||||||
|
int wrap = 120;
|
||||||
|
String keybind = TextFormatting.GRAY + "(None)";
|
||||||
|
|
||||||
if (btn.textSide == EnumFacing.WEST) {
|
//Add keybind in brackets
|
||||||
|
if (button.action == ModeOptions.ActionEnum.REPLACE) {
|
||||||
|
keybind = TextFormatting.GRAY + " (" + WordUtils.capitalizeFully(ClientProxy.keyBindings[1].getDisplayName().toLowerCase()) + ")";
|
||||||
|
}
|
||||||
|
if (button.action == ModeOptions.ActionEnum.OPEN_MODIFIER_SETTINGS) {
|
||||||
|
keybind = TextFormatting.GRAY + " (" + WordUtils.capitalizeFully(ClientProxy.keyBindings[0].getDisplayName()) + ")";
|
||||||
|
}
|
||||||
|
|
||||||
fontRenderer.drawStringWithShadow( text, (int) ( middleX + btn.x1 - 8 ) - fontRenderer.getStringWidth( text ),
|
if (button.textSide == EnumFacing.WEST) {
|
||||||
(int) ( middleY + btn.y1 + 6 ), 0xffffffff );
|
|
||||||
|
|
||||||
} else if (btn.textSide == EnumFacing.EAST) {
|
fontRenderer.drawSplitString( text, (int) (middleX + button.x1 - 8 ) - fontRenderer.getStringWidth(text),
|
||||||
|
(int) (middleY + button.y1 + 6), wrap, 0xffffffff);
|
||||||
|
|
||||||
fontRenderer.drawStringWithShadow( text, (int) ( middleX + btn.x2 + 8 ),
|
} else if (button.textSide == EnumFacing.EAST) {
|
||||||
(int) ( middleY + btn.y1 + 6 ), 0xffffffff );
|
|
||||||
|
|
||||||
} else if (btn.textSide == EnumFacing.UP) {
|
fontRenderer.drawSplitString(text, (int) (middleX + button.x2 + 8),
|
||||||
|
(int) (middleY + button.y1 + 6 ), wrap, 0xffffffff);
|
||||||
|
|
||||||
fontRenderer.drawStringWithShadow( text, (int) ( middleX + ( btn.x1 + btn.x2 ) * 0.5 - fontRenderer.getStringWidth( text ) * 0.5 ),
|
} else if (button.textSide == EnumFacing.UP || button.textSide == EnumFacing.NORTH) {
|
||||||
(int) ( middleY + btn.y1 - 14 ), 0xffffffff );
|
|
||||||
|
|
||||||
} else if (btn.textSide == EnumFacing.DOWN) {
|
fontRenderer.drawSplitString( text, (int) (middleX + (button.x1 + button.x2) * 0.5 - fontRenderer.getStringWidth(text) * 0.5),
|
||||||
|
(int) (middleY + button.y1 - 26), wrap,0xffffffff);
|
||||||
|
|
||||||
fontRenderer.drawStringWithShadow( text, (int) ( middleX + ( btn.x1 + btn.x2 ) * 0.5 - fontRenderer.getStringWidth( text ) * 0.5 ),
|
fontRenderer.drawSplitString( keybind, (int) (middleX + (button.x1 + button.x2) * 0.5 - fontRenderer.getStringWidth(keybind) * 0.5),
|
||||||
(int) ( middleY + btn.y1 + 24 ), 0xffffffff );
|
(int) (middleY + button.y1 - 14), wrap,0xffffffff);
|
||||||
|
|
||||||
|
} else if (button.textSide == EnumFacing.DOWN || button.textSide == EnumFacing.SOUTH) {
|
||||||
|
|
||||||
|
fontRenderer.drawSplitString(text, (int) (middleX + (button.x1 + button.x2) * 0.5 - fontRenderer.getStringWidth(text) * 0.5),
|
||||||
|
(int) (middleY + button.y1 + 24), wrap, 0xffffffff);
|
||||||
|
|
||||||
|
fontRenderer.drawSplitString(keybind, (int) (middleX + (button.x1 + button.x2) * 0.5 - fontRenderer.getStringWidth(keybind) * 0.5),
|
||||||
|
(int) (middleY + button.y1 + 36), wrap, 0xffffffff);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -387,14 +396,16 @@ public class RadialMenu extends GuiScreen {
|
|||||||
/**
|
/**
|
||||||
* Called when the mouse is clicked. Args : mouseX, mouseY, clickedButton
|
* Called when the mouse is clicked. Args : mouseX, mouseY, clickedButton
|
||||||
*/
|
*/
|
||||||
|
@Override
|
||||||
protected void mouseClicked(int mouseX, int mouseY, int mouseButton ) {
|
protected void mouseClicked(int mouseX, int mouseY, int mouseButton ) {
|
||||||
if (mouseButton == 0) {
|
EffortlessBuilding.log("mouse clicked");
|
||||||
this.mc.displayGuiScreen(null);
|
// if (mouseButton == 0) {
|
||||||
|
// this.mc.displayGuiScreen(null);
|
||||||
if (this.mc.currentScreen == null) {
|
//
|
||||||
this.mc.setIngameFocus();
|
// if (this.mc.currentScreen == null) {
|
||||||
}
|
// this.mc.setIngameFocus();
|
||||||
}
|
// }
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -142,7 +142,7 @@ public class ArraySettingsGui extends GuiCollapsibleScrollEntry {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean mousePressed(int slotIndex, int mouseX, int mouseY, int mouseEvent, int relativeX, int relativeY) {
|
public boolean mousePressed(int slotIndex, int mouseX, int mouseY, int mouseEvent, int relativeX, int relativeY) {
|
||||||
super.mousePressed(slotIndex, mouseX, mouseY, mouseEvent, relativeX, relativeY);
|
super.mousePressed(slotIndex, mouseX, mouseY, mouseEvent, relativeX, relativeY);
|
||||||
arrayNumberFieldList.forEach(numberField -> numberField.mouseClicked(mouseX, mouseY, mouseEvent));
|
arrayNumberFieldList.forEach(numberField -> numberField.mouseClicked(mouseX, mouseY, mouseEvent));
|
||||||
|
|
||||||
boolean insideArrayEnabledLabel = mouseX >= left && mouseX < right && relativeY >= -2 && relativeY < 12;
|
boolean insideArrayEnabledLabel = mouseX >= left && mouseX < right && relativeY >= -2 && relativeY < 12;
|
||||||
|
|||||||
@@ -73,22 +73,24 @@ public class GuiScrollPane extends GuiListExtended {
|
|||||||
int insideLeft = this.left + this.width / 2 - this.getListWidth() / 2 + 2;
|
int insideLeft = this.left + this.width / 2 - this.getListWidth() / 2 + 2;
|
||||||
int insideTop = this.top + 4 - (int)this.amountScrolled;
|
int insideTop = this.top + 4 - (int)this.amountScrolled;
|
||||||
|
|
||||||
if (this.hasListHeader)
|
if (this.hasListHeader) {
|
||||||
{
|
|
||||||
this.drawListHeader(insideLeft, insideTop, tessellator);
|
this.drawListHeader(insideLeft, insideTop, tessellator);
|
||||||
}
|
}
|
||||||
|
|
||||||
//All entries
|
//All entries
|
||||||
this.drawSelectionBox(insideLeft, insideTop, mouseXIn, mouseYIn, partialTicks);
|
this.drawSelectionBox(insideLeft, insideTop, mouseXIn, mouseYIn, partialTicks);
|
||||||
GlStateManager.disableDepth();
|
GlStateManager.disableDepth();
|
||||||
|
|
||||||
//Dirt overlays on top and bottom
|
//Dirt overlays on top and bottom
|
||||||
// this.overlayBackground(0, this.top, 255, 255);
|
// this.overlayBackground(0, this.top, 255, 255);
|
||||||
// this.overlayBackground(this.bottom, this.height, 255, 255);
|
// this.overlayBackground(this.bottom, this.height, 255, 255);
|
||||||
|
|
||||||
GlStateManager.enableBlend();
|
GlStateManager.enableBlend();
|
||||||
GlStateManager.tryBlendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ZERO, GlStateManager.DestFactor.ONE);
|
GlStateManager.tryBlendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ZERO, GlStateManager.DestFactor.ONE);
|
||||||
GlStateManager.disableAlpha();
|
GlStateManager.disableAlpha();
|
||||||
GlStateManager.shadeModel(7425);
|
GlStateManager.shadeModel(7425);
|
||||||
GlStateManager.disableTexture2D();
|
GlStateManager.disableTexture2D();
|
||||||
|
|
||||||
// //top fade
|
// //top fade
|
||||||
// bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX_COLOR);
|
// bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX_COLOR);
|
||||||
// bufferbuilder.pos((double)this.left, (double)(this.top + 5), 0.0D).tex(0.0D, 1.0D).color(100, 100, 100, 0).endVertex();
|
// bufferbuilder.pos((double)this.left, (double)(this.top + 5), 0.0D).tex(0.0D, 1.0D).color(100, 100, 100, 0).endVertex();
|
||||||
@@ -96,6 +98,7 @@ public class GuiScrollPane extends GuiListExtended {
|
|||||||
// bufferbuilder.pos((double)this.right, (double)this.top, 0.0D).tex(1.0D, 0.0D).color(100, 100, 100, 100).endVertex();
|
// bufferbuilder.pos((double)this.right, (double)this.top, 0.0D).tex(1.0D, 0.0D).color(100, 100, 100, 100).endVertex();
|
||||||
// bufferbuilder.pos((double)this.left, (double)this.top, 0.0D).tex(0.0D, 0.0D).color(100, 100, 100, 100).endVertex();
|
// bufferbuilder.pos((double)this.left, (double)this.top, 0.0D).tex(0.0D, 0.0D).color(100, 100, 100, 100).endVertex();
|
||||||
// tessellator.draw();
|
// tessellator.draw();
|
||||||
|
|
||||||
// //top line
|
// //top line
|
||||||
// bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX_COLOR);
|
// bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX_COLOR);
|
||||||
// bufferbuilder.pos((double)this.left, (double)this.top, 0.0D).tex(0.0D, 1.0D).color(20, 20, 20, 255).endVertex();
|
// bufferbuilder.pos((double)this.left, (double)this.top, 0.0D).tex(0.0D, 1.0D).color(20, 20, 20, 255).endVertex();
|
||||||
@@ -103,6 +106,7 @@ public class GuiScrollPane extends GuiListExtended {
|
|||||||
// bufferbuilder.pos((double)this.right, (double)(this.top - 1), 0.0D).tex(1.0D, 0.0D).color(20, 20, 20, 255).endVertex();
|
// bufferbuilder.pos((double)this.right, (double)(this.top - 1), 0.0D).tex(1.0D, 0.0D).color(20, 20, 20, 255).endVertex();
|
||||||
// bufferbuilder.pos((double)this.left, (double)(this.top - 1), 0.0D).tex(0.0D, 0.0D).color(20, 20, 20, 255).endVertex();
|
// bufferbuilder.pos((double)this.left, (double)(this.top - 1), 0.0D).tex(0.0D, 0.0D).color(20, 20, 20, 255).endVertex();
|
||||||
// tessellator.draw();
|
// tessellator.draw();
|
||||||
|
|
||||||
// //bottom fade
|
// //bottom fade
|
||||||
// bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX_COLOR);
|
// bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX_COLOR);
|
||||||
// bufferbuilder.pos((double)this.left, (double)this.bottom, 0.0D).tex(0.0D, 1.0D).color(10, 10, 10, 100).endVertex();
|
// bufferbuilder.pos((double)this.left, (double)this.bottom, 0.0D).tex(0.0D, 1.0D).color(10, 10, 10, 100).endVertex();
|
||||||
@@ -110,6 +114,7 @@ public class GuiScrollPane extends GuiListExtended {
|
|||||||
// bufferbuilder.pos((double)this.right, (double)(this.bottom - 5), 0.0D).tex(1.0D, 0.0D).color(10, 10, 10, 0).endVertex();
|
// bufferbuilder.pos((double)this.right, (double)(this.bottom - 5), 0.0D).tex(1.0D, 0.0D).color(10, 10, 10, 0).endVertex();
|
||||||
// bufferbuilder.pos((double)this.left, (double)(this.bottom - 5), 0.0D).tex(0.0D, 0.0D).color(10, 10, 10, 0).endVertex();
|
// bufferbuilder.pos((double)this.left, (double)(this.bottom - 5), 0.0D).tex(0.0D, 0.0D).color(10, 10, 10, 0).endVertex();
|
||||||
// tessellator.draw();
|
// tessellator.draw();
|
||||||
|
|
||||||
// //bottom line
|
// //bottom line
|
||||||
// bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX_COLOR);
|
// bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX_COLOR);
|
||||||
// bufferbuilder.pos((double)this.left, (double)(this.bottom + 1), 0.0D).tex(0.0D, 1.0D).color(20, 20, 20, 255).endVertex();
|
// bufferbuilder.pos((double)this.left, (double)(this.bottom + 1), 0.0D).tex(0.0D, 1.0D).color(20, 20, 20, 255).endVertex();
|
||||||
@@ -137,12 +142,14 @@ public class GuiScrollPane extends GuiListExtended {
|
|||||||
bufferbuilder.pos((double)scrollBarRight, (double)this.top, 0.0D).tex(1.0D, 0.0D).color(0, 0, 0, 255).endVertex();
|
bufferbuilder.pos((double)scrollBarRight, (double)this.top, 0.0D).tex(1.0D, 0.0D).color(0, 0, 0, 255).endVertex();
|
||||||
bufferbuilder.pos((double)scrollBarLeft, (double)this.top, 0.0D).tex(0.0D, 0.0D).color(0, 0, 0, 255).endVertex();
|
bufferbuilder.pos((double)scrollBarLeft, (double)this.top, 0.0D).tex(0.0D, 0.0D).color(0, 0, 0, 255).endVertex();
|
||||||
tessellator.draw();
|
tessellator.draw();
|
||||||
|
|
||||||
bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX_COLOR);
|
bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX_COLOR);
|
||||||
bufferbuilder.pos((double)scrollBarLeft, (double)(l1 + k1), 0.0D).tex(0.0D, 1.0D).color(128, 128, 128, 255).endVertex();
|
bufferbuilder.pos((double)scrollBarLeft, (double)(l1 + k1), 0.0D).tex(0.0D, 1.0D).color(128, 128, 128, 255).endVertex();
|
||||||
bufferbuilder.pos((double)scrollBarRight, (double)(l1 + k1), 0.0D).tex(1.0D, 1.0D).color(128, 128, 128, 255).endVertex();
|
bufferbuilder.pos((double)scrollBarRight, (double)(l1 + k1), 0.0D).tex(1.0D, 1.0D).color(128, 128, 128, 255).endVertex();
|
||||||
bufferbuilder.pos((double)scrollBarRight, (double)l1, 0.0D).tex(1.0D, 0.0D).color(128, 128, 128, 255).endVertex();
|
bufferbuilder.pos((double)scrollBarRight, (double)l1, 0.0D).tex(1.0D, 0.0D).color(128, 128, 128, 255).endVertex();
|
||||||
bufferbuilder.pos((double)scrollBarLeft, (double)l1, 0.0D).tex(0.0D, 0.0D).color(128, 128, 128, 255).endVertex();
|
bufferbuilder.pos((double)scrollBarLeft, (double)l1, 0.0D).tex(0.0D, 0.0D).color(128, 128, 128, 255).endVertex();
|
||||||
tessellator.draw();
|
tessellator.draw();
|
||||||
|
|
||||||
bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX_COLOR);
|
bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX_COLOR);
|
||||||
bufferbuilder.pos((double)scrollBarLeft, (double)(l1 + k1 - 1), 0.0D).tex(0.0D, 1.0D).color(192, 192, 192, 255).endVertex();
|
bufferbuilder.pos((double)scrollBarLeft, (double)(l1 + k1 - 1), 0.0D).tex(0.0D, 1.0D).color(192, 192, 192, 255).endVertex();
|
||||||
bufferbuilder.pos((double)(scrollBarRight - 1), (double)(l1 + k1 - 1), 0.0D).tex(1.0D, 1.0D).color(192, 192, 192, 255).endVertex();
|
bufferbuilder.pos((double)(scrollBarRight - 1), (double)(l1 + k1 - 1), 0.0D).tex(1.0D, 1.0D).color(192, 192, 192, 255).endVertex();
|
||||||
@@ -184,8 +191,7 @@ public class GuiScrollPane extends GuiListExtended {
|
|||||||
public int getSlotIndexFromScreenCoords(int posX, int posY) {
|
public int getSlotIndexFromScreenCoords(int posX, int posY) {
|
||||||
int left = this.left + (this.width - this.getListWidth()) / 2;
|
int left = this.left + (this.width - this.getListWidth()) / 2;
|
||||||
int right = this.left + (this.width + this.getListWidth()) / 2;
|
int right = this.left + (this.width + this.getListWidth()) / 2;
|
||||||
int relativeMouseY = posY - this.top - this.headerPadding + (int)this.amountScrolled - 4; //click height in content dimensions
|
int relativeMouseY = getRelativeMouseY(mouseY, 0);
|
||||||
//int slotIndex = relativeMouseY / this.slotHeight;
|
|
||||||
|
|
||||||
//Iterate over every entry until relativeMouseY falls within its height
|
//Iterate over every entry until relativeMouseY falls within its height
|
||||||
for (int i = 0; i < listEntries.size(); i++) {
|
for (int i = 0; i < listEntries.size(); i++) {
|
||||||
@@ -201,25 +207,33 @@ public class GuiScrollPane extends GuiListExtended {
|
|||||||
@Override
|
@Override
|
||||||
public boolean mouseClicked(int mouseX, int mouseY, int mouseEvent)
|
public boolean mouseClicked(int mouseX, int mouseY, int mouseEvent)
|
||||||
{
|
{
|
||||||
if (this.isMouseYWithinSlotBounds(mouseY))
|
int selectedSlot = this.getSlotIndexFromScreenCoords(mouseX, mouseY);
|
||||||
{
|
int relativeX = getRelativeMouseX(mouseX);
|
||||||
int i = this.getSlotIndexFromScreenCoords(mouseX, mouseY);
|
|
||||||
|
|
||||||
if (i >= 0)
|
//Always pass through mouseclicked, to be able to unfocus textfields
|
||||||
{
|
for (int i = 0; i < this.listEntries.size(); i++) {
|
||||||
int j = this.left + this.width / 2 - this.getListWidth() / 2 + 2;
|
int relativeY = getRelativeMouseY(mouseY, i);
|
||||||
int k = this.top + 4 - this.getAmountScrolled() + getContentHeight(i) + this.headerPadding;
|
this.getListEntry(i).mousePressed(selectedSlot, mouseX, mouseY, mouseEvent, relativeX, relativeY);
|
||||||
int relativeX = mouseX - j;
|
|
||||||
int relativeY = mouseY - k;
|
|
||||||
|
|
||||||
if (this.getListEntry(i).mousePressed(i, mouseX, mouseY, mouseEvent, relativeX, relativeY))
|
|
||||||
{
|
|
||||||
this.setEnabled(false);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// if (this.isMouseYWithinSlotBounds(mouseY))
|
||||||
|
// {
|
||||||
|
// int i = this.getSlotIndexFromScreenCoords(mouseX, mouseY);
|
||||||
|
//
|
||||||
|
// if (i >= 0)
|
||||||
|
// {
|
||||||
|
// int relativeX = getRelativeMouseX(mouseX);
|
||||||
|
// int relativeY = getRelativeMouseY(mouseY, i);
|
||||||
|
//
|
||||||
|
// if (this.getListEntry(i).mousePressed(i, mouseX, mouseY, mouseEvent, relativeX, relativeY))
|
||||||
|
// {
|
||||||
|
// this.setEnabled(false);
|
||||||
|
// return true;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -228,10 +242,8 @@ public class GuiScrollPane extends GuiListExtended {
|
|||||||
{
|
{
|
||||||
for (int i = 0; i < this.getSize(); ++i)
|
for (int i = 0; i < this.getSize(); ++i)
|
||||||
{
|
{
|
||||||
int j = this.left + this.width / 2 - this.getListWidth() / 2 + 2;
|
int relativeX = getRelativeMouseX(mouseX);
|
||||||
int k = this.top + 4 - this.getAmountScrolled() + getContentHeight(i) + this.headerPadding;
|
int relativeY = getRelativeMouseY(mouseY, i);
|
||||||
int relativeX = x - j;
|
|
||||||
int relativeY = y - k;
|
|
||||||
this.getListEntry(i).mouseReleased(i, x, y, mouseEvent, relativeX, relativeY);
|
this.getListEntry(i).mouseReleased(i, x, y, mouseEvent, relativeX, relativeY);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -246,9 +258,8 @@ public class GuiScrollPane extends GuiListExtended {
|
|||||||
this.mouseY <= this.bottom) {
|
this.mouseY <= this.bottom) {
|
||||||
int i = this.left + (this.width - this.getListWidth()) / 2;
|
int i = this.left + (this.width - this.getListWidth()) / 2;
|
||||||
int j = this.left + (this.width + this.getListWidth()) / 2;
|
int j = this.left + (this.width + this.getListWidth()) / 2;
|
||||||
int relativeMouseY = this.mouseY - this.top - this.headerPadding + (int) this.amountScrolled -
|
|
||||||
4; //click height in content dimensions
|
|
||||||
int slotIndex = getSlotIndexFromScreenCoords(this.mouseX, this.mouseY);
|
int slotIndex = getSlotIndexFromScreenCoords(this.mouseX, this.mouseY);
|
||||||
|
int relativeMouseY = getRelativeMouseY(mouseY, slotIndex);
|
||||||
|
|
||||||
if (slotIndex > -1) {
|
if (slotIndex > -1) {
|
||||||
this.elementClicked(slotIndex, false, this.mouseX, this.mouseY);
|
this.elementClicked(slotIndex, false, this.mouseX, this.mouseY);
|
||||||
@@ -265,9 +276,8 @@ public class GuiScrollPane extends GuiListExtended {
|
|||||||
if (this.mouseY >= this.top && this.mouseY <= this.bottom) {
|
if (this.mouseY >= this.top && this.mouseY <= this.bottom) {
|
||||||
int i2 = this.left + (this.width - this.getListWidth()) / 2;
|
int i2 = this.left + (this.width - this.getListWidth()) / 2;
|
||||||
int j2 = this.left + (this.width + this.getListWidth()) / 2;
|
int j2 = this.left + (this.width + this.getListWidth()) / 2;
|
||||||
int relativeMouseY = this.mouseY - this.top - this.headerPadding + (int) this.amountScrolled -
|
|
||||||
4; //click height in content dimensions
|
|
||||||
int slotIndex = getSlotIndexFromScreenCoords(this.mouseX, this.mouseY);
|
int slotIndex = getSlotIndexFromScreenCoords(this.mouseX, this.mouseY);
|
||||||
|
int relativeMouseY = getRelativeMouseY(mouseY, slotIndex);
|
||||||
|
|
||||||
if (slotIndex > -1) {
|
if (slotIndex > -1) {
|
||||||
boolean flag = slotIndex == this.selectedElement &&
|
boolean flag = slotIndex == this.selectedElement &&
|
||||||
@@ -383,6 +393,26 @@ public class GuiScrollPane extends GuiListExtended {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private int getRelativeMouseX(int mouseX) {
|
||||||
|
int j = this.left + this.width / 2 - this.getListWidth() / 2 + 2;
|
||||||
|
return mouseX - j;
|
||||||
|
}
|
||||||
|
|
||||||
|
private int getRelativeMouseY(int mouseY, int contentIndex) {
|
||||||
|
int k = this.top + 4 - this.getAmountScrolled() + getContentHeight(contentIndex) + this.headerPadding;
|
||||||
|
int relativeMouseY = mouseY - k;
|
||||||
|
|
||||||
|
//Content might be centered, adjust relative mouse y accordingly
|
||||||
|
int contentHeight = getContentHeight();
|
||||||
|
int insideHeight = this.bottom - this.top - 4;
|
||||||
|
|
||||||
|
if (contentHeight < insideHeight) {
|
||||||
|
//it fits, so we can center it vertically
|
||||||
|
relativeMouseY -= (insideHeight - contentHeight) / 2;
|
||||||
|
}
|
||||||
|
return relativeMouseY;
|
||||||
|
}
|
||||||
|
|
||||||
//PASSTHROUGHS
|
//PASSTHROUGHS
|
||||||
public int initGui(int id, List<GuiButton> buttonList) {
|
public int initGui(int id, List<GuiButton> buttonList) {
|
||||||
for (IScrollEntry entry : this.listEntries) {
|
for (IScrollEntry entry : this.listEntries) {
|
||||||
|
|||||||
@@ -25,19 +25,22 @@ public class BlockPlacedMessage implements IMessage {
|
|||||||
private BlockPos blockPos;
|
private BlockPos blockPos;
|
||||||
private EnumFacing sideHit;
|
private EnumFacing sideHit;
|
||||||
private Vec3d hitVec;
|
private Vec3d hitVec;
|
||||||
|
private boolean placeStartPos; //prevent double placing in normal mode
|
||||||
|
|
||||||
public BlockPlacedMessage() {
|
public BlockPlacedMessage() {
|
||||||
this.blockHit = false;
|
this.blockHit = false;
|
||||||
this.blockPos = BlockPos.ORIGIN;
|
this.blockPos = BlockPos.ORIGIN;
|
||||||
this.sideHit = EnumFacing.UP;
|
this.sideHit = EnumFacing.UP;
|
||||||
this.hitVec = new Vec3d(0, 0, 0);
|
this.hitVec = new Vec3d(0, 0, 0);
|
||||||
|
this.placeStartPos = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public BlockPlacedMessage(RayTraceResult result) {
|
public BlockPlacedMessage(RayTraceResult result, boolean placeStartPos) {
|
||||||
this.blockHit = result.typeOfHit == RayTraceResult.Type.BLOCK;
|
this.blockHit = result.typeOfHit == RayTraceResult.Type.BLOCK;
|
||||||
this.blockPos = result.getBlockPos();
|
this.blockPos = result.getBlockPos();
|
||||||
this.sideHit = result.sideHit;
|
this.sideHit = result.sideHit;
|
||||||
this.hitVec = result.hitVec;
|
this.hitVec = result.hitVec;
|
||||||
|
this.placeStartPos = placeStartPos;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isBlockHit() {
|
public boolean isBlockHit() {
|
||||||
@@ -56,6 +59,10 @@ public class BlockPlacedMessage implements IMessage {
|
|||||||
return hitVec;
|
return hitVec;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean getPlaceStartPos() {
|
||||||
|
return placeStartPos;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void toBytes(ByteBuf buf) {
|
public void toBytes(ByteBuf buf) {
|
||||||
buf.writeBoolean(blockHit);
|
buf.writeBoolean(blockHit);
|
||||||
@@ -66,6 +73,7 @@ public class BlockPlacedMessage implements IMessage {
|
|||||||
buf.writeDouble(hitVec.x);
|
buf.writeDouble(hitVec.x);
|
||||||
buf.writeDouble(hitVec.y);
|
buf.writeDouble(hitVec.y);
|
||||||
buf.writeDouble(hitVec.z);
|
buf.writeDouble(hitVec.z);
|
||||||
|
buf.writeBoolean(placeStartPos);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -74,6 +82,7 @@ public class BlockPlacedMessage implements IMessage {
|
|||||||
blockPos = new BlockPos(buf.readInt(), buf.readInt(), buf.readInt());
|
blockPos = new BlockPos(buf.readInt(), buf.readInt(), buf.readInt());
|
||||||
sideHit = EnumFacing.byIndex(buf.readInt());
|
sideHit = EnumFacing.byIndex(buf.readInt());
|
||||||
hitVec = new Vec3d(buf.readDouble(), buf.readDouble(), buf.readDouble());
|
hitVec = new Vec3d(buf.readDouble(), buf.readDouble(), buf.readDouble());
|
||||||
|
placeStartPos = buf.readBoolean();
|
||||||
}
|
}
|
||||||
|
|
||||||
// The params of the IMessageHandler are <REQ, REPLY>
|
// The params of the IMessageHandler are <REQ, REPLY>
|
||||||
|
|||||||
@@ -0,0 +1,62 @@
|
|||||||
|
package nl.requios.effortlessbuilding.network;
|
||||||
|
|
||||||
|
import io.netty.buffer.ByteBuf;
|
||||||
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
|
import net.minecraft.util.IThreadListener;
|
||||||
|
import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
|
||||||
|
import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler;
|
||||||
|
import net.minecraftforge.fml.common.network.simpleimpl.MessageContext;
|
||||||
|
import nl.requios.effortlessbuilding.EffortlessBuilding;
|
||||||
|
import nl.requios.effortlessbuilding.buildmode.BuildModes;
|
||||||
|
import nl.requios.effortlessbuilding.buildmode.ModeOptions;
|
||||||
|
import nl.requios.effortlessbuilding.buildmode.ModeSettingsManager;
|
||||||
|
|
||||||
|
import static nl.requios.effortlessbuilding.buildmode.ModeSettingsManager.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Shares mode settings (see ModeSettingsManager) between server and client
|
||||||
|
*/
|
||||||
|
public class ModeActionMessage implements IMessage {
|
||||||
|
|
||||||
|
private ModeOptions.ActionEnum action;
|
||||||
|
|
||||||
|
public ModeActionMessage() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public ModeActionMessage(ModeOptions.ActionEnum action) {
|
||||||
|
this.action = action;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void toBytes(ByteBuf buf) {
|
||||||
|
buf.writeInt(action.ordinal());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void fromBytes(ByteBuf buf) {
|
||||||
|
action = ModeOptions.ActionEnum.values()[buf.readInt()];
|
||||||
|
}
|
||||||
|
|
||||||
|
// The params of the IMessageHandler are <REQ, REPLY>
|
||||||
|
public static class MessageHandler implements IMessageHandler<ModeActionMessage, IMessage> {
|
||||||
|
// Do note that the default constructor is required, but implicitly defined in this case
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IMessage onMessage(ModeActionMessage message, MessageContext ctx) {
|
||||||
|
//EffortlessBuilding.log("message received on " + ctx.side + " side");
|
||||||
|
|
||||||
|
// The value that was sent
|
||||||
|
ModeOptions.ActionEnum action = message.action;
|
||||||
|
|
||||||
|
// Execute the action on the main server thread by adding it as a scheduled task
|
||||||
|
IThreadListener threadListener = EffortlessBuilding.proxy.getThreadListenerFromContext(ctx);
|
||||||
|
threadListener.addScheduledTask(() -> {
|
||||||
|
EntityPlayer player = EffortlessBuilding.proxy.getPlayerEntityFromContext(ctx);
|
||||||
|
|
||||||
|
ModeOptions.performAction(player, action);
|
||||||
|
});
|
||||||
|
// No response packet
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -29,16 +29,12 @@ public class ModeSettingsMessage implements IMessage {
|
|||||||
@Override
|
@Override
|
||||||
public void toBytes(ByteBuf buf) {
|
public void toBytes(ByteBuf buf) {
|
||||||
buf.writeInt(modeSettings.getBuildMode().ordinal());
|
buf.writeInt(modeSettings.getBuildMode().ordinal());
|
||||||
|
|
||||||
//TODO add mode settings
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void fromBytes(ByteBuf buf) {
|
public void fromBytes(ByteBuf buf) {
|
||||||
BuildModes.BuildModeEnum buildMode = BuildModes.BuildModeEnum.values()[buf.readInt()];
|
BuildModes.BuildModeEnum buildMode = BuildModes.BuildModeEnum.values()[buf.readInt()];
|
||||||
|
|
||||||
//TODO add mode settings
|
|
||||||
|
|
||||||
modeSettings = new ModeSettings(buildMode);
|
modeSettings = new ModeSettings(buildMode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -42,7 +42,8 @@ public class RequestLookAtMessage implements IMessage {
|
|||||||
if (ctx.side == Side.CLIENT){
|
if (ctx.side == Side.CLIENT){
|
||||||
//Received clientside
|
//Received clientside
|
||||||
//Send back your info
|
//Send back your info
|
||||||
return new BlockPlacedMessage(ClientProxy.previousLookAt);
|
//Prevent double placing in normal mode with placeStartPos false
|
||||||
|
return new BlockPlacedMessage(ClientProxy.previousLookAt, false);
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,7 +33,6 @@ import net.minecraftforge.fml.common.event.FMLInitializationEvent;
|
|||||||
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
|
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
|
||||||
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
|
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
|
||||||
import net.minecraftforge.fml.common.event.FMLServerStartingEvent;
|
import net.minecraftforge.fml.common.event.FMLServerStartingEvent;
|
||||||
import net.minecraftforge.fml.common.eventhandler.Event;
|
|
||||||
import net.minecraftforge.fml.common.eventhandler.EventPriority;
|
import net.minecraftforge.fml.common.eventhandler.EventPriority;
|
||||||
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
||||||
import net.minecraftforge.fml.common.gameevent.InputEvent;
|
import net.minecraftforge.fml.common.gameevent.InputEvent;
|
||||||
@@ -42,6 +41,7 @@ import net.minecraftforge.fml.common.network.simpleimpl.MessageContext;
|
|||||||
import net.minecraftforge.fml.relauncher.Side;
|
import net.minecraftforge.fml.relauncher.Side;
|
||||||
import nl.requios.effortlessbuilding.EffortlessBuilding;
|
import nl.requios.effortlessbuilding.EffortlessBuilding;
|
||||||
import nl.requios.effortlessbuilding.buildmode.BuildModes;
|
import nl.requios.effortlessbuilding.buildmode.BuildModes;
|
||||||
|
import nl.requios.effortlessbuilding.buildmode.ModeOptions;
|
||||||
import nl.requios.effortlessbuilding.buildmode.ModeSettingsManager;
|
import nl.requios.effortlessbuilding.buildmode.ModeSettingsManager;
|
||||||
import nl.requios.effortlessbuilding.buildmodifier.ModifierSettingsManager;
|
import nl.requios.effortlessbuilding.buildmodifier.ModifierSettingsManager;
|
||||||
import nl.requios.effortlessbuilding.gui.buildmode.RadialMenu;
|
import nl.requios.effortlessbuilding.gui.buildmode.RadialMenu;
|
||||||
@@ -67,6 +67,7 @@ public class ClientProxy implements IProxy {
|
|||||||
public static int ticksInGame = 0;
|
public static int ticksInGame = 0;
|
||||||
|
|
||||||
private static final HashMap<BuildModes.BuildModeEnum, TextureAtlasSprite> buildModeIcons = new HashMap<>();
|
private static final HashMap<BuildModes.BuildModeEnum, TextureAtlasSprite> buildModeIcons = new HashMap<>();
|
||||||
|
private static final HashMap<ModeOptions.ActionEnum, TextureAtlasSprite> modeOptionIcons = new HashMap<>();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void preInit(FMLPreInitializationEvent event) {
|
public void preInit(FMLPreInitializationEvent event) {
|
||||||
@@ -139,12 +140,22 @@ public class ClientProxy implements IProxy {
|
|||||||
final ResourceLocation sprite = new ResourceLocation("effortlessbuilding", "icons/" + mode.name().toLowerCase());
|
final ResourceLocation sprite = new ResourceLocation("effortlessbuilding", "icons/" + mode.name().toLowerCase());
|
||||||
buildModeIcons.put( mode, map.registerSprite(sprite));
|
buildModeIcons.put( mode, map.registerSprite(sprite));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for ( final ModeOptions.ActionEnum action : ModeOptions.ActionEnum.values() )
|
||||||
|
{
|
||||||
|
final ResourceLocation sprite = new ResourceLocation("effortlessbuilding", "icons/" + action.name().toLowerCase());
|
||||||
|
modeOptionIcons.put( action, map.registerSprite(sprite));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static TextureAtlasSprite getBuildModeIcon(BuildModes.BuildModeEnum mode) {
|
public static TextureAtlasSprite getBuildModeIcon(BuildModes.BuildModeEnum mode) {
|
||||||
return buildModeIcons.get(mode);
|
return buildModeIcons.get(mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static TextureAtlasSprite getModeOptionIcon(ModeOptions.ActionEnum action) {
|
||||||
|
return modeOptionIcons.get(action);
|
||||||
|
}
|
||||||
|
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public static void onClientTick(TickEvent.ClientTickEvent event) {
|
public static void onClientTick(TickEvent.ClientTickEvent event) {
|
||||||
|
|
||||||
@@ -189,7 +200,7 @@ public class ClientProxy implements IProxy {
|
|||||||
BuildModes.BuildModeEnum buildMode = ModeSettingsManager.getModeSettings(player).getBuildMode();
|
BuildModes.BuildModeEnum buildMode = ModeSettingsManager.getModeSettings(player).getBuildMode();
|
||||||
|
|
||||||
if (Minecraft.getMinecraft().currentScreen != null ||
|
if (Minecraft.getMinecraft().currentScreen != null ||
|
||||||
buildMode == BuildModes.BuildModeEnum.Normal ||
|
buildMode == BuildModes.BuildModeEnum.NORMAL ||
|
||||||
RadialMenu.instance.isVisible()) {
|
RadialMenu.instance.isVisible()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -203,17 +214,18 @@ public class ClientProxy implements IProxy {
|
|||||||
ItemStack currentItemStack = player.getHeldItem(EnumHand.MAIN_HAND);
|
ItemStack currentItemStack = player.getHeldItem(EnumHand.MAIN_HAND);
|
||||||
if (currentItemStack.getItem() instanceof ItemBlock ||
|
if (currentItemStack.getItem() instanceof ItemBlock ||
|
||||||
(CompatHelper.isItemBlockProxy(currentItemStack) && !player.isSneaking())) {
|
(CompatHelper.isItemBlockProxy(currentItemStack) && !player.isSneaking())) {
|
||||||
|
ItemStack itemStack = CompatHelper.getItemBlockFromStack(currentItemStack);
|
||||||
|
|
||||||
//find position in distance
|
//find position in distance
|
||||||
RayTraceResult lookingAt = getLookingAt(player);
|
RayTraceResult lookingAt = getLookingAt(player);
|
||||||
BuildModes.onBlockPlacedMessage(player, lookingAt == null ? new BlockPlacedMessage() : new BlockPlacedMessage(lookingAt));
|
BuildModes.onBlockPlacedMessage(player, lookingAt == null ? new BlockPlacedMessage() : new BlockPlacedMessage(lookingAt, true));
|
||||||
EffortlessBuilding.packetHandler.sendToServer(lookingAt == null ? new BlockPlacedMessage() : new BlockPlacedMessage(lookingAt));
|
EffortlessBuilding.packetHandler.sendToServer(lookingAt == null ? new BlockPlacedMessage() : new BlockPlacedMessage(lookingAt, true));
|
||||||
|
|
||||||
//play sound if further than normal
|
//play sound if further than normal
|
||||||
if (lookingAt != null && lookingAt.typeOfHit == RayTraceResult.Type.BLOCK &&
|
if (lookingAt != null && lookingAt.typeOfHit == RayTraceResult.Type.BLOCK &&
|
||||||
(lookingAt.hitVec.subtract(player.getPositionEyes(1f))).lengthSquared() > 25f) {
|
(lookingAt.hitVec.subtract(player.getPositionEyes(1f))).lengthSquared() > 25f) {
|
||||||
|
|
||||||
IBlockState state = ((ItemBlock) currentItemStack.getItem()).getBlock().getDefaultState();
|
IBlockState state = ((ItemBlock) itemStack.getItem()).getBlock().getDefaultState();
|
||||||
BlockPos blockPos = lookingAt.getBlockPos();
|
BlockPos blockPos = lookingAt.getBlockPos();
|
||||||
SoundType soundType = state.getBlock().getSoundType(state, player.world, blockPos, player);
|
SoundType soundType = state.getBlock().getSoundType(state, player.world, blockPos, player);
|
||||||
player.world.playSound(player, player.getPosition(), soundType.getPlaceSound(), SoundCategory.BLOCKS,
|
player.world.playSound(player, player.getPosition(), soundType.getPlaceSound(), SoundCategory.BLOCKS,
|
||||||
@@ -221,7 +233,7 @@ public class ClientProxy implements IProxy {
|
|||||||
player.swingArm(EnumHand.MAIN_HAND);
|
player.swingArm(EnumHand.MAIN_HAND);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (buildMode == BuildModes.BuildModeEnum.NormalPlus) {
|
} else if (buildMode == BuildModes.BuildModeEnum.NORMAL_PLUS) {
|
||||||
placeCooldown--;
|
placeCooldown--;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -250,7 +262,7 @@ public class ClientProxy implements IProxy {
|
|||||||
0.4f, soundtype.getPitch() * 1f);
|
0.4f, soundtype.getPitch() * 1f);
|
||||||
player.swingArm(EnumHand.MAIN_HAND);
|
player.swingArm(EnumHand.MAIN_HAND);
|
||||||
}
|
}
|
||||||
} else if (buildMode == BuildModes.BuildModeEnum.NormalPlus) {
|
} else if (buildMode == BuildModes.BuildModeEnum.NORMAL_PLUS) {
|
||||||
breakCooldown--;
|
breakCooldown--;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -260,6 +272,13 @@ public class ClientProxy implements IProxy {
|
|||||||
} else {
|
} else {
|
||||||
breakCooldown = 0;
|
breakCooldown = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (mc.gameSettings.keyBindAttack.isPressed()) {
|
||||||
|
if (RadialMenu.instance.isVisible()) {
|
||||||
|
EffortlessBuilding.log(player, "mouse click");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@SubscribeEvent(priority = EventPriority.NORMAL, receiveCanceled = true)
|
@SubscribeEvent(priority = EventPriority.NORMAL, receiveCanceled = true)
|
||||||
@@ -267,7 +286,7 @@ public class ClientProxy implements IProxy {
|
|||||||
EntityPlayerSP player = Minecraft.getMinecraft().player;
|
EntityPlayerSP player = Minecraft.getMinecraft().player;
|
||||||
|
|
||||||
//Remember to send packet to server if necessary
|
//Remember to send packet to server if necessary
|
||||||
//Show HUD
|
//Show Modifier Settings GUI
|
||||||
if (keyBindings[0].isPressed()) {
|
if (keyBindings[0].isPressed()) {
|
||||||
//Disabled if max reach is 0, might be set in the config that way.
|
//Disabled if max reach is 0, might be set in the config that way.
|
||||||
if (ReachHelper.getMaxReach(player) == 0) {
|
if (ReachHelper.getMaxReach(player) == 0) {
|
||||||
|
|||||||
@@ -13,7 +13,6 @@ import net.minecraft.item.ItemStack;
|
|||||||
import net.minecraft.util.EnumFacing;
|
import net.minecraft.util.EnumFacing;
|
||||||
import net.minecraft.util.ResourceLocation;
|
import net.minecraft.util.ResourceLocation;
|
||||||
import net.minecraft.util.SoundCategory;
|
import net.minecraft.util.SoundCategory;
|
||||||
import net.minecraft.util.SoundEvent;
|
|
||||||
import net.minecraft.util.math.*;
|
import net.minecraft.util.math.*;
|
||||||
import net.minecraftforge.fml.relauncher.Side;
|
import net.minecraftforge.fml.relauncher.Side;
|
||||||
import net.minecraftforge.fml.relauncher.SideOnly;
|
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||||
@@ -99,7 +98,7 @@ public class BlockPreviewRenderer {
|
|||||||
|
|
||||||
//Render block previews
|
//Render block previews
|
||||||
RayTraceResult lookingAt = ClientProxy.getLookingAt(player);
|
RayTraceResult lookingAt = ClientProxy.getLookingAt(player);
|
||||||
if (modeSettings.getBuildMode() == BuildModes.BuildModeEnum.Normal) lookingAt = Minecraft.getMinecraft().objectMouseOver;
|
if (modeSettings.getBuildMode() == BuildModes.BuildModeEnum.NORMAL) lookingAt = Minecraft.getMinecraft().objectMouseOver;
|
||||||
|
|
||||||
ItemStack mainhand = player.getHeldItemMainhand();
|
ItemStack mainhand = player.getHeldItemMainhand();
|
||||||
boolean toolInHand = !(!mainhand.isEmpty() && CompatHelper.isItemBlockProxy(mainhand));
|
boolean toolInHand = !(!mainhand.isEmpty() && CompatHelper.isItemBlockProxy(mainhand));
|
||||||
@@ -260,9 +259,9 @@ public class BlockPreviewRenderer {
|
|||||||
|
|
||||||
//Whether to draw any block previews or outlines
|
//Whether to draw any block previews or outlines
|
||||||
public static boolean doRenderBlockPreviews(ModifierSettings modifierSettings, ModeSettings modeSettings, BlockPos startPos) {
|
public static boolean doRenderBlockPreviews(ModifierSettings modifierSettings, ModeSettings modeSettings, BlockPos startPos) {
|
||||||
return modeSettings.getBuildMode() != BuildModes.BuildModeEnum.Normal ||
|
return modeSettings.getBuildMode() != BuildModes.BuildModeEnum.NORMAL ||
|
||||||
(startPos != null && BuildModifiers.isEnabled(modifierSettings, startPos)) ||
|
(startPos != null && BuildModifiers.isEnabled(modifierSettings, startPos)) ||
|
||||||
BuildConfig.visuals.alwaysShowBlockPreview;
|
BuildConfig.visuals.alwaysShowBlockPreview;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected static void renderBlockPreviews(List<BlockPos> coordinates, List<IBlockState> blockStates,
|
protected static void renderBlockPreviews(List<BlockPos> coordinates, List<IBlockState> blockStates,
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import net.minecraft.client.renderer.BlockRendererDispatcher;
|
|||||||
import net.minecraft.client.renderer.GlStateManager;
|
import net.minecraft.client.renderer.GlStateManager;
|
||||||
import net.minecraft.client.renderer.RenderGlobal;
|
import net.minecraft.client.renderer.RenderGlobal;
|
||||||
import net.minecraft.client.renderer.texture.TextureMap;
|
import net.minecraft.client.renderer.texture.TextureMap;
|
||||||
|
import net.minecraft.client.resources.I18n;
|
||||||
import net.minecraft.client.settings.KeyBinding;
|
import net.minecraft.client.settings.KeyBinding;
|
||||||
import net.minecraft.entity.Entity;
|
import net.minecraft.entity.Entity;
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
@@ -28,6 +29,7 @@ import net.minecraftforge.fml.common.Mod;
|
|||||||
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
||||||
import net.minecraftforge.fml.relauncher.Side;
|
import net.minecraftforge.fml.relauncher.Side;
|
||||||
import nl.requios.effortlessbuilding.EffortlessBuilding;
|
import nl.requios.effortlessbuilding.EffortlessBuilding;
|
||||||
|
import nl.requios.effortlessbuilding.buildmode.ModeOptions;
|
||||||
import nl.requios.effortlessbuilding.buildmode.ModeSettingsManager;
|
import nl.requios.effortlessbuilding.buildmode.ModeSettingsManager;
|
||||||
import nl.requios.effortlessbuilding.buildmodifier.BuildModifiers;
|
import nl.requios.effortlessbuilding.buildmodifier.BuildModifiers;
|
||||||
import nl.requios.effortlessbuilding.buildmodifier.ModifierSettingsManager;
|
import nl.requios.effortlessbuilding.buildmodifier.ModifierSettingsManager;
|
||||||
@@ -35,6 +37,7 @@ import nl.requios.effortlessbuilding.gui.buildmode.RadialMenu;
|
|||||||
import nl.requios.effortlessbuilding.compatibility.CompatHelper;
|
import nl.requios.effortlessbuilding.compatibility.CompatHelper;
|
||||||
import nl.requios.effortlessbuilding.helper.ReachHelper;
|
import nl.requios.effortlessbuilding.helper.ReachHelper;
|
||||||
import nl.requios.effortlessbuilding.helper.SurvivalHelper;
|
import nl.requios.effortlessbuilding.helper.SurvivalHelper;
|
||||||
|
import nl.requios.effortlessbuilding.network.ModeActionMessage;
|
||||||
import nl.requios.effortlessbuilding.network.ModeSettingsMessage;
|
import nl.requios.effortlessbuilding.network.ModeSettingsMessage;
|
||||||
import nl.requios.effortlessbuilding.proxy.ClientProxy;
|
import nl.requios.effortlessbuilding.proxy.ClientProxy;
|
||||||
import org.lwjgl.input.Mouse;
|
import org.lwjgl.input.Mouse;
|
||||||
@@ -88,19 +91,24 @@ public class RenderHandler implements IWorldEventListener {
|
|||||||
EffortlessBuilding.log(player, "Build modes are disabled until your reach has increased. Increase your reach with craftable reach upgrades.");
|
EffortlessBuilding.log(player, "Build modes are disabled until your reach has increased. Increase your reach with craftable reach upgrades.");
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if ( !RadialMenu.instance.actionUsed ) {
|
if (!RadialMenu.instance.actionUsed) {
|
||||||
ModeSettingsManager.ModeSettings modeSettings = ModeSettingsManager.getModeSettings(player);
|
ModeSettingsManager.ModeSettings modeSettings = ModeSettingsManager.getModeSettings(player);
|
||||||
|
|
||||||
if ( RadialMenu.instance.switchTo != null ) {
|
if (RadialMenu.instance.switchTo != null) {
|
||||||
playRadialMenuSound();
|
playRadialMenuSound();
|
||||||
modeSettings.setBuildMode(RadialMenu.instance.switchTo);
|
modeSettings.setBuildMode(RadialMenu.instance.switchTo);
|
||||||
ModeSettingsManager.setModeSettings(player, modeSettings);
|
ModeSettingsManager.setModeSettings(player, modeSettings);
|
||||||
EffortlessBuilding.packetHandler.sendToServer(new ModeSettingsMessage(modeSettings));
|
EffortlessBuilding.packetHandler.sendToServer(new ModeSettingsMessage(modeSettings));
|
||||||
|
|
||||||
EffortlessBuilding.log(player, modeSettings.getBuildMode().name, true);
|
EffortlessBuilding.log(player, I18n.format(modeSettings.getBuildMode().name), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO change buildmode settings
|
//Perform button action
|
||||||
|
ModeOptions.ActionEnum action = RadialMenu.instance.doAction;
|
||||||
|
if (action != null) {
|
||||||
|
ModeOptions.performAction(player, action);
|
||||||
|
EffortlessBuilding.packetHandler.sendToServer(new ModeActionMessage(action));
|
||||||
|
}
|
||||||
|
|
||||||
playRadialMenuSound();
|
playRadialMenuSound();
|
||||||
}
|
}
|
||||||
@@ -123,12 +131,12 @@ public class RenderHandler implements IWorldEventListener {
|
|||||||
KeyBinding.unPressAllKeys();
|
KeyBinding.unPressAllKeys();
|
||||||
}
|
}
|
||||||
|
|
||||||
final int k1 = Mouse.getX() * res.getScaledWidth() / mc.displayWidth;
|
final int mouseX = Mouse.getX() * res.getScaledWidth() / mc.displayWidth;
|
||||||
final int l1 = res.getScaledHeight() - Mouse.getY() * res.getScaledHeight() / mc.displayHeight - 1;
|
final int mouseY = res.getScaledHeight() - Mouse.getY() * res.getScaledHeight() / mc.displayHeight - 1;
|
||||||
|
|
||||||
net.minecraftforge.client.ForgeHooksClient.drawScreen(RadialMenu.instance, k1, l1, event.getPartialTicks());
|
net.minecraftforge.client.ForgeHooksClient.drawScreen(RadialMenu.instance, mouseX, mouseY, event.getPartialTicks());
|
||||||
} else {
|
} else {
|
||||||
if (wasVisible) {
|
if (wasVisible && RadialMenu.instance.doAction != ModeOptions.ActionEnum.OPEN_MODIFIER_SETTINGS) {
|
||||||
mc.setIngameFocus();
|
mc.setIngameFocus();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,4 +9,19 @@ item.effortlessbuilding:reach_upgrade1.name=Reach Upgrade 1
|
|||||||
item.effortlessbuilding:reach_upgrade2.name=Reach Upgrade 2
|
item.effortlessbuilding:reach_upgrade2.name=Reach Upgrade 2
|
||||||
item.effortlessbuilding:reach_upgrade3.name=Reach Upgrade 3
|
item.effortlessbuilding:reach_upgrade3.name=Reach Upgrade 3
|
||||||
|
|
||||||
|
effortlessbuilding.mode.normal=Normal
|
||||||
|
effortlessbuilding.mode.normal_plus=Normal+
|
||||||
|
effortlessbuilding.mode.line=Line
|
||||||
|
effortlessbuilding.mode.wall=Wall
|
||||||
|
effortlessbuilding.mode.floor=Floor
|
||||||
|
effortlessbuilding.mode.diagonal_line=Diagonal Line (WIP)
|
||||||
|
effortlessbuilding.mode.diagonal_wall=Diagonal Wall (WIP)
|
||||||
|
effortlessbuilding.mode.slope_floor=Slope Floor (WIP)
|
||||||
|
effortlessbuilding.mode.cube=Cube (WIP)
|
||||||
|
|
||||||
|
effortlessbuilding.action.undo=Undo (WIP)
|
||||||
|
effortlessbuilding.action.redo=Redo (WIP)
|
||||||
|
effortlessbuilding.action.replace=Replace
|
||||||
|
effortlessbuilding.action.open_modifier_settings=Open Modifier Settings
|
||||||
|
|
||||||
commands.reach.usage=/reach <level>
|
commands.reach.usage=/reach <level>
|
||||||
|
Before Width: | Height: | Size: 317 B After Width: | Height: | Size: 319 B |
|
After Width: | Height: | Size: 370 B |
|
After Width: | Height: | Size: 264 B |
|
Before Width: | Height: | Size: 363 B |
|
Before Width: | Height: | Size: 253 B |
|
Before Width: | Height: | Size: 355 B After Width: | Height: | Size: 355 B |
|
After Width: | Height: | Size: 317 B |
|
After Width: | Height: | Size: 317 B |
|
After Width: | Height: | Size: 317 B |
|
After Width: | Height: | Size: 310 B |
|
Before Width: | Height: | Size: 299 B |
|
After Width: | Height: | Size: 317 B |