Skip to content

Commit c02965c

Browse files
jurrejelleYoungOnionMCgustovafing
authored
Merge 1.20.1 8.0.0 into mui2 refactor (#4448)
Co-authored-by: YoungOnion <39562198+YoungOnionMC@users.noreply.github.com> Co-authored-by: Gustavo <77560533+gustovafing@users.noreply.github.com>
1 parent 0450b41 commit c02965c

File tree

300 files changed

+2301
-3241
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

300 files changed

+2301
-3241
lines changed
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
---
2+
title: "Version 8.0.0"
3+
---
4+
5+
6+
# Updating from `7.4.0` to `8.0.0`
7+
8+
## Machine Refactor
9+
10+
Many aspects of the machine classes have been refactored and changed in order to streamline the machine system and remove legacy and unnecessary abstraction.
11+
12+
### `MetaMachine` and `MetaMachineBlockEntity` merge
13+
14+
- The `MetaMachineBlockEntity`(MMBE) class has been removed, and `MetaMachine`(MM) is now a BlockEntity.
15+
- Most methods and properties of MMBE have been moved onto MM.
16+
- The `IMachineBlockEntity` interface has been removed. Use `MetaMachineBlock` directly instead.
17+
- Many methods common to all block entities have been moved to the `IGregtechBlockEntity` interface.
18+
- Machine instance creation functions have signature `(BlockEntityCreationInfo) -> MetaMachine` instead of `(IMachineBlockEntity) -> MetaMachine`
19+
20+
References to MMBE can generally be replaced with references to MM:
21+
```java
22+
/////// OLD
23+
if (level.getBlockEntity(getPos()) instanceof MetaMachineBlockEntity mmbe) {
24+
MetaMachine machine = mmbe.getMetaMachine();
25+
...
26+
}
27+
28+
////// NEW
29+
if (level.getBlockEntity(getPos()) instanceof MetaMachine machine) {
30+
...
31+
}
32+
```
33+
34+
The `IMachineBlockEntity holder` argument in machine constructors has been replaced with `BlockEntityCreationInfo info`:
35+
```java
36+
////// OLD
37+
public MetaMachine(IMachineBlockEntity holder);
38+
////// NEW
39+
public MetaMachine(BlockEntityCreationInfo info);
40+
```
41+
A number of methods have been renamed across a number of different interfaces and classes to ensure consistency with default BlockEntity methods:
42+
- `BlockPos getPipePos()` -> `BlockPos getBlockPos()`
43+
- `Level getPipeLevel()` -> `Level getLevel()`
44+
- `BlockPos getPos()` -> `BlockPos getBlockPos()`
45+
- `BlockState getState()` -> `BlockState getBlockState()`
46+
- `boolean isInvalid()` -> `boolean isRemoved()`
47+
- `void markAsDirty()` -> `void markAsChanged()`
48+
49+
### Machine constructor and trait initialisation changes
50+
51+
The constructors for a large number of machines have changed in order to simply machine instance creation. Additionally, methods for trait creation have also been removed and now form part of the machine constructor.
52+
53+
#### **All Machines**
54+
- Replace the first constructor argument `IMachineBlockEntity holder` with `BlockEntityCreationInfo info`
55+
#### `TieredEnergyMachine`
56+
- Removed `createEnergyContainer` method
57+
- Constructor now has an optional `Supplier<NotifiableEnergyContainer>` argument
58+
#### `WorkableTieredMachine`
59+
- Removed `createRecipeLogic`, `createImportItemHandler`, `createExportItemHandler`, `createImportFluidHandler`, `createExportFluidHandler` methods
60+
- Added a new constructor:
61+
- `BlockEntityCreationInfo info`
62+
- `int tier`
63+
- `Supplier<RecipeLogic> recipeLogicSupplier` Recipe logic supplier, defaults to the standard `RecipeLogic` class.
64+
- `int importSlots` Item import slots, defaults to the amount of slots in the machine's default recipe type.
65+
- `int exportSlots` Same as above, but for item export slots.
66+
- `int fluidImportSlots` As above, but for fluid import slots.
67+
- `int fluidExportSlots` As above, but for fluid export slots.
68+
- `Int2IntFunction tankScalingFunction` Fluid tank capacity scaling function.
69+
#### `WorkableMultiblockMachine`, `WorkableElectricMultiblockMachine` and `SteamWorkableMachine`
70+
- Removed `createRecipeLogic` method
71+
- Constructor now has an optional `Supplier<RecipeLogic>` argument, defaults to the standard `RecipeLogic` class

src/main/java/com/gregtechceu/gtceu/api/block/IMachineBlock.java

Lines changed: 0 additions & 90 deletions
This file was deleted.

src/main/java/com/gregtechceu/gtceu/api/block/MetaMachineBlock.java

Lines changed: 78 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -6,20 +6,19 @@
66
import com.gregtechceu.gtceu.api.item.MetaMachineItem;
77
import com.gregtechceu.gtceu.api.item.tool.GTToolType;
88
import com.gregtechceu.gtceu.api.item.tool.ToolHelper;
9-
import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity;
109
import com.gregtechceu.gtceu.api.machine.MachineDefinition;
1110
import com.gregtechceu.gtceu.api.machine.MetaMachine;
1211
import com.gregtechceu.gtceu.api.machine.MultiblockMachineDefinition;
1312
import com.gregtechceu.gtceu.api.machine.feature.*;
1413
import com.gregtechceu.gtceu.common.data.GTItems;
1514
import com.gregtechceu.gtceu.common.machine.owner.MachineOwner;
15+
import com.gregtechceu.gtceu.syncsystem.ManagedSyncBlockEntity;
1616
import com.gregtechceu.gtceu.utils.GTUtil;
1717

1818
import net.minecraft.MethodsReturnNonnullByDefault;
1919
import net.minecraft.core.BlockPos;
2020
import net.minecraft.core.Direction;
2121
import net.minecraft.locale.Language;
22-
import net.minecraft.nbt.CompoundTag;
2322
import net.minecraft.network.chat.Component;
2423
import net.minecraft.server.level.ServerPlayer;
2524
import net.minecraft.util.RandomSource;
@@ -37,9 +36,12 @@
3736
import net.minecraft.world.level.BlockGetter;
3837
import net.minecraft.world.level.Level;
3938
import net.minecraft.world.level.block.Block;
39+
import net.minecraft.world.level.block.EntityBlock;
4040
import net.minecraft.world.level.block.RenderShape;
4141
import net.minecraft.world.level.block.Rotation;
4242
import net.minecraft.world.level.block.entity.BlockEntity;
43+
import net.minecraft.world.level.block.entity.BlockEntityTicker;
44+
import net.minecraft.world.level.block.entity.BlockEntityType;
4345
import net.minecraft.world.level.block.state.BlockState;
4446
import net.minecraft.world.level.block.state.StateDefinition;
4547
import net.minecraft.world.level.storage.loot.LootParams;
@@ -60,7 +62,7 @@
6062
@SuppressWarnings("deprecation")
6163
@MethodsReturnNonnullByDefault
6264
@ParametersAreNonnullByDefault
63-
public class MetaMachineBlock extends Block implements IMachineBlock {
65+
public class MetaMachineBlock extends Block implements EntityBlock {
6466

6567
@Getter
6668
public final MachineDefinition definition;
@@ -90,6 +92,10 @@ protected void createBlockStateDefinition(StateDefinition.Builder<Block, BlockSt
9092
}
9193
}
9294

95+
public RotationState getRotationState() {
96+
return getDefinition().getRotationState();
97+
}
98+
9399
@Override
94100
public VoxelShape getShape(BlockState pState, BlockGetter pLevel, BlockPos pPos, CollisionContext pContext) {
95101
return getRotationState() == RotationState.NONE ? definition.getShape(Direction.NORTH) :
@@ -104,7 +110,7 @@ public RenderShape getRenderShape(BlockState state) {
104110
@Override
105111
public void animateTick(BlockState state, Level level, BlockPos pos, RandomSource random) {
106112
super.animateTick(state, level, pos, random);
107-
var machine = getMachine(level, pos);
113+
var machine = MetaMachine.getMachine(level, pos);
108114
if (machine != null) {
109115
machine.animateTick(random);
110116
}
@@ -114,20 +120,9 @@ public void animateTick(BlockState state, Level level, BlockPos pos, RandomSourc
114120
public void setPlacedBy(Level pLevel, BlockPos pPos, BlockState pState, @Nullable LivingEntity player,
115121
ItemStack pStack) {
116122
if (!pLevel.isClientSide) {
117-
var machine = getMachine(pLevel, pPos);
123+
var machine = MetaMachine.getMachine(pLevel, pPos);
118124
if (machine != null) {
119-
if (player instanceof ServerPlayer sPlayer) {
120-
machine.setOwnerUUID(sPlayer.getUUID());
121-
}
122-
}
123-
if (machine instanceof IDropSaveMachine dropSaveMachine) {
124-
CompoundTag tag = pStack.getTag();
125-
if (tag != null) {
126-
dropSaveMachine.loadFromItem(tag);
127-
}
128-
}
129-
if (machine instanceof IMachineLife machineLife) {
130-
machineLife.onMachinePlaced(player, pStack);
125+
machine.onMachinePlaced(player, pStack);
131126
}
132127
}
133128
}
@@ -178,7 +173,8 @@ public BlockState getStateForPlacement(BlockPlaceContext context) {
178173
@Override
179174
public ItemStack getCloneItemStack(BlockGetter level, BlockPos pos, BlockState state) {
180175
ItemStack itemStack = super.getCloneItemStack(level, pos, state);
181-
if (getMachine(level, pos) instanceof IDropSaveMachine dropSaveMachine && dropSaveMachine.savePickClone()) {
176+
if (MetaMachine.getMachine(level, pos) instanceof IDropSaveMachine dropSaveMachine &&
177+
dropSaveMachine.savePickClone()) {
182178
dropSaveMachine.saveToItem(itemStack.getOrCreateTag());
183179
}
184180
return itemStack;
@@ -228,8 +224,7 @@ public BlockState rotate(BlockState pState, Rotation pRotation) {
228224
public List<ItemStack> getDrops(BlockState state, LootParams.Builder builder) {
229225
BlockEntity tileEntity = builder.getOptionalParameter(LootContextParams.BLOCK_ENTITY);
230226
var drops = super.getDrops(state, builder);
231-
if (tileEntity instanceof IMachineBlockEntity holder) {
232-
var machine = holder.getMetaMachine();
227+
if (tileEntity instanceof MetaMachine machine) {
233228
if (machine instanceof IMachineModifyDrops machineModifyDrops) {
234229
machineModifyDrops.onDrops(drops);
235230
}
@@ -250,7 +245,7 @@ public List<ItemStack> getDrops(BlockState state, LootParams.Builder builder) {
250245
public void onRemove(BlockState pState, Level pLevel, BlockPos pPos, BlockState pNewState, boolean pIsMoving) {
251246
if (pState.hasBlockEntity()) {
252247
if (!pState.is(pNewState.getBlock())) { // new block
253-
MetaMachine machine = getMachine(pLevel, pPos);
248+
MetaMachine machine = MetaMachine.getMachine(pLevel, pPos);
254249
if (machine instanceof IMachineLife machineLife) {
255250
machineLife.onMachineRemoved();
256251
}
@@ -266,7 +261,7 @@ public void onRemove(BlockState pState, Level pLevel, BlockPos pPos, BlockState
266261
var oldFacing = pState.getValue(getRotationState().property);
267262
var newFacing = pNewState.getValue(getRotationState().property);
268263
if (newFacing != oldFacing) {
269-
var machine = getMachine(pLevel, pPos);
264+
var machine = MetaMachine.getMachine(pLevel, pPos);
270265
if (machine != null) {
271266
machine.onRotated(oldFacing, newFacing);
272267
}
@@ -278,7 +273,7 @@ public void onRemove(BlockState pState, Level pLevel, BlockPos pPos, BlockState
278273
@Override
279274
public InteractionResult use(BlockState state, Level world, BlockPos pos, Player player, InteractionHand hand,
280275
BlockHitResult hit) {
281-
var machine = getMachine(world, pos);
276+
var machine = MetaMachine.getMachine(world, pos);
282277
ItemStack itemStack = player.getItemInHand(hand);
283278
boolean shouldOpenUi = true;
284279

@@ -325,28 +320,32 @@ public InteractionResult use(BlockState state, Level world, BlockPos pos, Player
325320
return shouldOpenUi ? InteractionResult.PASS : InteractionResult.CONSUME;
326321
}
327322

328-
@Override
329-
@SuppressWarnings("deprecation") // This is fine to override, just not to be called.
330-
public int getSignal(BlockState state, BlockGetter level, BlockPos pos, Direction direction) {
331-
return getMachine(level, pos).getOutputSignal(direction);
323+
//////////////////////////////////////
324+
// ***** Redstone Signals ****//
325+
//////////////////////////////////////
326+
327+
public boolean canConnectRedstone(BlockGetter level, BlockPos pos, Direction side) {
328+
return MetaMachine.getMachine(level, pos).canConnectRedstone(side);
332329
}
333330

334331
@Override
335332
@SuppressWarnings("deprecation") // This is fine to override, just not to be called.
336-
public int getDirectSignal(BlockState state, BlockGetter level, BlockPos pos, Direction direction) {
337-
return getMachine(level, pos).getOutputDirectSignal(direction);
333+
public int getSignal(BlockState state, BlockGetter level, BlockPos pos, Direction direction) {
334+
return MetaMachine.getMachine(level, pos).getOutputSignal(direction);
338335
}
339336

340337
@Override
341338
@SuppressWarnings("deprecation") // This is fine to override, just not to be called.
342339
public int getAnalogOutputSignal(BlockState state, Level level, BlockPos pos) {
343-
return getMachine(level, pos).getAnalogOutputSignal();
340+
return MetaMachine.getMachine(level, pos).getAnalogOutputSignal();
344341
}
345342

343+
/////////
344+
346345
@Override
347346
public void neighborChanged(BlockState state, Level level, BlockPos pos, Block block, BlockPos fromPos,
348347
boolean isMoving) {
349-
var machine = getMachine(level, pos);
348+
var machine = MetaMachine.getMachine(level, pos);
350349
if (machine != null) {
351350
machine.onNeighborChanged(block, fromPos, isMoving);
352351
}
@@ -356,7 +355,7 @@ public void neighborChanged(BlockState state, Level level, BlockPos pos, Block b
356355
@Override
357356
public BlockState getAppearance(BlockState state, BlockAndTintGetter level, BlockPos pos, Direction side,
358357
@Nullable BlockState sourceState, @Nullable BlockPos sourcePos) {
359-
var machine = getMachine(level, pos);
358+
var machine = MetaMachine.getMachine(level, pos);
360359
if (machine != null) {
361360
return machine.getBlockAppearance(state, level, pos, side, sourceState, sourcePos);
362361
}
@@ -368,4 +367,51 @@ public boolean isValidSpawn(BlockState state, BlockGetter level, BlockPos pos, S
368367
EntityType<?> entityType) {
369368
return false;
370369
}
370+
371+
public Direction getFrontFacing(BlockState state) {
372+
return getRotationState() == RotationState.NONE ? Direction.NORTH : state.getValue(getRotationState().property);
373+
}
374+
375+
public static int colorTinted(BlockState blockState, @Nullable BlockAndTintGetter level, @Nullable BlockPos pos,
376+
int index) {
377+
if (level != null && pos != null) {
378+
var machine = MetaMachine.getMachine(level, pos);
379+
if (machine != null) {
380+
return machine.tintColor(index);
381+
}
382+
}
383+
return -1;
384+
}
385+
386+
@Nullable
387+
@Override
388+
public final BlockEntity newBlockEntity(BlockPos pos, BlockState state) {
389+
return getDefinition().getBlockEntityType().create(pos, state);
390+
}
391+
392+
@Nullable
393+
@Override
394+
public <T extends BlockEntity> BlockEntityTicker<T> getTicker(Level level, BlockState state,
395+
BlockEntityType<T> blockEntityType) {
396+
if (blockEntityType == getDefinition().getBlockEntityType()) {
397+
if (!level.isClientSide) {
398+
return (pLevel, pPos, pState, pTile) -> {
399+
pTile.setChanged();
400+
if (pTile instanceof MetaMachine metaMachine) {
401+
metaMachine.serverTick();
402+
}
403+
if (pTile instanceof ManagedSyncBlockEntity syncObj) {
404+
syncObj.updateTick();
405+
}
406+
};
407+
} else {
408+
return (pLevel, pPos, pState, pTile) -> {
409+
if (pTile instanceof MetaMachine metaMachine) {
410+
metaMachine.clientTick();
411+
}
412+
};
413+
}
414+
}
415+
return null;
416+
}
371417
}

0 commit comments

Comments
 (0)