Playtest Issues

- Connected texture contexts are no longer queried for invisible faces
- Shafts and cogs now place inpendent of the preffered orientation when sneaking
- Moving block breakers no longer apply damage to itementities
- Fixed inconsistent block collision prediction for pistons when assembling
- Sequenced Gearshift no longer resets when UI closed without changes
- Minor Improvements to Seq. Gearshift UI usablilty
- Fixed encoding issues with degree symbol
- Fertilized Trees no longer replace semi-solid/collideable blocks with their leaves
This commit is contained in:
simibubi 2020-03-13 20:33:25 +01:00
parent 8cb5dac2c9
commit 73f41ccce8
9 changed files with 38 additions and 39 deletions

View file

@ -55,7 +55,7 @@ public class CTModel extends BakedModelWrapper<IBakedModel> {
CTData data = new CTData(); CTData data = new CTData();
for (Direction face : Direction.values()) { for (Direction face : Direction.values()) {
if (state.isNormalCube(world, pos) && !Block.shouldSideBeRendered(state, world, pos, face)) if (!Block.shouldSideBeRendered(state, world, pos, face))
continue; continue;
CTSpriteShiftEntry spriteShift = behaviour.get(state, face); CTSpriteShiftEntry spriteShift = behaviour.get(state, face);
if (spriteShift == null) if (spriteShift == null)
@ -88,9 +88,9 @@ public class CTModel extends BakedModelWrapper<IBakedModel> {
float uShift = spriteShift.getUShift(index); float uShift = spriteShift.getUShift(index);
float vShift = spriteShift.getVShift(index); float vShift = spriteShift.getVShift(index);
BakedQuad newQuad = new BakedQuad(Arrays.copyOf(quad.getVertexData(), quad.getVertexData().length), BakedQuad newQuad =
quad.getTintIndex(), quad.getFace(), quad.getSprite(), quad.shouldApplyDiffuseLighting(), new BakedQuad(Arrays.copyOf(quad.getVertexData(), quad.getVertexData().length), quad.getTintIndex(),
quad.getFormat()); quad.getFace(), quad.getSprite(), quad.shouldApplyDiffuseLighting(), quad.getFormat());
VertexFormat format = quad.getFormat(); VertexFormat format = quad.getFormat();
int[] vertexData = newQuad.getVertexData(); int[] vertexData = newQuad.getVertexData();

View file

@ -66,10 +66,9 @@ public abstract class RotatedPillarKineticBlock extends KineticBlock {
@Override @Override
public BlockState getStateForPlacement(BlockItemUseContext context) { public BlockState getStateForPlacement(BlockItemUseContext context) {
Axis preferredAxis = getPreferredAxis(context); Axis preferredAxis = getPreferredAxis(context);
if (preferredAxis != null) if (preferredAxis != null && !context.isPlacerSneaking())
return this.getDefaultState().with(AXIS, preferredAxis); return this.getDefaultState().with(AXIS, preferredAxis);
return this.getDefaultState().with(AXIS, context.isPlacerSneaking() ? context.getFace().getAxis() return this.getDefaultState().with(AXIS, context.getNearestLookingDirection().getAxis());
: context.getNearestLookingDirection().getAxis());
} }
@Override @Override

View file

@ -6,6 +6,7 @@ import com.simibubi.create.modules.contraptions.components.contraptions.Movement
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.entity.Entity; import net.minecraft.entity.Entity;
import net.minecraft.entity.item.ItemEntity;
import net.minecraft.nbt.CompoundNBT; import net.minecraft.nbt.CompoundNBT;
import net.minecraft.nbt.NBTUtil; import net.minecraft.nbt.NBTUtil;
import net.minecraft.util.DamageSource; import net.minecraft.util.DamageSource;
@ -36,6 +37,8 @@ public class BlockBreakingMovementBehaviour extends MovementBehaviour {
if (damageSource == null) if (damageSource == null)
return; return;
for (Entity entity : world.getEntitiesWithinAABB(Entity.class, new AxisAlignedBB(pos))) { for (Entity entity : world.getEntitiesWithinAABB(Entity.class, new AxisAlignedBB(pos))) {
if (entity instanceof ItemEntity)
return;
float damage = (float) MathHelper.clamp(Math.abs(context.relativeMotion.length() * 10) + 1, 5, 20); float damage = (float) MathHelper.clamp(Math.abs(context.relativeMotion.length() * 10) + 1, 5, 20);
entity.attackEntityFrom(damageSource, damage); entity.attackEntityFrom(damageSource, damage);
entity.setMotion(entity.getMotion().add(context.relativeMotion.scale(3))); entity.setMotion(entity.getMotion().add(context.relativeMotion.scale(3)));

View file

@ -3,6 +3,7 @@ package com.simibubi.create.modules.contraptions.components.contraptions.piston;
import com.simibubi.create.AllBlocks; import com.simibubi.create.AllBlocks;
import com.simibubi.create.AllTileEntities; import com.simibubi.create.AllTileEntities;
import com.simibubi.create.foundation.behaviour.ValueBoxTransform; import com.simibubi.create.foundation.behaviour.ValueBoxTransform;
import com.simibubi.create.foundation.utility.Debug;
import com.simibubi.create.foundation.utility.ServerSpeedProvider; import com.simibubi.create.foundation.utility.ServerSpeedProvider;
import com.simibubi.create.modules.contraptions.base.IRotate; import com.simibubi.create.modules.contraptions.base.IRotate;
import com.simibubi.create.modules.contraptions.components.contraptions.ContraptionCollider; import com.simibubi.create.modules.contraptions.components.contraptions.ContraptionCollider;
@ -14,6 +15,7 @@ import net.minecraft.nbt.CompoundNBT;
import net.minecraft.state.properties.BlockStateProperties; import net.minecraft.state.properties.BlockStateProperties;
import net.minecraft.util.Direction; import net.minecraft.util.Direction;
import net.minecraft.util.Direction.Axis; import net.minecraft.util.Direction.Axis;
import net.minecraft.util.Direction.AxisDirection;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.Vec3d; import net.minecraft.util.math.Vec3d;
@ -45,7 +47,9 @@ public class MechanicalPistonTileEntity extends LinearActuatorTileEntity {
// Collect Construct // Collect Construct
PistonContraption contraption = PistonContraption.movePistonAt(world, pos, direction, getMovementSpeed() < 0); PistonContraption contraption = PistonContraption.movePistonAt(world, pos, direction, getMovementSpeed() < 0);
Direction movementDirection = getSpeed() > 0 ? direction : direction.getOpposite(); Direction positive = Direction.getFacingFromAxis(AxisDirection.POSITIVE, direction.getAxis());
Direction movementDirection =
getSpeed() > 0 ^ direction.getAxis() != Axis.Z ? positive : positive.getOpposite();
if (contraption != null) { if (contraption != null) {
BlockPos anchor = contraption.getAnchor().offset(direction, contraption.initialExtensionProgress); BlockPos anchor = contraption.getAnchor().offset(direction, contraption.initialExtensionProgress);
@ -99,7 +103,7 @@ public class MechanicalPistonTileEntity extends LinearActuatorTileEntity {
@Override @Override
public void collided() { public void collided() {
super.collided(); super.collided();
if (!running && getSpeed() > 0) if (!running && getMovementSpeed() > 0)
assembleNextTick = true; assembleNextTick = true;
} }

View file

@ -1,7 +1,5 @@
package com.simibubi.create.modules.contraptions.relays.advanced.sequencer; package com.simibubi.create.modules.contraptions.relays.advanced.sequencer;
import java.util.Vector;
import com.simibubi.create.foundation.packet.TileEntityConfigurationPacket; import com.simibubi.create.foundation.packet.TileEntityConfigurationPacket;
import net.minecraft.nbt.CompoundNBT; import net.minecraft.nbt.CompoundNBT;
@ -14,9 +12,9 @@ public class ConfigureSequencedGearshiftPacket extends TileEntityConfigurationPa
private ListNBT instructions; private ListNBT instructions;
public ConfigureSequencedGearshiftPacket(BlockPos pos, Vector<Instruction> instructions) { public ConfigureSequencedGearshiftPacket(BlockPos pos, ListNBT instructions) {
super(pos); super(pos);
this.instructions = Instruction.serializeAll(instructions); this.instructions = instructions;
} }
public ConfigureSequencedGearshiftPacket(PacketBuffer buffer) { public ConfigureSequencedGearshiftPacket(PacketBuffer buffer) {

View file

@ -13,6 +13,7 @@ import com.simibubi.create.foundation.gui.widgets.SelectionScrollInput;
import com.simibubi.create.foundation.utility.Lang; import com.simibubi.create.foundation.utility.Lang;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.nbt.ListNBT;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
public class SequencedGearshiftScreen extends AbstractSimiScreen { public class SequencedGearshiftScreen extends AbstractSimiScreen {
@ -21,7 +22,7 @@ public class SequencedGearshiftScreen extends AbstractSimiScreen {
private static final ScreenResources background = ScreenResources.SEQUENCER; private static final ScreenResources background = ScreenResources.SEQUENCER;
private final String title = Lang.translate("gui.sequenced_gearshift.title"); private final String title = Lang.translate("gui.sequenced_gearshift.title");
private int lastModification; private ListNBT compareTag;
private Vector<Instruction> instructions; private Vector<Instruction> instructions;
private BlockPos pos; private BlockPos pos;
@ -30,7 +31,7 @@ public class SequencedGearshiftScreen extends AbstractSimiScreen {
public SequencedGearshiftScreen(SequencedGearshiftTileEntity te) { public SequencedGearshiftScreen(SequencedGearshiftTileEntity te) {
this.instructions = te.instructions; this.instructions = te.instructions;
this.pos = te.getPos(); this.pos = te.getPos();
lastModification = -1; compareTag = Instruction.serializeAll(instructions);
} }
@Override @Override
@ -145,21 +146,11 @@ public class SequencedGearshiftScreen extends AbstractSimiScreen {
font.drawStringWithShadow(text, guiLeft + x, guiTop + 26 + y, 0xFFFFEE); font.drawStringWithShadow(text, guiLeft + x, guiTop + 26 + y, 0xFFFFEE);
} }
@Override
public void tick() {
super.tick();
if (lastModification >= 0)
lastModification++;
if (lastModification >= 20) {
lastModification = -1;
sendPacket();
}
}
public void sendPacket() { public void sendPacket() {
AllPackets.channel.sendToServer(new ConfigureSequencedGearshiftPacket(pos, instructions)); ListNBT serialized = Instruction.serializeAll(instructions);
if (serialized.equals(compareTag))
return;
AllPackets.channel.sendToServer(new ConfigureSequencedGearshiftPacket(pos, serialized));
} }
@Override @Override
@ -176,6 +167,7 @@ public class SequencedGearshiftScreen extends AbstractSimiScreen {
private void instructionUpdated(int index, int state) { private void instructionUpdated(int index, int state) {
SequencerInstructions newValue = SequencerInstructions.values()[state]; SequencerInstructions newValue = SequencerInstructions.values()[state];
instructions.get(index).instruction = newValue; instructions.get(index).instruction = newValue;
instructions.get(index).value = newValue.defaultValue;
updateParamsOfRow(index); updateParamsOfRow(index);
if (newValue == SequencerInstructions.END) { if (newValue == SequencerInstructions.END) {
for (int i = instructions.size() - 1; i > index; i--) { for (int i = instructions.size() - 1; i > index; i--) {

View file

@ -8,9 +8,9 @@ import com.simibubi.create.foundation.utility.Lang;
public enum SequencerInstructions { public enum SequencerInstructions {
TURN_ANGLE("angle", ScreenResources.SEQUENCER_INSTRUCTION, true, true, 360, 45), TURN_ANGLE("angle", ScreenResources.SEQUENCER_INSTRUCTION, true, true, 360, 45, 90),
TURN_DISTANCE("distance", ScreenResources.SEQUENCER_INSTRUCTION, true, true, 50, 5), TURN_DISTANCE("distance", ScreenResources.SEQUENCER_INSTRUCTION, true, true, 50, 5, 5),
WAIT("duration", ScreenResources.SEQUENCER_WAIT, true, false, 600, 20), WAIT("duration", ScreenResources.SEQUENCER_WAIT, true, false, 600, 20, 10),
END("", ScreenResources.SEQUENCER_END), END("", ScreenResources.SEQUENCER_END),
; ;
@ -22,18 +22,20 @@ public enum SequencerInstructions {
ScreenResources background; ScreenResources background;
int maxValue; int maxValue;
int shiftStep; int shiftStep;
int defaultValue;
private SequencerInstructions(String parameterName, ScreenResources background) { private SequencerInstructions(String parameterName, ScreenResources background) {
this(parameterName, background, false, false, -1, -1); this(parameterName, background, false, false, -1, -1, -1);
} }
private SequencerInstructions(String parameterName, ScreenResources background, boolean hasValueParameter, private SequencerInstructions(String parameterName, ScreenResources background, boolean hasValueParameter,
boolean hasSpeedParameter, int maxValue, int shiftStep) { boolean hasSpeedParameter, int maxValue, int shiftStep, int defaultValue) {
this.hasValueParameter = hasValueParameter; this.hasValueParameter = hasValueParameter;
this.hasSpeedParameter = hasSpeedParameter; this.hasSpeedParameter = hasSpeedParameter;
this.background = background; this.background = background;
this.maxValue = maxValue; this.maxValue = maxValue;
this.shiftStep = shiftStep; this.shiftStep = shiftStep;
this.defaultValue = defaultValue;
translationKey = "gui.sequenced_gearshift.instruction." + Lang.asId(name()); translationKey = "gui.sequenced_gearshift.instruction." + Lang.asId(name());
parameterKey = translationKey + "." + parameterName; parameterKey = translationKey + "." + parameterName;
} }
@ -44,15 +46,15 @@ public enum SequencerInstructions {
options.add(Lang.translate(entry.translationKey)); options.add(Lang.translate(entry.translationKey));
return options; return options;
} }
String formatValue(int value) { String formatValue(int value) {
if (this == TURN_ANGLE) if (this == TURN_ANGLE)
return value + "°"; return value + Lang.translate("generic.unit.degrees");
if (this == TURN_DISTANCE) if (this == TURN_DISTANCE)
return value + "m"; return value + "m";
if (this == WAIT) { if (this == WAIT) {
if (value >= 20) if (value >= 20)
return (value / 20) + "s"; return (value / 20) + "s";
return value + "t"; return value + "t";
} }
return "" + value; return "" + value;

View file

@ -49,8 +49,8 @@ public class TreeFertilizerItem extends Item {
if (context.getWorld().getBlockState(actualPos).getBlockHardness(context.getWorld(), actualPos) == -1) if (context.getWorld().getBlockState(actualPos).getBlockHardness(context.getWorld(), actualPos) == -1)
continue; continue;
// Don't replace solid blocks with leaves // Don't replace solid blocks with leaves
if (!world.getBlockState(pos).isNormalCube(world, pos) if (!world.getBlockState(pos).isNormalCube(world, pos) && !context.getWorld().getBlockState(actualPos)
&& context.getWorld().getBlockState(actualPos).isNormalCube(context.getWorld(), actualPos)) .getCollisionShape(context.getWorld(), actualPos).isEmpty())
continue; continue;
if (world.getBlockState(pos).getBlock() == Blocks.GRASS_BLOCK if (world.getBlockState(pos).getBlock() == Blocks.GRASS_BLOCK
|| world.getBlockState(pos).getBlock() == Blocks.PODZOL) || world.getBlockState(pos).getBlock() == Blocks.PODZOL)

View file

@ -312,6 +312,7 @@
"create.generic.unit.minutes": "Minutes", "create.generic.unit.minutes": "Minutes",
"create.generic.unit.rpm": "rpm", "create.generic.unit.rpm": "rpm",
"create.generic.unit.stress": "su", "create.generic.unit.stress": "su",
"create.generic.unit.degrees": "°",
"create.action.scroll": "Scroll", "create.action.scroll": "Scroll",
"create.action.confirm": "Confirm", "create.action.confirm": "Confirm",