Added quickReplaceMiningLevel to survivalBalancers in config (issue #14).
Fixed crash when trying to preview some modded blocks that have special rendering code. Preview will show outline instead. (issue #9 and #35) Added build mode options GUI.
@@ -53,6 +53,16 @@ public class BuildConfig {
|
||||
@RangeInt(min = 0, max = 200)
|
||||
public int miningTimePercentage = 50;
|
||||
|
||||
@Comment({"Determines what blocks can be replaced in survival.",
|
||||
"-1: only blocks that can be harvested by hand (default)",
|
||||
"0: blocks that can be harvested with wooden or gold tools",
|
||||
"1: blocks that can be harvested with stone tools",
|
||||
"2: blocks that can be harvested with iron tools",
|
||||
"3: blocks that can be harvested with diamond tools",
|
||||
})
|
||||
@RangeInt(min = -1, max = 3)
|
||||
public int quickReplaceMiningLevel = -1;
|
||||
|
||||
@Comment({"How many placements are remembered for the undo functionality."})
|
||||
@RequiresMcRestart
|
||||
public int undoStackSize = 5;
|
||||
|
||||
@@ -6,6 +6,7 @@ import net.minecraft.util.EnumHand;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.math.Vec3d;
|
||||
import nl.requios.effortlessbuilding.EffortlessBuilding;
|
||||
import nl.requios.effortlessbuilding.buildmode.ModeOptions.ActionEnum;
|
||||
import nl.requios.effortlessbuilding.buildmodifier.*;
|
||||
import nl.requios.effortlessbuilding.compatibility.CompatHelper;
|
||||
import nl.requios.effortlessbuilding.helper.ReachHelper;
|
||||
@@ -26,22 +27,24 @@ public class BuildModes {
|
||||
public static Dictionary<EntityPlayer, Boolean> currentlyBreakingServer = new Hashtable<>();
|
||||
|
||||
public enum BuildModeEnum {
|
||||
NORMAL("effortlessbuilding.mode.normal", new Normal()),
|
||||
NORMAL_PLUS("effortlessbuilding.mode.normal_plus", new NormalPlus()),
|
||||
LINE("effortlessbuilding.mode.line", new Line()),
|
||||
WALL("effortlessbuilding.mode.wall", new Wall()),
|
||||
FLOOR("effortlessbuilding.mode.floor", new Floor()),
|
||||
DIAGONAL_LINE("effortlessbuilding.mode.diagonal_line", new DiagonalLine()),
|
||||
DIAGONAL_WALL("effortlessbuilding.mode.diagonal_wall", new DiagonalWall()),
|
||||
SLOPE_FLOOR("effortlessbuilding.mode.slope_floor", new SlopeFloor()),
|
||||
CUBE("effortlessbuilding.mode.cube", new Cube());
|
||||
NORMAL("effortlessbuilding.mode.normal", new Normal(), new ActionEnum[]{}),
|
||||
NORMAL_PLUS("effortlessbuilding.mode.normal_plus", new NormalPlus(), new ActionEnum[]{ActionEnum.NORMAL_SPEED, ActionEnum.FAST_SPEED}),
|
||||
LINE("effortlessbuilding.mode.line", new Line(), new ActionEnum[]{ActionEnum.THICKNESS_1, ActionEnum.THICKNESS_3, ActionEnum.THICKNESS_5}),
|
||||
WALL("effortlessbuilding.mode.wall", new Wall(), new ActionEnum[]{ActionEnum.FULL, ActionEnum.HOLLOW}),
|
||||
FLOOR("effortlessbuilding.mode.floor", new Floor(), new ActionEnum[]{ActionEnum.FULL, ActionEnum.HOLLOW}),
|
||||
DIAGONAL_LINE("effortlessbuilding.mode.diagonal_line", new DiagonalLine(), new ActionEnum[]{ActionEnum.THICKNESS_1, ActionEnum.THICKNESS_3, ActionEnum.THICKNESS_5}),
|
||||
DIAGONAL_WALL("effortlessbuilding.mode.diagonal_wall", new DiagonalWall(), new ActionEnum[]{ActionEnum.FULL, ActionEnum.HOLLOW}),
|
||||
SLOPE_FLOOR("effortlessbuilding.mode.slope_floor", new SlopeFloor(), new ActionEnum[]{ActionEnum.SHORT_EDGE, ActionEnum.LONG_EDGE}),
|
||||
CUBE("effortlessbuilding.mode.cube", new Cube(), new ActionEnum[]{ActionEnum.CUBE_FULL, ActionEnum.CUBE_HOLLOW, ActionEnum.CUBE_SKELETON});
|
||||
|
||||
public String name;
|
||||
public IBuildMode instance;
|
||||
public ActionEnum[] options;
|
||||
|
||||
BuildModeEnum(String name, IBuildMode instance) {
|
||||
BuildModeEnum(String name, IBuildMode instance, ActionEnum[] options) {
|
||||
this.name = name;
|
||||
this.instance = instance;
|
||||
this.options = options;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package nl.requios.effortlessbuilding.buildmode;
|
||||
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.resources.I18n;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.util.text.TextFormatting;
|
||||
import net.minecraftforge.fml.relauncher.Side;
|
||||
@@ -14,23 +15,72 @@ import nl.requios.effortlessbuilding.gui.buildmodifier.ModifierSettingsGui;
|
||||
public class ModeOptions {
|
||||
|
||||
public enum ActionEnum {
|
||||
UNDO,
|
||||
REDO,
|
||||
REPLACE,
|
||||
OPEN_MODIFIER_SETTINGS
|
||||
UNDO("effortlessbuilding.action.undo"),
|
||||
REDO("effortlessbuilding.action.redo"),
|
||||
REPLACE("effortlessbuilding.action.replace"),
|
||||
OPEN_MODIFIER_SETTINGS("effortlessbuilding.action.open_modifier_settings"),
|
||||
|
||||
NORMAL_SPEED("effortlessbuilding.action.normal_speed"),
|
||||
FAST_SPEED("effortlessbuilding.action.fast_speed"),
|
||||
|
||||
FULL("effortlessbuilding.action.full"),
|
||||
HOLLOW("effortlessbuilding.action.hollow"),
|
||||
|
||||
CUBE_FULL("effortlessbuilding.action.full"),
|
||||
CUBE_HOLLOW("effortlessbuilding.action.hollow"),
|
||||
CUBE_SKELETON("effortlessbuilding.action.skeleton"),
|
||||
|
||||
SHORT_EDGE("effortlessbuilding.action.short_edge"),
|
||||
LONG_EDGE("effortlessbuilding.action.long_edge"),
|
||||
|
||||
THICKNESS_1("effortlessbuilding.action.thickness_1"),
|
||||
THICKNESS_3("effortlessbuilding.action.thickness_3"),
|
||||
THICKNESS_5("effortlessbuilding.action.thickness_5");
|
||||
|
||||
public String name;
|
||||
|
||||
ActionEnum(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
}
|
||||
|
||||
private static ActionEnum buildSpeed = ActionEnum.NORMAL_SPEED;
|
||||
private static ActionEnum fill = ActionEnum.FULL;
|
||||
private static ActionEnum cubeFill = ActionEnum.CUBE_FULL;
|
||||
private static ActionEnum raisedEdge = ActionEnum.SHORT_EDGE;
|
||||
private static ActionEnum lineThickness = ActionEnum.THICKNESS_1;
|
||||
|
||||
public static ActionEnum getBuildSpeed() {
|
||||
return buildSpeed;
|
||||
}
|
||||
|
||||
public static ActionEnum getFill() {
|
||||
return fill;
|
||||
}
|
||||
|
||||
public static ActionEnum getCubeFill() {
|
||||
return cubeFill;
|
||||
}
|
||||
|
||||
public static ActionEnum getRaisedEdge() {
|
||||
return raisedEdge;
|
||||
}
|
||||
|
||||
public static ActionEnum getLineThickness() {
|
||||
return lineThickness;
|
||||
}
|
||||
|
||||
//Called on both client and server
|
||||
public static void performAction(EntityPlayer player, ActionEnum action) {
|
||||
if (action == null) return;
|
||||
BuildModes.BuildModeEnum currentBuildMode = ModeSettingsManager.getModeSettings(Minecraft.getMinecraft().player).getBuildMode();
|
||||
|
||||
switch (action) {
|
||||
case UNDO:
|
||||
UndoRedo.undo(player);
|
||||
EffortlessBuilding.log(player, "Undo", true);
|
||||
break;
|
||||
case REDO:
|
||||
UndoRedo.redo(player);
|
||||
EffortlessBuilding.log(player, "Redo", true);
|
||||
break;
|
||||
case REPLACE:
|
||||
ModifierSettingsManager.ModifierSettings modifierSettings = ModifierSettingsManager.getModifierSettings(player);
|
||||
@@ -42,13 +92,59 @@ public class ModeOptions {
|
||||
if (player.world.isRemote)
|
||||
openModifierSettings();
|
||||
break;
|
||||
|
||||
case NORMAL_SPEED:
|
||||
buildSpeed = ActionEnum.NORMAL_SPEED;
|
||||
break;
|
||||
case FAST_SPEED:
|
||||
buildSpeed = ActionEnum.FAST_SPEED;
|
||||
break;
|
||||
case FULL:
|
||||
fill = ActionEnum.FULL;
|
||||
break;
|
||||
case HOLLOW:
|
||||
fill = ActionEnum.HOLLOW;
|
||||
break;
|
||||
case CUBE_FULL:
|
||||
cubeFill = ActionEnum.CUBE_FULL;
|
||||
break;
|
||||
case CUBE_HOLLOW:
|
||||
cubeFill = ActionEnum.CUBE_HOLLOW;
|
||||
break;
|
||||
case CUBE_SKELETON:
|
||||
cubeFill = ActionEnum.CUBE_SKELETON;
|
||||
break;
|
||||
case SHORT_EDGE:
|
||||
raisedEdge = ActionEnum.SHORT_EDGE;
|
||||
break;
|
||||
case LONG_EDGE:
|
||||
raisedEdge = ActionEnum.LONG_EDGE;
|
||||
break;
|
||||
case THICKNESS_1:
|
||||
lineThickness = ActionEnum.THICKNESS_1;
|
||||
break;
|
||||
case THICKNESS_3:
|
||||
lineThickness = ActionEnum.THICKNESS_3;
|
||||
break;
|
||||
case THICKNESS_5:
|
||||
lineThickness = ActionEnum.THICKNESS_5;
|
||||
break;
|
||||
}
|
||||
|
||||
if (player.world.isRemote && action != ActionEnum.REPLACE && action != ActionEnum.OPEN_MODIFIER_SETTINGS) {
|
||||
logAction(action);
|
||||
}
|
||||
}
|
||||
|
||||
//TODO fix client class import giving error on server (nothing happens, it's just ugly)
|
||||
@SideOnly(Side.CLIENT)
|
||||
private static void openModifierSettings() {
|
||||
Minecraft.getMinecraft().displayGuiScreen(new ModifierSettingsGui());
|
||||
RadialMenu.instance.setVisibility(0f);
|
||||
}
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
private static void logAction(ActionEnum action) {
|
||||
EffortlessBuilding.log(Minecraft.getMinecraft().player, I18n.format(action.name), true);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ import java.util.ArrayList;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import net.minecraft.client.resources.I18n;
|
||||
import net.minecraft.client.settings.KeyBinding;
|
||||
import net.minecraft.util.text.TextFormatting;
|
||||
import nl.requios.effortlessbuilding.EffortlessBuilding;
|
||||
import nl.requios.effortlessbuilding.buildmode.ModeOptions;
|
||||
@@ -110,6 +111,8 @@ public class RadialMenu extends GuiScreen {
|
||||
public void drawScreen(final int mouseX, final int mouseY, final float partialTicks) {
|
||||
if (!isVisible()) return;
|
||||
|
||||
BuildModeEnum currentBuildMode = ModeSettingsManager.getModeSettings(Minecraft.getMinecraft().player).getBuildMode();
|
||||
|
||||
GlStateManager.pushMatrix();
|
||||
GlStateManager.translate( 0.0F, 0.0F, 200.0F );
|
||||
|
||||
@@ -148,15 +151,24 @@ public class RadialMenu extends GuiScreen {
|
||||
final ArrayList<MenuRegion> modes = new ArrayList<MenuRegion>();
|
||||
final ArrayList<MenuButton> buttons = new ArrayList<MenuButton>();
|
||||
|
||||
buttons.add(new MenuButton("effortlessbuilding.action.undo", ModeOptions.ActionEnum.UNDO, -buttonDistance - 26, -13, EnumFacing.UP));
|
||||
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));
|
||||
|
||||
//Add build modes
|
||||
for (final BuildModeEnum mode : BuildModeEnum.values()) {
|
||||
modes.add(new MenuRegion(mode));
|
||||
}
|
||||
|
||||
//Add actions
|
||||
buttons.add(new MenuButton(ModeOptions.ActionEnum.UNDO.name, ModeOptions.ActionEnum.UNDO, -buttonDistance - 26, -13, EnumFacing.UP));
|
||||
buttons.add(new MenuButton(ModeOptions.ActionEnum.REDO.name, ModeOptions.ActionEnum.REDO, -buttonDistance, -13, EnumFacing.UP));
|
||||
buttons.add(new MenuButton(ModeOptions.ActionEnum.OPEN_MODIFIER_SETTINGS.name, ModeOptions.ActionEnum.OPEN_MODIFIER_SETTINGS, -buttonDistance - 26, 13, EnumFacing.DOWN));
|
||||
buttons.add(new MenuButton(ModeOptions.ActionEnum.REPLACE.name, ModeOptions.ActionEnum.REPLACE, -buttonDistance, 13, EnumFacing.DOWN));
|
||||
|
||||
//Add buildmode dependent options
|
||||
ModeOptions.ActionEnum[] options = currentBuildMode.options;
|
||||
for (int i = 0; i < options.length; i++) {
|
||||
ModeOptions.ActionEnum action = options[i];
|
||||
buttons.add(new MenuButton(action.name, action, buttonDistance + i * 26, -20, EnumFacing.DOWN));
|
||||
}
|
||||
|
||||
switchTo = null;
|
||||
doAction = null;
|
||||
|
||||
@@ -193,7 +205,7 @@ public class RadialMenu extends GuiScreen {
|
||||
float a = 0.5f;
|
||||
|
||||
//check if current mode
|
||||
int buildMode = ModeSettingsManager.getModeSettings(Minecraft.getMinecraft().player).getBuildMode().ordinal();
|
||||
int buildMode = currentBuildMode.ordinal();
|
||||
if (buildMode == i) {
|
||||
r = 0f;
|
||||
g = 0.5f;
|
||||
@@ -225,16 +237,29 @@ public class RadialMenu extends GuiScreen {
|
||||
}
|
||||
|
||||
for (final MenuButton btn : buttons) {
|
||||
float r = 0.8f;
|
||||
float g = 0.8f;
|
||||
float b = 0.8f;
|
||||
float r = 0.5f;
|
||||
float g = 0.5f;
|
||||
float b = 0.5f;
|
||||
float a = 0.5f;
|
||||
|
||||
if (btn.x1 <= mouseXCenter && btn.x2 >= mouseXCenter && btn.y1 <= mouseYCenter && btn.y2 >= mouseYCenter) {
|
||||
//highlight when active option
|
||||
if (btn.action == ModeOptions.getBuildSpeed() ||
|
||||
btn.action == ModeOptions.getFill() ||
|
||||
btn.action == ModeOptions.getCubeFill() ||
|
||||
btn.action == ModeOptions.getRaisedEdge() ||
|
||||
btn.action == ModeOptions.getLineThickness()) {
|
||||
r = 0.0f;
|
||||
g = 0.5f;
|
||||
b = 1f;
|
||||
a = 0.6f;
|
||||
}
|
||||
|
||||
//highlight when mouse over
|
||||
if (btn.x1 <= mouseXCenter && btn.x2 >= mouseXCenter && btn.y1 <= mouseYCenter && btn.y2 >= mouseYCenter) {
|
||||
r = 0.6f;
|
||||
g = 0.8f;
|
||||
b = 1f;
|
||||
a = 0.6f;
|
||||
btn.highlighted = true;
|
||||
doAction = btn.action;
|
||||
}
|
||||
@@ -311,6 +336,36 @@ public class RadialMenu extends GuiScreen {
|
||||
|
||||
tessellator.draw();
|
||||
|
||||
|
||||
//fontRenderer.drawStringWithShadow("Actions", (int) (middleX - buttonDistance - 13) - fontRenderer.getStringWidth("Actions") * 0.5f, (int) middleY - 38, 0xffffffff);
|
||||
String title = "";
|
||||
if (currentBuildMode.options.length > 0) {
|
||||
switch (currentBuildMode.options[0]) {
|
||||
case NORMAL_SPEED:
|
||||
case FAST_SPEED:
|
||||
title = "Build Speed";
|
||||
break;
|
||||
case FULL:
|
||||
case HOLLOW:
|
||||
case CUBE_FULL:
|
||||
case CUBE_HOLLOW:
|
||||
case CUBE_SKELETON:
|
||||
title = "Fill";
|
||||
break;
|
||||
case SHORT_EDGE:
|
||||
case LONG_EDGE:
|
||||
title = "Raised Edge";
|
||||
break;
|
||||
case THICKNESS_1:
|
||||
case THICKNESS_3:
|
||||
case THICKNESS_5:
|
||||
title = "Line Thickness";
|
||||
break;
|
||||
}
|
||||
}
|
||||
fontRenderer.drawStringWithShadow(title, (int) (middleX + buttonDistance - 9), (int) middleY - 44, 0xffffffff);
|
||||
|
||||
|
||||
for (final MenuRegion menuRegion : modes) {
|
||||
|
||||
if (menuRegion.highlighted) {
|
||||
@@ -335,7 +390,8 @@ public class RadialMenu extends GuiScreen {
|
||||
if (button.highlighted) {
|
||||
String text = TextFormatting.AQUA + button.name;
|
||||
int wrap = 120;
|
||||
String keybind = "None";
|
||||
String keybind = "";
|
||||
String keybindFormatted = "";
|
||||
|
||||
//Add keybind in brackets
|
||||
if (button.action == ModeOptions.ActionEnum.UNDO) {
|
||||
@@ -350,7 +406,7 @@ public class RadialMenu extends GuiScreen {
|
||||
if (button.action == ModeOptions.ActionEnum.OPEN_MODIFIER_SETTINGS) {
|
||||
keybind = ClientProxy.keyBindings[0].getDisplayName();
|
||||
}
|
||||
String keybindFormatted = TextFormatting.GRAY + "(" + WordUtils.capitalizeFully(keybind) + ")";
|
||||
if (!keybind.isEmpty()) keybindFormatted = TextFormatting.GRAY + "(" + WordUtils.capitalizeFully(keybind) + ")";
|
||||
|
||||
if (button.textSide == EnumFacing.WEST) {
|
||||
|
||||
@@ -373,10 +429,10 @@ public class RadialMenu extends GuiScreen {
|
||||
} 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);
|
||||
(int) (middleY + button.y1 + 26), wrap, 0xffffffff);
|
||||
|
||||
fontRenderer.drawSplitString(keybindFormatted, (int) (middleX + (button.x1 + button.x2) * 0.5 - fontRenderer.getStringWidth(keybindFormatted) * 0.5),
|
||||
(int) (middleY + button.y1 + 36), wrap, 0xffffffff);
|
||||
(int) (middleY + button.y1 + 38), wrap, 0xffffffff);
|
||||
|
||||
}
|
||||
|
||||
@@ -404,6 +460,10 @@ public class RadialMenu extends GuiScreen {
|
||||
@Override
|
||||
protected void mouseClicked(int mouseX, int mouseY, int mouseButton ) {
|
||||
EffortlessBuilding.log("mouse clicked");
|
||||
|
||||
// KeyBinding.updateKeyBindState();
|
||||
// KeyBinding.setKeyBindState(ClientProxy.keyBindings[3].getKeyCode(), true);
|
||||
|
||||
// if (mouseButton == 0) {
|
||||
// this.mc.displayGuiScreen(null);
|
||||
//
|
||||
|
||||
@@ -21,6 +21,7 @@ import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.math.Vec3d;
|
||||
import net.minecraft.world.IBlockAccess;
|
||||
import net.minecraft.world.World;
|
||||
import nl.requios.effortlessbuilding.BuildConfig;
|
||||
import nl.requios.effortlessbuilding.buildmodifier.ModifierSettingsManager;
|
||||
import nl.requios.effortlessbuilding.compatibility.CompatHelper;
|
||||
|
||||
@@ -198,7 +199,14 @@ public class SurvivalHelper {
|
||||
|
||||
IBlockState state = world.getBlockState(pos);
|
||||
state = state.getBlock().getActualState(state, world, pos);
|
||||
if (state.getMaterial().isToolNotRequired()) return true;
|
||||
|
||||
switch (BuildConfig.survivalBalancers.quickReplaceMiningLevel) {
|
||||
case -1: return state.getMaterial().isToolNotRequired();
|
||||
case 0: return state.getBlock().getHarvestLevel(state) <= 0;
|
||||
case 1: return state.getBlock().getHarvestLevel(state) <= 1;
|
||||
case 2: return state.getBlock().getHarvestLevel(state) <= 2;
|
||||
case 3: return state.getBlock().getHarvestLevel(state) <= 3;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -80,7 +80,7 @@ public class ClientProxy implements IProxy {
|
||||
@Override
|
||||
public void init(FMLInitializationEvent event) {
|
||||
// register key bindings
|
||||
keyBindings = new KeyBinding[7];
|
||||
keyBindings = new KeyBinding[6];
|
||||
|
||||
// instantiate the key bindings
|
||||
keyBindings[0] = new KeyBinding("key.effortlessbuilding.hud.desc", KeyConflictContext.UNIVERSAL, Keyboard.KEY_ADD, "key.effortlessbuilding.category");
|
||||
@@ -96,7 +96,7 @@ public class ClientProxy implements IProxy {
|
||||
};
|
||||
keyBindings[4] = new KeyBinding("key.effortlessbuilding.undo.desc", KeyConflictContext.IN_GAME, KeyModifier.CONTROL, Keyboard.KEY_Z, "key.effortlessbuilding.category");
|
||||
keyBindings[5] = new KeyBinding("key.effortlessbuilding.redo.desc", KeyConflictContext.IN_GAME, KeyModifier.CONTROL, Keyboard.KEY_Y, "key.effortlessbuilding.category");
|
||||
keyBindings[6] = new KeyBinding("Reload shaders", Keyboard.KEY_TAB, "key.effortlessbuilding.category");
|
||||
// keyBindings[6] = new KeyBinding("Reload shaders", Keyboard.KEY_TAB, "key.effortlessbuilding.category");
|
||||
|
||||
// register all the key bindings
|
||||
for (int i = 0; i < keyBindings.length; ++i) {
|
||||
|
||||
@@ -210,7 +210,21 @@ public class RenderHandler implements IWorldEventListener {
|
||||
GlStateManager.rotate(-90.0F, 0.0F, 1.0F, 0.0F);
|
||||
GlStateManager.translate(-0.01f, -0.01f, 0.01f);
|
||||
GlStateManager.scale(1.02f, 1.02f, 1.02f);
|
||||
dispatcher.renderBlockBrightness(blockState, 0.85f);
|
||||
|
||||
try {
|
||||
dispatcher.renderBlockBrightness(blockState, 0.85f);
|
||||
} catch (NullPointerException e) {
|
||||
EffortlessBuilding.logger.warn("RenderHandler::renderBlockPreview cannot render " + blockState.getBlock().toString());
|
||||
|
||||
//Render outline as backup
|
||||
GlStateManager.popMatrix();
|
||||
// ShaderHandler.releaseShader();
|
||||
GL11.glDisable(GL11.GL_LIGHTING);
|
||||
renderBlockOutline(blockPos, new Vec3d(1f, 1f, 1f));
|
||||
GL11.glEnable(GL11.GL_LIGHTING);
|
||||
GlStateManager.pushMatrix();
|
||||
}
|
||||
|
||||
GlStateManager.popMatrix();
|
||||
}
|
||||
|
||||
|
||||
@@ -25,5 +25,15 @@ effortlessbuilding.action.undo=Undo
|
||||
effortlessbuilding.action.redo=Redo
|
||||
effortlessbuilding.action.replace=Replace
|
||||
effortlessbuilding.action.open_modifier_settings=Open Modifier Settings
|
||||
effortlessbuilding.action.normal_speed=Normal
|
||||
effortlessbuilding.action.fast_speed=Fast
|
||||
effortlessbuilding.action.full=Full
|
||||
effortlessbuilding.action.hollow=Hollow
|
||||
effortlessbuilding.action.skeleton=Skeleton
|
||||
effortlessbuilding.action.short_edge=Short Edge
|
||||
effortlessbuilding.action.long_edge=Long Edge
|
||||
effortlessbuilding.action.thickness_1=1 Block Thick
|
||||
effortlessbuilding.action.thickness_3=3 Blocks Thick
|
||||
effortlessbuilding.action.thickness_5=5 Blocks Thick
|
||||
|
||||
commands.reach.usage=/reach <level>
|
||||
|
After Width: | Height: | Size: 331 B |
|
After Width: | Height: | Size: 331 B |
|
After Width: | Height: | Size: 331 B |
|
After Width: | Height: | Size: 331 B |
|
After Width: | Height: | Size: 331 B |
|
After Width: | Height: | Size: 331 B |
|
After Width: | Height: | Size: 331 B |
|
After Width: | Height: | Size: 331 B |
|
After Width: | Height: | Size: 331 B |
|
After Width: | Height: | Size: 331 B |
|
After Width: | Height: | Size: 331 B |
|
After Width: | Height: | Size: 331 B |