Skip to content

Commit e162ab6

Browse files
committed
添加了ME机械样板镜像,用于共享机械样板供应器的空间进行并行工作
允许ME机械样板供应器在AE2接口终端中显示,很遗憾是基于mixin实现的(同时对NAE2的样板工具兼容),可能需要ae2uel0.56.7才能正确地本地化? 修复了结构预览写入样板终端时的一些错误,现在写入的方块将和看到的完全一致 修复了机械样板供应器独立缓存槽内有不足一次配方的流体时,无法消耗缓存内流体的问题
1 parent 185120c commit e162ab6

28 files changed

Lines changed: 708 additions & 41 deletions

build.gradle.kts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,7 @@ dependencies {
203203

204204
// AE2 Compat
205205
// implementation(rfg.deobf("curse.maven:applied-energistics-2-223794:2747063"))
206-
implementation(rfg.deobf("curse.maven:ae2-extended-life-570458:5378163"))
206+
implementation(rfg.deobf("curse.maven:ae2-extended-life-570458:6302098"))
207207
implementation(rfg.deobf("curse.maven:ae2-fluid-crafting-rework-623955:5504001"))
208208
implementation(rfg.deobf("curse.maven:mekanism-energistics-1027681:5408319"))
209209

@@ -233,6 +233,7 @@ dependencies {
233233
// Optimization
234234
implementation(rfg.deobf("curse.maven:stellarcore-1064321:5560444"))
235235
implementation(rfg.deobf("curse.maven:configanytime-870276:5212709"))
236+
implementation(rfg.deobf("curse.maven:nae2-884359:5380800"))
236237
}
237238

238239
// Publishing to a Maven repository

src/main/java/github/kasuminova/mmce/client/gui/widget/impl/preview/MachineStructurePreviewPanel.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,10 @@ public class MachineStructurePreviewPanel extends Row {
4848

4949
protected final WorldSceneRendererWidget renderer;
5050

51+
public WorldSceneRendererWidget getRenderer(){
52+
return renderer;
53+
}
54+
5155
public MachineStructurePreviewPanel(final DynamicMachine machine) {
5256
renderer = (WorldSceneRendererWidget) new WorldSceneRendererWidget(machine)
5357
.setWidthHeight(WORLD_RENDERER_WIDTH, WORLD_RENDERER_HEIGHT)
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
package github.kasuminova.mmce.common.block.appeng;
2+
3+
import appeng.api.implementations.items.IMemoryCard;
4+
import appeng.api.implementations.items.MemoryCardMessages;
5+
import github.kasuminova.mmce.common.tile.MEPatternMirrorImage;
6+
import hellfirepvp.modularmachinery.common.CommonProxy;
7+
import hellfirepvp.modularmachinery.common.block.BlockMachineComponent;
8+
import net.minecraft.block.SoundType;
9+
import net.minecraft.block.material.Material;
10+
import net.minecraft.block.state.IBlockState;
11+
import net.minecraft.client.resources.I18n;
12+
import net.minecraft.entity.player.EntityPlayer;
13+
import net.minecraft.nbt.NBTTagCompound;
14+
import net.minecraft.tileentity.TileEntity;
15+
import net.minecraft.util.BlockRenderLayer;
16+
import net.minecraft.util.EnumBlockRenderType;
17+
import net.minecraft.util.EnumFacing;
18+
import net.minecraft.util.EnumHand;
19+
import net.minecraft.util.math.BlockPos;
20+
import net.minecraft.util.text.TextComponentString;
21+
import net.minecraft.world.World;
22+
import net.minecraftforge.fml.relauncher.Side;
23+
import net.minecraftforge.fml.relauncher.SideOnly;
24+
25+
import javax.annotation.Nonnull;
26+
import javax.annotation.Nullable;
27+
28+
public class BlockMEPatternMirrorImage extends BlockMachineComponent {
29+
30+
public BlockMEPatternMirrorImage() {
31+
super(Material.IRON);
32+
setHardness(2F);
33+
setResistance(10F);
34+
setSoundType(SoundType.METAL);
35+
setHarvestLevel("pickaxe", 1);
36+
setCreativeTab(CommonProxy.creativeTabModularMachinery);
37+
}
38+
39+
final String mep = "tile.modularmachinery.blockmepatternprovider";
40+
41+
@Override
42+
public boolean onBlockActivated(
43+
@Nonnull World worldIn, @Nonnull BlockPos pos, @Nonnull IBlockState state,
44+
@Nonnull EntityPlayer player, @Nonnull EnumHand hand,
45+
@Nonnull EnumFacing facing,
46+
float hitX, float hitY, float hitZ)
47+
{
48+
if (worldIn.isRemote || hand != EnumHand.MAIN_HAND)return false;
49+
final MEPatternMirrorImage tileEntity = (MEPatternMirrorImage) worldIn.getTileEntity(pos);
50+
if (!player.getHeldItem(hand).isEmpty()) {
51+
var heldItem = player.getHeldItem(hand);
52+
if (!player.isSneaking()) {
53+
if (heldItem.getItem() instanceof IMemoryCard memoryCard) {
54+
final String savedName = memoryCard.getSettingsName(heldItem);
55+
final NBTTagCompound data = memoryCard.getData(heldItem);
56+
57+
if (mep.equals(savedName)) {
58+
tileEntity.providerPos = BlockPos.fromLong(data.getLong("Pos"));
59+
player.sendStatusMessage(new TextComponentString(I18n.format("message.blockmepatternprovider.load")),false);
60+
} else {
61+
memoryCard.notifyUser(player, MemoryCardMessages.INVALID_MACHINE);
62+
}
63+
64+
return true;
65+
}
66+
}
67+
}
68+
var pPos = tileEntity.providerPos;
69+
if (tileEntity.providerPos == null) {
70+
player.sendStatusMessage(new TextComponentString(I18n.format("message.blockmepatternprovider.tip0")), false);
71+
} else {
72+
player.sendStatusMessage(new TextComponentString(I18n.format("message.blockmepatternprovider.tip1",pPos.getX(),pPos.getY(),pPos.getZ())), false);
73+
}
74+
return true;
75+
}
76+
77+
@Nullable
78+
@Override
79+
public TileEntity createTileEntity(World world, IBlockState state) {
80+
return new MEPatternMirrorImage();
81+
}
82+
83+
@Nullable
84+
@Override
85+
public TileEntity createNewTileEntity(World worldIn, int meta) {
86+
return new MEPatternMirrorImage();
87+
}
88+
89+
@Nonnull
90+
@Override
91+
@SideOnly(Side.CLIENT)
92+
public BlockRenderLayer getRenderLayer() {
93+
return BlockRenderLayer.CUTOUT;
94+
}
95+
96+
@Nonnull
97+
@Override
98+
public EnumBlockRenderType getRenderType(@Nonnull IBlockState state) {
99+
return EnumBlockRenderType.MODEL;
100+
}
101+
}

src/main/java/github/kasuminova/mmce/common/block/appeng/BlockMEPatternProvider.java

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
package github.kasuminova.mmce.common.block.appeng;
22

3+
import appeng.api.implementations.items.IMemoryCard;
34
import github.kasuminova.mmce.common.tile.MEPatternProvider;
45
import hellfirepvp.modularmachinery.ModularMachinery;
56
import hellfirepvp.modularmachinery.common.CommonProxy;
67
import hellfirepvp.modularmachinery.common.lib.ItemsMM;
78
import net.minecraft.block.state.IBlockState;
9+
import net.minecraft.client.resources.I18n;
810
import net.minecraft.entity.EntityLivingBase;
911
import net.minecraft.entity.player.EntityPlayer;
1012
import net.minecraft.item.ItemStack;
@@ -13,6 +15,7 @@
1315
import net.minecraft.util.EnumFacing;
1416
import net.minecraft.util.EnumHand;
1517
import net.minecraft.util.math.BlockPos;
18+
import net.minecraft.util.text.TextComponentString;
1619
import net.minecraft.world.World;
1720

1821
import javax.annotation.Nonnull;
@@ -23,16 +26,30 @@ public class BlockMEPatternProvider extends BlockMEMachineComponent {
2326
@Override
2427
public boolean onBlockActivated(
2528
@Nonnull World worldIn, @Nonnull BlockPos pos, @Nonnull IBlockState state,
26-
@Nonnull EntityPlayer playerIn, @Nonnull EnumHand hand,
29+
@Nonnull EntityPlayer player, @Nonnull EnumHand hand,
2730
@Nonnull EnumFacing facing,
2831
float hitX, float hitY, float hitZ)
2932
{
30-
if (!worldIn.isRemote) {
31-
TileEntity te = worldIn.getTileEntity(pos);
32-
if (te instanceof MEPatternProvider) {
33-
playerIn.openGui(ModularMachinery.MODID, CommonProxy.GuiType.ME_PATTERN_PROVIDER.ordinal(), worldIn, pos.getX(), pos.getY(), pos.getZ());
33+
if (worldIn.isRemote)return false;
34+
if (hand == EnumHand.MAIN_HAND && !player.getHeldItem(hand).isEmpty()) {
35+
var heldItem = player.getHeldItem(hand);
36+
if (player.isSneaking()) {
37+
if (heldItem.getItem() instanceof IMemoryCard memoryCard) {
38+
final String name = this.getTranslationKey();
39+
40+
final NBTTagCompound data = new NBTTagCompound();
41+
data.setLong("Pos",pos.toLong());
42+
memoryCard.setMemoryCardContents(heldItem, name, data);
43+
player.sendStatusMessage(new TextComponentString(I18n.format("message.blockmepatternprovider.save")),false);
44+
45+
return true;
46+
}
3447
}
3548
}
49+
TileEntity te = worldIn.getTileEntity(pos);
50+
if (te instanceof MEPatternProvider) {
51+
player.openGui(ModularMachinery.MODID, CommonProxy.GuiType.ME_PATTERN_PROVIDER.ordinal(), worldIn, pos.getX(), pos.getY(), pos.getZ());
52+
}
3653
return true;
3754
}
3855

@@ -86,5 +103,4 @@ public void onBlockPlacedBy(@Nonnull final World worldIn,
86103
provider.readProviderNBT(tag.getCompoundTag("patternProvider"));
87104
}
88105
}
89-
90106
}
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
package github.kasuminova.mmce.common.tile;
2+
3+
import github.kasuminova.mmce.common.util.InfItemFluidHandler;
4+
import hellfirepvp.modularmachinery.common.crafting.ComponentType;
5+
import hellfirepvp.modularmachinery.common.lib.ComponentTypesMM;
6+
import hellfirepvp.modularmachinery.common.machine.IOType;
7+
import hellfirepvp.modularmachinery.common.machine.MachineComponent;
8+
import hellfirepvp.modularmachinery.common.tiles.base.MachineComponentTile;
9+
import hellfirepvp.modularmachinery.common.tiles.base.SelectiveUpdateTileEntity;
10+
import hellfirepvp.modularmachinery.common.tiles.base.TileColorableMachineComponent;
11+
import net.minecraft.nbt.NBTTagCompound;
12+
import net.minecraft.tileentity.TileEntity;
13+
import net.minecraft.util.math.BlockPos;
14+
15+
import javax.annotation.Nullable;
16+
17+
public class MEPatternMirrorImage extends TileColorableMachineComponent implements SelectiveUpdateTileEntity, MachineComponentTile {
18+
19+
public BlockPos providerPos;
20+
public InfItemFluidHandler handler;
21+
22+
public MEPatternMirrorImage(){
23+
handler = new InfItemFluidHandler();
24+
}
25+
26+
@Nullable
27+
@Override
28+
public MachineComponent<InfItemFluidHandler> provideComponent() {
29+
if (providerPos != null) {
30+
TileEntity tileEntity = this.world.getTileEntity(providerPos);
31+
if (tileEntity instanceof MEPatternProvider){
32+
return new MachineComponent<>(IOType.INPUT) {
33+
public ComponentType getComponentType() {
34+
return ComponentTypesMM.COMPONENT_ITEM_FLUID_GAS;
35+
}
36+
37+
public InfItemFluidHandler getContainerProvider() {
38+
return ((MEPatternProvider) tileEntity).getInfHandler();
39+
}
40+
};
41+
}
42+
}
43+
return new MachineComponent<>(IOType.INPUT) {
44+
public ComponentType getComponentType() {
45+
return ComponentTypesMM.COMPONENT_ITEM_FLUID_GAS;
46+
}
47+
48+
public InfItemFluidHandler getContainerProvider() {
49+
return handler;
50+
}
51+
};
52+
}
53+
54+
@Override
55+
public void readCustomNBT(NBTTagCompound compound) {
56+
super.readCustomNBT(compound);
57+
if(compound.hasKey("providerPos")){
58+
this.providerPos = BlockPos.fromLong(compound.getLong("providerPos"));
59+
}
60+
}
61+
62+
@Override
63+
public void writeCustomNBT(NBTTagCompound compound) {
64+
super.writeCustomNBT(compound);
65+
if (providerPos != null){
66+
compound.setLong("providerPos", providerPos.toLong());
67+
}
68+
}
69+
70+
}

0 commit comments

Comments
 (0)