Bug and Lang Fixes

- Patched some localization gaps from the registry wipe
- TE's with an ItemStackHandler capability are now viable for mounted storage
- Fixed pulley placing down ropes when destroyed while moving
- Fixed inconsistency with glue removal and placement
This commit is contained in:
simibubi 2020-06-08 18:40:21 +02:00
parent 752bcf06c0
commit 285cb52894
15 changed files with 92 additions and 76 deletions

View File

@ -325,7 +325,7 @@ c77b46d8b459e5c7cc495393546f3fcca8a1fa1d assets\create\blockstates\weathered_lim
7f39521b211441f5c3e06d60c5978cebe16cacfb assets\create\blockstates\zinc_block.json 7f39521b211441f5c3e06d60c5978cebe16cacfb assets\create\blockstates\zinc_block.json
b7181bcd8182b2f17088e5aa881f374c9c65470c assets\create\blockstates\zinc_ore.json b7181bcd8182b2f17088e5aa881f374c9c65470c assets\create\blockstates\zinc_ore.json
4311c87a21caccb97b693bf914c8ce79de3f814b assets\create\lang\en_ud.json 4311c87a21caccb97b693bf914c8ce79de3f814b assets\create\lang\en_ud.json
67a3e70e553c0b079967fd1142049641a3d3aa3f assets\create\lang\en_us.json c3dad9e33623a13cadd63f53e88acf316e9c4ba6 assets\create\lang\en_us.json
846200eb548d3bfa2e77b41039de159b4b6cfb45 assets\create\models\block\acacia_window.json 846200eb548d3bfa2e77b41039de159b4b6cfb45 assets\create\models\block\acacia_window.json
1930fa3a3c98d53dd19e4ee7f55bc27fd47aa281 assets\create\models\block\acacia_window_pane_noside.json 1930fa3a3c98d53dd19e4ee7f55bc27fd47aa281 assets\create\models\block\acacia_window_pane_noside.json
1763ea2c9b981d187f5031ba608f3d5d3be3986a assets\create\models\block\acacia_window_pane_noside_alt.json 1763ea2c9b981d187f5031ba608f3d5d3be3986a assets\create\models\block\acacia_window_pane_noside_alt.json
@ -1270,7 +1270,6 @@ e4225555a12384f2607d5ac65e790fb774beecc8 data\create\advancements\crafter.json
d1fbc14303c7327e9fc02e505e7e434591b7f785 data\create\advancements\crushing_wheel.json d1fbc14303c7327e9fc02e505e7e434591b7f785 data\create\advancements\crushing_wheel.json
0761f3e12d587fec7a2ddf326b43969d262771e3 data\create\advancements\deforester.json 0761f3e12d587fec7a2ddf326b43969d262771e3 data\create\advancements\deforester.json
e4e3c1bd7ecf501b40cffc26d8ad145ab4e89118 data\create\advancements\deployer.json e4e3c1bd7ecf501b40cffc26d8ad145ab4e89118 data\create\advancements\deployer.json
7280e15d67926f5911b6d75b62369d86fc98af27 data\create\advancements\drill.json
77edd30e3d60b4d492662c673387910f66b5a276 data\create\advancements\dual_extendo_grip.json 77edd30e3d60b4d492662c673387910f66b5a276 data\create\advancements\dual_extendo_grip.json
04eaf829696d735244c0e4798dd3bdeb26e13a32 data\create\advancements\electron_tube.json 04eaf829696d735244c0e4798dd3bdeb26e13a32 data\create\advancements\electron_tube.json
31c9541b0be08cde351b9a07696bd675514bbcb8 data\create\advancements\extendo_grip.json 31c9541b0be08cde351b9a07696bd675514bbcb8 data\create\advancements\extendo_grip.json
@ -1278,6 +1277,8 @@ e4e3c1bd7ecf501b40cffc26d8ad145ab4e89118 data\create\advancements\deployer.json
62f3610188f7dbd3900ab305edc2d06282705a38 data\create\advancements\goggles.json 62f3610188f7dbd3900ab305edc2d06282705a38 data\create\advancements\goggles.json
7e12b7ccb198ef0db7964b8cbef152d8347e333c data\create\advancements\its_alive.json 7e12b7ccb198ef0db7964b8cbef152d8347e333c data\create\advancements\its_alive.json
3d0fc63191ef507a018ef996ebf9406a523f3976 data\create\advancements\lava_wheel.json 3d0fc63191ef507a018ef996ebf9406a523f3976 data\create\advancements\lava_wheel.json
786c2058805ceca3cd3970cc6e918560b54747f5 data\create\advancements\mechanical_drill.json
41444ae151ce90d2d68dcda0ed3565f98509c594 data\create\advancements\mechanical_saw.json
9c7f0c2484a84ccf42166704475fafcb1f232ce6 data\create\advancements\millstone.json 9c7f0c2484a84ccf42166704475fafcb1f232ce6 data\create\advancements\millstone.json
704c7fc0ed357b1a116ffdc0b6c64fe64e337a5a data\create\advancements\mixer.json 704c7fc0ed357b1a116ffdc0b6c64fe64e337a5a data\create\advancements\mixer.json
a135eec618e448f440d9f42cc7a3e6c63fc45a71 data\create\advancements\overstressed.json a135eec618e448f440d9f42cc7a3e6c63fc45a71 data\create\advancements\overstressed.json
@ -1661,14 +1662,13 @@ e548127075559307b767b802f4809ed52eedd543 data\create\advancements\recipes\create
9790a16fd56e47cb5abbfad4062672303c224d9f data\create\advancements\recipes\create.palettes\weathered_limestone_pillar_from_weathered_limestone_stonecutting.json 9790a16fd56e47cb5abbfad4062672303c224d9f data\create\advancements\recipes\create.palettes\weathered_limestone_pillar_from_weathered_limestone_stonecutting.json
e0b9edc5e59647e7dd99be17369b263dadf407d4 data\create\advancements\refined_radiance.json e0b9edc5e59647e7dd99be17369b263dadf407d4 data\create\advancements\refined_radiance.json
fc12b590ab8f5ac901db21c67ba3850f157e1421 data\create\advancements\root.json fc12b590ab8f5ac901db21c67ba3850f157e1421 data\create\advancements\root.json
48f5e6b05378ef3851892f6df7d706b77255f068 data\create\advancements\saw.json
8529fc7919b6a3240ede2bb8043906bb72fb7f9e data\create\advancements\shadow_end.json 8529fc7919b6a3240ede2bb8043906bb72fb7f9e data\create\advancements\shadow_end.json
c1f162e773518f6b1481221e3e63f9ba33fed647 data\create\advancements\shadow_steel.json c1f162e773518f6b1481221e3e63f9ba33fed647 data\create\advancements\shadow_steel.json
290e1248254abcfd7f1e73906be25662331378ec data\create\advancements\shifting_gears.json 290e1248254abcfd7f1e73906be25662331378ec data\create\advancements\shifting_gears.json
7eac9a5f9f96087a74cab1576c59b1b4a9f99ffe data\create\advancements\speed_gauge.json fedeed4c9be574d7c5ddd68b4ab74588f345d3c6 data\create\advancements\speedometer.json
b457a54be7202999be24bb6bcce534f310489412 data\create\advancements\stress_gauge.json 44910ea5533c1236fbb185587a58b299a30b0c66 data\create\advancements\stressometer.json
1d7fb82b7c05914b399167dc58b84da10f1a5ae3 data\create\advancements\symmetry_wand.json
6b815a2e05e3cd09354e05578515a0060675b67a data\create\advancements\upgraded_zapper.json 6b815a2e05e3cd09354e05578515a0060675b67a data\create\advancements\upgraded_zapper.json
fe37896bb804d2be9b8abf3744c5b9b7bc1c086e data\create\advancements\wand_of_symmetry.json
50935316d27336ef0858d5a7c5ccc563d288a494 data\create\advancements\water_wheel.json 50935316d27336ef0858d5a7c5ccc563d288a494 data\create\advancements\water_wheel.json
4513d0c4dd40c948028a3fc8e6f3b4d0356c0a90 data\create\advancements\wrench.json 4513d0c4dd40c948028a3fc8e6f3b4d0356c0a90 data\create\advancements\wrench.json
33c1224f4f6a7bb0a3439eb0f8b8af9341b62574 data\create\advancements\zapper.json 33c1224f4f6a7bb0a3439eb0f8b8af9341b62574 data\create\advancements\zapper.json

View File

@ -1138,31 +1138,31 @@
"block.create.radial_chassis.tooltip.control1": "When R-Clicked with Slime Ball", "block.create.radial_chassis.tooltip.control1": "When R-Clicked with Slime Ball",
"block.create.radial_chassis.tooltip.action1": "Makes the clicked face _Sticky_. When Chassis move, all designated blocks attached to the sticky side are moved with it.", "block.create.radial_chassis.tooltip.action1": "Makes the clicked face _Sticky_. When Chassis move, all designated blocks attached to the sticky side are moved with it.",
"block.create.mechanical_drill.tooltip": "MECHANICAL mechanical_drill", "block.create.mechanical_drill.tooltip": "MECHANICAL DRILL",
"block.create.mechanical_drill.tooltip.summary": "A mechanical device suitable for _breaking_ _blocks_. It is movable with _Mechanical_ _Pistons_, _Bearings_ or other controllers.", "block.create.mechanical_drill.tooltip.summary": "A mechanical device suitable for _breaking_ _blocks_. It is movable with _Mechanical_ _Pistons_, _Bearings_ or other controllers.",
"block.create.mechanical_drill.tooltip.condition1": "When Rotated", "block.create.mechanical_drill.tooltip.condition1": "When Rotated",
"block.create.mechanical_drill.tooltip.behaviour1": "Acts as a _stationary_ Block Breaker. Also _hurts_ _entities_ in its effective area.", "block.create.mechanical_drill.tooltip.behaviour1": "Acts as a _stationary_ Block Breaker. Also _hurts_ _entities_ in its effective area.",
"block.create.mechanical_drill.tooltip.condition2": "While Moving", "block.create.mechanical_drill.tooltip.condition2": "While Moving",
"block.create.mechanical_drill.tooltip.behaviour2": "Breaks Blocks with which the mechanical_drill collides.", "block.create.mechanical_drill.tooltip.behaviour2": "Breaks Blocks with which the drill collides.",
"block.create.mechanical_harvester.tooltip": "MECHANICAL mechanical_harvester", "block.create.mechanical_harvester.tooltip": "MECHANICAL HARVESTER",
"block.create.mechanical_harvester.tooltip.summary": "A mechanical plant cutter suitable for medium scale crop automation. It is movable with _Mechanical_ _Pistons_, _Bearings_ or other controllers.", "block.create.mechanical_harvester.tooltip.summary": "A mechanical plant cutter suitable for medium scale crop automation. It is movable with _Mechanical_ _Pistons_, _Bearings_ or other controllers.",
"block.create.mechanical_harvester.tooltip.condition1": "While Moving", "block.create.mechanical_harvester.tooltip.condition1": "While Moving",
"block.create.mechanical_harvester.tooltip.behaviour1": "_Harvests_ all _mature_ _crops_ which which the blade collides and reset them to their initial growth state.", "block.create.mechanical_harvester.tooltip.behaviour1": "_Harvests_ all _mature_ _crops_ which which the blade collides and reset them to their initial growth state.",
"block.create.mechanical_plough.tooltip": "MECHANICAL mechanical_plough", "block.create.mechanical_plough.tooltip": "MECHANICAL PLOUGH",
"block.create.mechanical_plough.tooltip.summary": "A mechanical mechanical_plough has a variety of uses. It is movable with _Mechanical_ _Pistons_, _Bearings_ or other controllers.", "block.create.mechanical_plough.tooltip.summary": "A mechanical plough has a variety of uses. It is movable with _Mechanical_ _Pistons_, _Bearings_ or other controllers.",
"block.create.mechanical_plough.tooltip.condition1": "While Moving", "block.create.mechanical_plough.tooltip.condition1": "While Moving",
"block.create.mechanical_plough.tooltip.behaviour1": "_Breaks_ _blocks_ which _cannot_ _be_ _collided_ with, such as torches, tracks or snow layers. _Applies_ its _motion_ to _entities_ without hurting them. _Tills_ _soil_ _blocks_ as though a Hoe would be used on them.", "block.create.mechanical_plough.tooltip.behaviour1": "_Breaks_ _blocks_ which _cannot_ _be_ _collided_ with, such as torches, tracks or snow layers. _Applies_ its _motion_ to _entities_ without hurting them. _Tills_ _soil_ _blocks_ as though a Hoe would be used on them.",
"block.create.mechanical_saw.tooltip": "MECHANICAL mechanical_saw", "block.create.mechanical_saw.tooltip": "MECHANICAL SAW",
"block.create.mechanical_saw.tooltip.summary": "Suitable for _cutting_ _trees_ effectively and for _cutting_ _blocks_ into their carpentered counterparts. It is movable using _Mechanical_ _Pistons_ or _Bearings_.", "block.create.mechanical_saw.tooltip.summary": "Suitable for _cutting_ _trees_ effectively and for _cutting_ _blocks_ into their carpentered counterparts. It is movable using _Mechanical_ _Pistons_ or _Bearings_.",
"block.create.mechanical_saw.tooltip.condition1": "When facing up", "block.create.mechanical_saw.tooltip.condition1": "When facing up",
"block.create.mechanical_saw.tooltip.behaviour1": "Applies _mechanical_sawing_ and _Stonecutting_ _Recipes_ to items dropped onto or inserted into it. When multiple outputs are possible, it cycles through them unless a _filter_ is assigned.", "block.create.mechanical_saw.tooltip.behaviour1": "Applies _Sawing_ and _Stonecutting_ _Recipes_ to items dropped onto or inserted into it. When multiple outputs are possible, it cycles through them unless a _filter_ is assigned.",
"block.create.mechanical_saw.tooltip.condition2": "When facing horizontally", "block.create.mechanical_saw.tooltip.condition2": "When facing horizontally",
"block.create.mechanical_saw.tooltip.behaviour2": "_Breaks_ _logs_ in front of it. If the log supported a tree on its own, the _tree_ _will_ _collapse_ away from the mechanical_saw.", "block.create.mechanical_saw.tooltip.behaviour2": "_Breaks_ _logs_ in front of it. If the log supported a tree on its own, the _tree_ _will_ _collapse_ away from the saw.",
"block.create.mechanical_saw.tooltip.condition3": "While Moving", "block.create.mechanical_saw.tooltip.condition3": "While Moving",
"block.create.mechanical_saw.tooltip.behaviour3": "_Cuts_ all _Trees_ with which the mechanical_saw collides.", "block.create.mechanical_saw.tooltip.behaviour3": "_Cuts_ all _Trees_ with which the saw collides.",
"block.create.stockpile_switch.tooltip": "stockpile_switch", "block.create.stockpile_switch.tooltip": "stockpile_switch",
"block.create.stockpile_switch.tooltip.summary": "Toggles a Redstone signal based on the _Storage_ _Space_ in the attached Container.", "block.create.stockpile_switch.tooltip.summary": "Toggles a Redstone signal based on the _Storage_ _Space_ in the attached Container.",
@ -1189,10 +1189,10 @@
"block.create.redstone_contact.tooltip": "REDSTONE CONTACT", "block.create.redstone_contact.tooltip": "REDSTONE CONTACT",
"block.create.redstone_contact.tooltip.summary": "Only emits redstone power in pairs. It is movable with _Mechanical_ _Pistons_, _Bearings_ or other controllers.", "block.create.redstone_contact.tooltip.summary": "Only emits redstone power in pairs. It is movable with _Mechanical_ _Pistons_, _Bearings_ or other controllers.",
"block.create.redstone_contact.tooltip.condition1": "When facing other redstone_contact", "block.create.redstone_contact.tooltip.condition1": "When facing other Contact",
"block.create.redstone_contact.tooltip.behaviour1": "Provides a _Redstone_ _Signal_.", "block.create.redstone_contact.tooltip.behaviour1": "Provides a _Redstone_ _Signal_.",
"block.create.redstone_contact.tooltip.condition2": "While Moving", "block.create.redstone_contact.tooltip.condition2": "While Moving",
"block.create.redstone_contact.tooltip.behaviour2": "Triggers all stationary redstone_contacts it passes.", "block.create.redstone_contact.tooltip.behaviour2": "Triggers all stationary contacts it passes.",
"block.create.adjustable_crate.tooltip": "ADJUSTABLE CRATE", "block.create.adjustable_crate.tooltip": "ADJUSTABLE CRATE",
"block.create.adjustable_crate.tooltip.summary": "This _Storage_ _Container_ allows Manual control over its capacity. It can hold up to _16_ _Stacks_ of any Item. Supports _Redstone_ _Comparators_.", "block.create.adjustable_crate.tooltip.summary": "This _Storage_ _Container_ allows Manual control over its capacity. It can hold up to _16_ _Stacks_ of any Item. Supports _Redstone_ _Comparators_.",

View File

@ -5,10 +5,10 @@
"item": "create:mechanical_drill" "item": "create:mechanical_drill"
}, },
"title": { "title": {
"translate": "advancement.create.drill" "translate": "advancement.create.mechanical_drill"
}, },
"description": { "description": {
"translate": "advancement.create.drill.desc" "translate": "advancement.create.mechanical_drill.desc"
}, },
"frame": "task", "frame": "task",
"show_toast": true, "show_toast": true,

View File

@ -5,10 +5,10 @@
"item": "create:mechanical_saw" "item": "create:mechanical_saw"
}, },
"title": { "title": {
"translate": "advancement.create.saw" "translate": "advancement.create.mechanical_saw"
}, },
"description": { "description": {
"translate": "advancement.create.saw.desc" "translate": "advancement.create.mechanical_saw.desc"
}, },
"frame": "task", "frame": "task",
"show_toast": true, "show_toast": true,

View File

@ -5,10 +5,10 @@
"item": "create:speedometer" "item": "create:speedometer"
}, },
"title": { "title": {
"translate": "advancement.create.speed_gauge" "translate": "advancement.create.speedometer"
}, },
"description": { "description": {
"translate": "advancement.create.speed_gauge.desc" "translate": "advancement.create.speedometer.desc"
}, },
"frame": "task", "frame": "task",
"show_toast": true, "show_toast": true,

View File

@ -5,10 +5,10 @@
"item": "create:stressometer" "item": "create:stressometer"
}, },
"title": { "title": {
"translate": "advancement.create.stress_gauge" "translate": "advancement.create.stressometer"
}, },
"description": { "description": {
"translate": "advancement.create.stress_gauge.desc" "translate": "advancement.create.stressometer.desc"
}, },
"frame": "task", "frame": "task",
"show_toast": true, "show_toast": true,

View File

@ -5,10 +5,10 @@
"item": "create:wand_of_symmetry" "item": "create:wand_of_symmetry"
}, },
"title": { "title": {
"translate": "advancement.create.symmetry_wand" "translate": "advancement.create.wand_of_symmetry"
}, },
"description": { "description": {
"translate": "advancement.create.symmetry_wand.desc" "translate": "advancement.create.wand_of_symmetry.desc"
}, },
"frame": "task", "frame": "task",
"show_toast": true, "show_toast": true,

View File

@ -381,7 +381,7 @@ public abstract class KineticTileEntity extends SmartTileEntity
boolean notFastEnough = !isSpeedRequirementFulfilled() && getSpeed() != 0; boolean notFastEnough = !isSpeedRequirementFulfilled() && getSpeed() != 0;
if (overStressed && AllConfigs.CLIENT.enableOverstressedTooltip.get()) { if (overStressed && AllConfigs.CLIENT.enableOverstressedTooltip.get()) {
tooltip.add(spacing + GOLD + Lang.translate("gui.stress_gauge.overstressed")); tooltip.add(spacing + GOLD + Lang.translate("gui.stressometer.overstressed"));
String hint = Lang.translate("gui.contraptions.network_overstressed", I18n.format(getBlockState().getBlock() String hint = Lang.translate("gui.contraptions.network_overstressed", I18n.format(getBlockState().getBlock()
.getTranslationKey())); .getTranslationKey()));
List<String> cutString = TooltipHelper.cutString(spacing + hint, GRAY, TextFormatting.WHITE); List<String> cutString = TooltipHelper.cutString(spacing + hint, GRAY, TextFormatting.WHITE);

View File

@ -12,6 +12,7 @@ import net.minecraft.tileentity.ChestTileEntity;
import net.minecraft.tileentity.ShulkerBoxTileEntity; import net.minecraft.tileentity.ShulkerBoxTileEntity;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraft.tileentity.TileEntityType; import net.minecraft.tileentity.TileEntityType;
import net.minecraftforge.common.util.LazyOptional;
import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.CapabilityItemHandler;
import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.IItemHandler;
import net.minecraftforge.items.IItemHandlerModifiable; import net.minecraftforge.items.IItemHandlerModifiable;
@ -37,19 +38,26 @@ public class MountedStorage {
// Split double chests // Split double chests
if (te.getType() == TileEntityType.CHEST || te.getType() == TileEntityType.TRAPPED_CHEST) { if (te.getType() == TileEntityType.CHEST || te.getType() == TileEntityType.TRAPPED_CHEST) {
if (te.getBlockState().get(ChestBlock.TYPE) != ChestType.SINGLE) if (te.getBlockState()
te.getWorld().setBlockState(te.getPos(), te.getBlockState().with(ChestBlock.TYPE, ChestType.SINGLE)); .get(ChestBlock.TYPE) != ChestType.SINGLE)
te.getWorld()
.setBlockState(te.getPos(), te.getBlockState()
.with(ChestBlock.TYPE, ChestType.SINGLE));
te.updateContainingBlockInfo(); te.updateContainingBlockInfo();
} }
// Split double flexcrates // Split double flexcrates
if (AllTileEntities.ADJUSTABLE_CRATE.is(te)) { if (AllTileEntities.ADJUSTABLE_CRATE.is(te)) {
if (te.getBlockState().get(AdjustableCrateBlock.DOUBLE)) if (te.getBlockState()
te.getWorld().setBlockState(te.getPos(), te.getBlockState().with(AdjustableCrateBlock.DOUBLE, false)); .get(AdjustableCrateBlock.DOUBLE))
te.getWorld()
.setBlockState(te.getPos(), te.getBlockState()
.with(AdjustableCrateBlock.DOUBLE, false));
te.updateContainingBlockInfo(); te.updateContainingBlockInfo();
} }
IItemHandler teHandler = te.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY).orElse(dummyHandler); IItemHandler teHandler = te.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY)
.orElse(dummyHandler);
if (teHandler == dummyHandler) if (teHandler == dummyHandler)
return; return;
@ -82,7 +90,8 @@ public class MountedStorage {
} }
public void fill(TileEntity te) { public void fill(TileEntity te) {
IItemHandler teHandler = te.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY).orElse(dummyHandler); IItemHandler teHandler = te.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY)
.orElse(dummyHandler);
if (teHandler != dummyHandler && teHandler instanceof IItemHandlerModifiable) { if (teHandler != dummyHandler && teHandler instanceof IItemHandlerModifiable) {
IItemHandlerModifiable inv = (IItemHandlerModifiable) teHandler; IItemHandlerModifiable inv = (IItemHandlerModifiable) teHandler;
for (int slot = 0; slot < Math.min(inv.getSlots(), handler.getSlots()); slot++) for (int slot = 0; slot < Math.min(inv.getSlots(), handler.getSlots()); slot++)
@ -113,6 +122,9 @@ public class MountedStorage {
return true; return true;
if (te instanceof BarrelTileEntity) if (te instanceof BarrelTileEntity)
return true; return true;
LazyOptional<IItemHandler> capability = te.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY);
if (capability.isPresent() && capability.orElse(null) instanceof ItemStackHandler)
return true;
return false; return false;
} }

View File

@ -92,22 +92,24 @@ public class PulleyTileEntity extends LinearActuatorTileEntity {
applyContraptionPosition(); applyContraptionPosition();
if (!world.isRemote) { if (!world.isRemote) {
if (offset > 0) { if (!removed) {
BlockPos magnetPos = pos.down((int) offset); if (offset > 0) {
world.destroyBlock(magnetPos, world.getBlockState(magnetPos) BlockPos magnetPos = pos.down((int) offset);
.getCollisionShape(world, magnetPos) world.destroyBlock(magnetPos, world.getBlockState(magnetPos)
.isEmpty()); .getCollisionShape(world, magnetPos)
world.setBlockState(magnetPos, AllBlocks.PULLEY_MAGNET.getDefaultState(), 66); .isEmpty());
} world.setBlockState(magnetPos, AllBlocks.PULLEY_MAGNET.getDefaultState(), 66);
}
for (int i = 1; i <= ((int) offset) - 1; i++) { for (int i = 1; i <= ((int) offset) - 1; i++) {
BlockPos ropePos = pos.down(i); BlockPos ropePos = pos.down(i);
world.destroyBlock(ropePos, world.getBlockState(ropePos) world.destroyBlock(ropePos, world.getBlockState(ropePos)
.getCollisionShape(world, ropePos) .getCollisionShape(world, ropePos)
.isEmpty()); .isEmpty());
}
for (int i = 1; i <= ((int) offset) - 1; i++)
world.setBlockState(pos.down(i), AllBlocks.ROPE.getDefaultState(), 66);
} }
for (int i = 1; i <= ((int) offset) - 1; i++)
world.setBlockState(pos.down(i), AllBlocks.ROPE.getDefaultState(), 66);
if (movedContraption != null) if (movedContraption != null)
movedContraption.disassemble(); movedContraption.disassemble();

View File

@ -49,10 +49,10 @@ public class SpeedGaugeTileEntity extends GaugeTileEntity{
public boolean addToGoggleTooltip(List<String> tooltip, boolean isPlayerSneaking) { public boolean addToGoggleTooltip(List<String> tooltip, boolean isPlayerSneaking) {
super.addToGoggleTooltip(tooltip, isPlayerSneaking); super.addToGoggleTooltip(tooltip, isPlayerSneaking);
tooltip.add(spacing + TextFormatting.GRAY + Lang.translate("gui.speed_gauge.title")); tooltip.add(spacing + TextFormatting.GRAY + Lang.translate("gui.speedometer.title"));
tooltip.add(spacing + SpeedLevel.getFormattedSpeedText(speed, overStressed)); tooltip.add(spacing + SpeedLevel.getFormattedSpeedText(speed, overStressed));
if (overStressed) if (overStressed)
tooltip.add(spacing + TextFormatting.DARK_RED + Lang.translate("gui.stress_gauge.overstressed")); tooltip.add(spacing + TextFormatting.DARK_RED + Lang.translate("gui.stressometer.overstressed"));
return true; return true;
} }

View File

@ -65,15 +65,15 @@ public class StressGaugeTileEntity extends GaugeTileEntity {
double capacity = getNetworkCapacity(); double capacity = getNetworkCapacity();
double stressFraction = getNetworkStress() / (capacity == 0 ? 1 : capacity); double stressFraction = getNetworkStress() / (capacity == 0 ? 1 : capacity);
tooltip.add(spacing + TextFormatting.GRAY + Lang.translate("gui.stress_gauge.title")); tooltip.add(spacing + TextFormatting.GRAY + Lang.translate("gui.stressometer.title"));
if (getTheoreticalSpeed() == 0) if (getTheoreticalSpeed() == 0)
tooltip.add(TextFormatting.DARK_GRAY + ItemDescription.makeProgressBar(3, -1) tooltip.add(TextFormatting.DARK_GRAY + ItemDescription.makeProgressBar(3, -1)
+ Lang.translate("gui.stress_gauge.no_rotation")); + Lang.translate("gui.stressometer.no_rotation"));
else { else {
tooltip.add(spacing + StressImpact.getFormattedStressText(stressFraction)); tooltip.add(spacing + StressImpact.getFormattedStressText(stressFraction));
tooltip.add(spacing + TextFormatting.GRAY + Lang.translate("gui.stress_gauge.capacity")); tooltip.add(spacing + TextFormatting.GRAY + Lang.translate("gui.stressometer.capacity"));
double remainingCapacity = capacity - getNetworkStress(); double remainingCapacity = capacity - getNetworkStress();
double remainingCapacityAtBase = remainingCapacity / Math.abs(getTheoreticalSpeed()); double remainingCapacityAtBase = remainingCapacity / Math.abs(getTheoreticalSpeed());

View File

@ -117,6 +117,8 @@ public class ExtendoGripItem extends Item {
ClientPlayerEntity player = mc.player; ClientPlayerEntity player = mc.player;
if (mc.world == null || player == null) if (mc.world == null || player == null)
return; return;
if (!isHoldingExtendoGrip(player))
return;
// Modified version of GameRenderer#getMouseOver // Modified version of GameRenderer#getMouseOver
double d0 = player.getAttribute(PlayerEntity.REACH_DISTANCE) double d0 = player.getAttribute(PlayerEntity.REACH_DISTANCE)

View File

@ -81,8 +81,8 @@ public class AllAdvancements implements IDataProvider {
andesiteExpertLane(t, andesite_casing); andesiteExpertLane(t, andesite_casing);
Advancement drill = Advancement drill =
kinecticAdvancement("drill", AllBlocks.MECHANICAL_DRILL.get(), TaskType.NORMAL).withParent(andesite_casing) kinecticAdvancement("mechanical_drill", AllBlocks.MECHANICAL_DRILL.get(), TaskType.NORMAL).withParent(andesite_casing)
.register(t, id + ":drill"); .register(t, id + ":mechanical_drill");
Advancement press = Advancement press =
advancement("press", AllBlocks.MECHANICAL_PRESS.get(), TaskType.MILESTONE).withParent(andesite_casing) advancement("press", AllBlocks.MECHANICAL_PRESS.get(), TaskType.MILESTONE).withParent(andesite_casing)
@ -98,8 +98,8 @@ public class AllAdvancements implements IDataProvider {
itemAdvancement("electron_tube", AllItems.ELECTRON_TUBE, TaskType.NORMAL).withParent(rose_quartz) itemAdvancement("electron_tube", AllItems.ELECTRON_TUBE, TaskType.NORMAL).withParent(rose_quartz)
.register(t, id + ":electron_tube"); .register(t, id + ":electron_tube");
Advancement saw = kinecticAdvancement("saw", AllBlocks.MECHANICAL_SAW.get(), TaskType.NORMAL).withParent(press) Advancement saw = kinecticAdvancement("mechanical_saw", AllBlocks.MECHANICAL_SAW.get(), TaskType.NORMAL).withParent(press)
.register(t, id + ":saw"); .register(t, id + ":mechanical_saw");
Advancement basin = advancement("basin", AllBlocks.BASIN.get(), TaskType.NORMAL).withParent(press) Advancement basin = advancement("basin", AllBlocks.BASIN.get(), TaskType.NORMAL).withParent(press)
.withCriterion("0", placeBlock(AllBlocks.BASIN.get())) .withCriterion("0", placeBlock(AllBlocks.BASIN.get()))
@ -143,12 +143,12 @@ public class AllAdvancements implements IDataProvider {
.register(t, id + ":goggles"); .register(t, id + ":goggles");
Advancement speed_gauge = Advancement speed_gauge =
kinecticAdvancement("speed_gauge", AllBlocks.SPEEDOMETER.get(), TaskType.NORMAL).withParent(goggles) kinecticAdvancement("speedometer", AllBlocks.SPEEDOMETER.get(), TaskType.NORMAL).withParent(goggles)
.register(t, id + ":speed_gauge"); .register(t, id + ":speedometer");
Advancement stress_gauge = Advancement stress_gauge =
kinecticAdvancement("stress_gauge", AllBlocks.STRESSOMETER.get(), TaskType.NORMAL).withParent(goggles) kinecticAdvancement("stressometer", AllBlocks.STRESSOMETER.get(), TaskType.NORMAL).withParent(goggles)
.register(t, id + ":stress_gauge"); .register(t, id + ":stressometer");
Advancement shifting_gears = Advancement shifting_gears =
advancement("shifting_gears", AllBlocks.LARGE_COGWHEEL.get(), TaskType.NORMAL).withParent(its_alive) advancement("shifting_gears", AllBlocks.LARGE_COGWHEEL.get(), TaskType.NORMAL).withParent(its_alive)
@ -239,8 +239,8 @@ public class AllAdvancements implements IDataProvider {
.register(t, id + ":upgraded_zapper"); .register(t, id + ":upgraded_zapper");
Advancement symmetry_wand = Advancement symmetry_wand =
itemAdvancement("symmetry_wand", AllItems.WAND_OF_SYMMETRY, TaskType.NORMAL).withParent(refined_radiance) itemAdvancement("wand_of_symmetry", AllItems.WAND_OF_SYMMETRY, TaskType.NORMAL).withParent(refined_radiance)
.register(t, id + ":symmetry_wand"); .register(t, id + ":wand_of_symmetry");
Advancement shadow_end = deadEnd().withParent(shadow_steel) Advancement shadow_end = deadEnd().withParent(shadow_steel)
.withCriterion("0", itemGathered(AllItems.SHADOW_STEEL.get())) .withCriterion("0", itemGathered(AllItems.SHADOW_STEEL.get()))

View File

@ -236,7 +236,7 @@
"block.create.furnace_engine.tooltip.behaviour1": "_Starts_ _powering_ a _Flywheel_ placed in front of it (1m apart). Use a Blast Furnace for higher speeds.", "block.create.furnace_engine.tooltip.behaviour1": "_Starts_ _powering_ a _Flywheel_ placed in front of it (1m apart). Use a Blast Furnace for higher speeds.",
"block.create.flywheel.tooltip": "FLYWHEEL", "block.create.flywheel.tooltip": "FLYWHEEL",
"block.create.flywheel.tooltip.summary": "A large metal wheel to _harness_ _and_ _stabilize_ generated force by an _attached_ _Engine_. Flywheels connect to engines if they are _1m_ _apart_ and at a _90°_ _Angle_ from each other.", "block.create.flywheel.tooltip.summary": "A large metal wheel to _harness_ _and_ _stabilize_ generated force by an _attached_ _Engine_. Flywheels connect to engines if they are _1m_ _apart_ and at a _90\u00B0_ _Angle_ from each other.",
"block.create.flywheel.tooltip.condition1": "When Attached to Running Engine", "block.create.flywheel.tooltip.condition1": "When Attached to Running Engine",
"block.create.flywheel.tooltip.behaviour1": "Provides _Rotational_ _Force_ to a connected contraption based on the generator's strength and speed.", "block.create.flywheel.tooltip.behaviour1": "Provides _Rotational_ _Force_ to a connected contraption based on the generator's strength and speed.",
@ -314,31 +314,31 @@
"block.create.radial_chassis.tooltip.control1": "When R-Clicked with Slime Ball", "block.create.radial_chassis.tooltip.control1": "When R-Clicked with Slime Ball",
"block.create.radial_chassis.tooltip.action1": "Makes the clicked face _Sticky_. When Chassis move, all designated blocks attached to the sticky side are moved with it.", "block.create.radial_chassis.tooltip.action1": "Makes the clicked face _Sticky_. When Chassis move, all designated blocks attached to the sticky side are moved with it.",
"block.create.mechanical_drill.tooltip": "MECHANICAL mechanical_drill", "block.create.mechanical_drill.tooltip": "MECHANICAL DRILL",
"block.create.mechanical_drill.tooltip.summary": "A mechanical device suitable for _breaking_ _blocks_. It is movable with _Mechanical_ _Pistons_, _Bearings_ or other controllers.", "block.create.mechanical_drill.tooltip.summary": "A mechanical device suitable for _breaking_ _blocks_. It is movable with _Mechanical_ _Pistons_, _Bearings_ or other controllers.",
"block.create.mechanical_drill.tooltip.condition1": "When Rotated", "block.create.mechanical_drill.tooltip.condition1": "When Rotated",
"block.create.mechanical_drill.tooltip.behaviour1": "Acts as a _stationary_ Block Breaker. Also _hurts_ _entities_ in its effective area.", "block.create.mechanical_drill.tooltip.behaviour1": "Acts as a _stationary_ Block Breaker. Also _hurts_ _entities_ in its effective area.",
"block.create.mechanical_drill.tooltip.condition2": "While Moving", "block.create.mechanical_drill.tooltip.condition2": "While Moving",
"block.create.mechanical_drill.tooltip.behaviour2": "Breaks Blocks with which the mechanical_drill collides.", "block.create.mechanical_drill.tooltip.behaviour2": "Breaks Blocks with which the drill collides.",
"block.create.mechanical_harvester.tooltip": "MECHANICAL mechanical_harvester", "block.create.mechanical_harvester.tooltip": "MECHANICAL HARVESTER",
"block.create.mechanical_harvester.tooltip.summary": "A mechanical plant cutter suitable for medium scale crop automation. It is movable with _Mechanical_ _Pistons_, _Bearings_ or other controllers.", "block.create.mechanical_harvester.tooltip.summary": "A mechanical plant cutter suitable for medium scale crop automation. It is movable with _Mechanical_ _Pistons_, _Bearings_ or other controllers.",
"block.create.mechanical_harvester.tooltip.condition1": "While Moving", "block.create.mechanical_harvester.tooltip.condition1": "While Moving",
"block.create.mechanical_harvester.tooltip.behaviour1": "_Harvests_ all _mature_ _crops_ which which the blade collides and reset them to their initial growth state.", "block.create.mechanical_harvester.tooltip.behaviour1": "_Harvests_ all _mature_ _crops_ which which the blade collides and reset them to their initial growth state.",
"block.create.mechanical_plough.tooltip": "MECHANICAL mechanical_plough", "block.create.mechanical_plough.tooltip": "MECHANICAL PLOUGH",
"block.create.mechanical_plough.tooltip.summary": "A mechanical mechanical_plough has a variety of uses. It is movable with _Mechanical_ _Pistons_, _Bearings_ or other controllers.", "block.create.mechanical_plough.tooltip.summary": "A mechanical plough has a variety of uses. It is movable with _Mechanical_ _Pistons_, _Bearings_ or other controllers.",
"block.create.mechanical_plough.tooltip.condition1": "While Moving", "block.create.mechanical_plough.tooltip.condition1": "While Moving",
"block.create.mechanical_plough.tooltip.behaviour1": "_Breaks_ _blocks_ which _cannot_ _be_ _collided_ with, such as torches, tracks or snow layers. _Applies_ its _motion_ to _entities_ without hurting them. _Tills_ _soil_ _blocks_ as though a Hoe would be used on them.", "block.create.mechanical_plough.tooltip.behaviour1": "_Breaks_ _blocks_ which _cannot_ _be_ _collided_ with, such as torches, tracks or snow layers. _Applies_ its _motion_ to _entities_ without hurting them. _Tills_ _soil_ _blocks_ as though a Hoe would be used on them.",
"block.create.mechanical_saw.tooltip": "MECHANICAL mechanical_saw", "block.create.mechanical_saw.tooltip": "MECHANICAL SAW",
"block.create.mechanical_saw.tooltip.summary": "Suitable for _cutting_ _trees_ effectively and for _cutting_ _blocks_ into their carpentered counterparts. It is movable using _Mechanical_ _Pistons_ or _Bearings_.", "block.create.mechanical_saw.tooltip.summary": "Suitable for _cutting_ _trees_ effectively and for _cutting_ _blocks_ into their carpentered counterparts. It is movable using _Mechanical_ _Pistons_ or _Bearings_.",
"block.create.mechanical_saw.tooltip.condition1": "When facing up", "block.create.mechanical_saw.tooltip.condition1": "When facing up",
"block.create.mechanical_saw.tooltip.behaviour1": "Applies _mechanical_sawing_ and _Stonecutting_ _Recipes_ to items dropped onto or inserted into it. When multiple outputs are possible, it cycles through them unless a _filter_ is assigned.", "block.create.mechanical_saw.tooltip.behaviour1": "Applies _Sawing_ and _Stonecutting_ _Recipes_ to items dropped onto or inserted into it. When multiple outputs are possible, it cycles through them unless a _filter_ is assigned.",
"block.create.mechanical_saw.tooltip.condition2": "When facing horizontally", "block.create.mechanical_saw.tooltip.condition2": "When facing horizontally",
"block.create.mechanical_saw.tooltip.behaviour2": "_Breaks_ _logs_ in front of it. If the log supported a tree on its own, the _tree_ _will_ _collapse_ away from the mechanical_saw.", "block.create.mechanical_saw.tooltip.behaviour2": "_Breaks_ _logs_ in front of it. If the log supported a tree on its own, the _tree_ _will_ _collapse_ away from the saw.",
"block.create.mechanical_saw.tooltip.condition3": "While Moving", "block.create.mechanical_saw.tooltip.condition3": "While Moving",
"block.create.mechanical_saw.tooltip.behaviour3": "_Cuts_ all _Trees_ with which the mechanical_saw collides.", "block.create.mechanical_saw.tooltip.behaviour3": "_Cuts_ all _Trees_ with which the saw collides.",
"block.create.stockpile_switch.tooltip": "stockpile_switch", "block.create.stockpile_switch.tooltip": "stockpile_switch",
"block.create.stockpile_switch.tooltip.summary": "Toggles a Redstone signal based on the _Storage_ _Space_ in the attached Container.", "block.create.stockpile_switch.tooltip.summary": "Toggles a Redstone signal based on the _Storage_ _Space_ in the attached Container.",
@ -365,10 +365,10 @@
"block.create.redstone_contact.tooltip": "REDSTONE CONTACT", "block.create.redstone_contact.tooltip": "REDSTONE CONTACT",
"block.create.redstone_contact.tooltip.summary": "Only emits redstone power in pairs. It is movable with _Mechanical_ _Pistons_, _Bearings_ or other controllers.", "block.create.redstone_contact.tooltip.summary": "Only emits redstone power in pairs. It is movable with _Mechanical_ _Pistons_, _Bearings_ or other controllers.",
"block.create.redstone_contact.tooltip.condition1": "When facing other redstone_contact", "block.create.redstone_contact.tooltip.condition1": "When facing other Contact",
"block.create.redstone_contact.tooltip.behaviour1": "Provides a _Redstone_ _Signal_.", "block.create.redstone_contact.tooltip.behaviour1": "Provides a _Redstone_ _Signal_.",
"block.create.redstone_contact.tooltip.condition2": "While Moving", "block.create.redstone_contact.tooltip.condition2": "While Moving",
"block.create.redstone_contact.tooltip.behaviour2": "Triggers all stationary redstone_contacts it passes.", "block.create.redstone_contact.tooltip.behaviour2": "Triggers all stationary contacts it passes.",
"block.create.adjustable_crate.tooltip": "ADJUSTABLE CRATE", "block.create.adjustable_crate.tooltip": "ADJUSTABLE CRATE",
"block.create.adjustable_crate.tooltip.summary": "This _Storage_ _Container_ allows Manual control over its capacity. It can hold up to _16_ _Stacks_ of any Item. Supports _Redstone_ _Comparators_.", "block.create.adjustable_crate.tooltip.summary": "This _Storage_ _Container_ allows Manual control over its capacity. It can hold up to _16_ _Stacks_ of any Item. Supports _Redstone_ _Comparators_.",