Skip to content

Commit 4971135

Browse files
author
Circulate233
committed
修复bug,增加新的可用的结构
1 parent 7b8bbad commit 4971135

File tree

10 files changed

+160
-19
lines changed

10 files changed

+160
-19
lines changed

src/main/java/github/kasuminova/novaeng/client/util/NEWBlockArrayPreviewRenderHelper.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,9 @@ object NEWBlockArrayPreviewRenderHelper : BlockArrayPreviewRenderHelper() {
1717

1818
val utils = this as BlockArrayPreviewRenderUtils
1919
var renderHelperUtils: BlockArrayRenderUtils? = null
20-
var status: IntArray? = null
20+
private var status: IntArray? = null
2121
var work = false
22+
var key = 0L
2223

2324
fun startPreview(currentContext: DynamicMachineRenderContext, pos: BlockPos, facing: EnumFacing?): Boolean {
2425
if (this.startPreview(currentContext)) {
@@ -28,6 +29,7 @@ object NEWBlockArrayPreviewRenderHelper : BlockArrayPreviewRenderHelper() {
2829
val newpos = pos.subtract(moveDir)
2930
utils.matchArray = MiscUtils.rotateYCCWNorthUntil(utils.matchArray, rotate)
3031
utils.attachedPosition = newpos
32+
key = pos.toLong()
3133
renderHelperUtils = utils.renderHelper as BlockArrayRenderUtils
3234
utils.facing = facing
3335
initLayers()
@@ -69,6 +71,7 @@ object NEWBlockArrayPreviewRenderHelper : BlockArrayPreviewRenderHelper() {
6971
renderHelperUtils = null
7072
status = null
7173
work = false
74+
key = 0
7275

7376
if (Minecraft.getMinecraft().player != null) {
7477
Minecraft.getMinecraft().player.sendMessage(

src/main/java/github/kasuminova/novaeng/common/handler/MachineAssemblyHandler.kt

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -64,13 +64,16 @@ object MachineAssemblyHandler {
6464

6565
if (world.isRemote) {
6666
if (NEWBlockArrayPreviewRenderHelper.work) {
67+
val oldpos = NEWBlockArrayPreviewRenderHelper.key
6768
NEWBlockArrayPreviewRenderHelper.unloadWorld()
68-
} else {
69-
val renderContext = DynamicMachineRenderContext
70-
.createContext(machine, getDynamicPatternSize(stack))
71-
renderContext.shiftSnap = ClientScheduler.getClientTick()
72-
NEWBlockArrayPreviewRenderHelper.startPreview(renderContext, pos, facing)
69+
if (oldpos == pos.toLong()) {
70+
return
71+
}
7372
}
73+
val renderContext = DynamicMachineRenderContext
74+
.createContext(machine, getDynamicPatternSize(stack))
75+
renderContext.shiftSnap = ClientScheduler.getClientTick()
76+
NEWBlockArrayPreviewRenderHelper.startPreview(renderContext, pos, facing)
7477
}
7578
}
7679
}

src/main/java/github/kasuminova/novaeng/common/registry/RegistryAssembly.kt

Lines changed: 130 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,31 +2,46 @@
22

33
package github.kasuminova.novaeng.common.registry
44

5+
import github.kasuminova.mmce.common.util.DynamicPattern
56
import github.kasuminova.novaeng.common.util.Functions
7+
import github.kasuminova.novaeng.common.util.NEWDynamicMachine
68
import github.kasuminova.novaeng.common.util.NEWMachineAssemblyManager
79
import github.kasuminova.novaeng.mixin.mmce.AccessorAbstractMachine
810
import hellfirepvp.astralsorcery.common.lib.BlocksAS
911
import hellfirepvp.astralsorcery.common.lib.MultiBlockArrays
1012
import hellfirepvp.astralsorcery.common.structure.array.PatternBlockArray
11-
import hellfirepvp.modularmachinery.common.machine.DynamicMachine
13+
import hellfirepvp.modularmachinery.common.machine.TaggedPositionBlockArray
1214
import hellfirepvp.modularmachinery.common.util.BlockArray
1315
import hellfirepvp.modularmachinery.common.util.IBlockStateDescriptor
16+
import it.unimi.dsi.fastutil.objects.ObjectArrayList
1417
import it.unimi.dsi.fastutil.objects.ObjectLists
18+
import mekanism.common.MekanismBlocks
1519
import mekanism.generators.common.GeneratorsBlocks
1620
import net.minecraft.block.state.IBlockState
1721
import net.minecraft.init.Blocks
22+
import net.minecraft.util.EnumFacing
1823
import net.minecraft.util.ResourceLocation
1924
import net.minecraft.util.math.BlockPos
2025
import net.minecraft.util.text.translation.I18n
2126
import vazkii.botania.common.block.ModBlocks
27+
import java.util.Arrays
28+
import java.util.stream.Collectors
2229

23-
@Suppress("DEPRECATION", "KotlinConstantConditions")
30+
@Suppress("DEPRECATION", "USELESS_IS_CHECK")
2431
object RegistryAssembly {
2532

2633
fun packBlock(block: IBlockState): BlockArray.BlockInformation {
2734
return BlockArray.BlockInformation(ObjectLists.singleton(IBlockStateDescriptor(block)))
2835
}
2936

37+
fun packBlock(vararg blocks: IBlockState): BlockArray.BlockInformation {
38+
return BlockArray.BlockInformation(
39+
Arrays.stream(blocks)
40+
.map { IBlockStateDescriptor(it) }
41+
.collect(Collectors.toCollection { ObjectArrayList() })
42+
)
43+
}
44+
3045
fun regAll() {
3146
regAS()
3247
regMEK()
@@ -108,7 +123,7 @@ object RegistryAssembly {
108123

109124
@Suppress("UNCHECKED_CAST")
110125
private fun regMEK() {
111-
val reactorMachine = DynamicMachine("")
126+
val reactorMachine = NEWDynamicMachine("")
112127
if (reactorMachine is AccessorAbstractMachine) {
113128
reactorMachine.setRL(ResourceLocation("mek", "reactor"))
114129
}
@@ -157,7 +172,7 @@ object RegistryAssembly {
157172
*/
158173
val poss = p as Array<Array<XY>>
159174

160-
mekReactor.addBlock(0, 0, 0, packBlock(reactor.blockState))
175+
mekReactor.addBlock(BlockPos.ORIGIN, packBlock(reactor.blockState))
161176

162177
mekReactor.addBlock(poss[0][2][0], framework)
163178
mekReactor.addBlock(poss[1][1][0], framework)
@@ -229,10 +244,89 @@ object RegistryAssembly {
229244
reactor,
230245
reactorMachine.setName("tile.Reactor.name")
231246
)
247+
248+
val thermalEvaporationMachine = NEWDynamicMachine("")
249+
if (thermalEvaporationMachine is AccessorAbstractMachine) {
250+
thermalEvaporationMachine.setRL(ResourceLocation("mek", "thermalEvaporation".camelToSnake()))
251+
}
252+
val thermalEvaporationArray = thermalEvaporationMachine.pattern
253+
val thermalEvaporation = NEWMachineAssemblyManager.BlockPair(MekanismBlocks.BasicBlock, 14)
254+
val thermal = packBlock(MekanismBlocks.BasicBlock2.defaultState)
255+
val thermalP =
256+
packBlock(MekanismBlocks.BasicBlock2.defaultState, MekanismBlocks.BasicBlock.getStateFromMeta(15))
257+
258+
thermalEvaporationArray.addBlock(-1, -1, 3, thermal)
259+
thermalEvaporationArray.addBlock(0, -1, 3, thermal)
260+
thermalEvaporationArray.addBlock(1, -1, 3, thermal)
261+
thermalEvaporationArray.addBlock(-2, -1, 3, thermal)
262+
thermalEvaporationArray.addBlock(-1, -1, 2, thermal)
263+
thermalEvaporationArray.addBlock(0, -1, 2, thermal)
264+
thermalEvaporationArray.addBlock(1, -1, 2, thermal)
265+
thermalEvaporationArray.addBlock(-2, -1, 2, thermal)
266+
thermalEvaporationArray.addBlock(-1, -1, 1, thermal)
267+
thermalEvaporationArray.addBlock(0, -1, 1, thermal)
268+
thermalEvaporationArray.addBlock(1, -1, 1, thermal)
269+
thermalEvaporationArray.addBlock(-2, -1, 1, thermal)
270+
thermalEvaporationArray.addBlock(-1, -1, 0, thermal)
271+
thermalEvaporationArray.addBlock(0, -1, 0, thermal)
272+
thermalEvaporationArray.addBlock(1, -1, 0, thermal)
273+
thermalEvaporationArray.addBlock(-2, -1, 0, thermal)
274+
275+
thermalEvaporationArray.addBlock(-1, 0, 0, thermalP)
276+
thermalEvaporationArray.addBlock(BlockPos.ORIGIN, packBlock(thermalEvaporation.blockState))
277+
thermalEvaporationArray.addBlock(1, 0, 0, thermalP)
278+
thermalEvaporationArray.addBlock(-2, 0, 0, thermalP)
279+
thermalEvaporationArray.addBlock(-1, 0, 3, thermalP)
280+
thermalEvaporationArray.addBlock(0, 0, 3, thermalP)
281+
thermalEvaporationArray.addBlock(1, 0, 3, thermalP)
282+
thermalEvaporationArray.addBlock(-2, 0, 3, thermalP)
283+
thermalEvaporationArray.addBlock(1, 0, 2, thermalP)
284+
thermalEvaporationArray.addBlock(1, 0, 1, thermalP)
285+
thermalEvaporationArray.addBlock(-2, 0, 2, thermalP)
286+
thermalEvaporationArray.addBlock(-2, 0, 1, thermalP)
287+
288+
val dy = DynamicPattern("thermal", TaggedPositionBlockArray(), TaggedPositionBlockArray(), 1, 16)
289+
dy.faces.add(EnumFacing.UP)
290+
dy.structureSizeOffset = dy.structureSizeOffset.add(0, 1, 0)
291+
292+
val patter = dy.pattern
293+
patter.addBlock(-1, 1, 0, thermalP)
294+
patter.addBlock(0, 1, 0, thermalP)
295+
patter.addBlock(1, 1, 0, thermalP)
296+
patter.addBlock(-2, 1, 0, thermalP)
297+
patter.addBlock(-1, 1, 3, thermalP)
298+
patter.addBlock(0, 1, 3, thermalP)
299+
patter.addBlock(1, 1, 3, thermalP)
300+
patter.addBlock(-2, 1, 3, thermalP)
301+
patter.addBlock(1, 1, 2, thermalP)
302+
patter.addBlock(1, 1, 1, thermalP)
303+
patter.addBlock(-2, 1, 2, thermalP)
304+
patter.addBlock(-2, 1, 1, thermalP)
305+
306+
val patterEnd = dy.patternEnd
307+
patterEnd.addBlock(-1, 0, 0, thermalP)
308+
patterEnd.addBlock(BlockPos.ORIGIN, thermalP)
309+
patterEnd.addBlock(1, 0, 0, thermalP)
310+
patterEnd.addBlock(-2, 0, 0, thermalP)
311+
patterEnd.addBlock(-1, 0, 3, thermalP)
312+
patterEnd.addBlock(0, 0, 3, thermalP)
313+
patterEnd.addBlock(1, 0, 3, thermalP)
314+
patterEnd.addBlock(-2, 0, 3, thermalP)
315+
patterEnd.addBlock(1, 0, 2, thermalP)
316+
patterEnd.addBlock(1, 0, 1, thermalP)
317+
patterEnd.addBlock(-2, 0, 2, thermalP)
318+
patterEnd.addBlock(-2, 0, 1, thermalP)
319+
320+
thermalEvaporationMachine.addDynamicPattern("thermal", dy)
321+
322+
NEWMachineAssemblyManager.setConstructors(
323+
thermalEvaporation,
324+
thermalEvaporationMachine.setName("tile.ThermalEvaporation.name")
325+
)
232326
}
233327

234328
private fun regBot() {
235-
val terraPlateMachine = DynamicMachine("")
329+
val terraPlateMachine = NEWDynamicMachine("")
236330
if (terraPlateMachine is AccessorAbstractMachine) {
237331
terraPlateMachine.setRL(ResourceLocation("botania", "terra_plate"))
238332
}
@@ -241,7 +335,7 @@ object RegistryAssembly {
241335
val lapis = packBlock(Blocks.LAPIS_BLOCK.defaultState)
242336
val terraPlate = NEWMachineAssemblyManager.BlockPair(ModBlocks.terraPlate, 0)
243337

244-
terraplateArray.addBlock(0, 0, 0, packBlock(terraPlate.blockState))
338+
terraplateArray.addBlock(BlockPos.ORIGIN, packBlock(terraPlate.blockState))
245339
terraplateArray.addBlock(0, -1, 0, stone)
246340
terraplateArray.addBlock(-1, -1, -1, stone)
247341
terraplateArray.addBlock(-1, -1, 1, stone)
@@ -256,6 +350,33 @@ object RegistryAssembly {
256350
terraPlate,
257351
terraPlateMachine.setName("tile.botania:terraPlate.name")
258352
)
353+
354+
val alfheimportalMachine = NEWDynamicMachine("")
355+
if (alfheimportalMachine is AccessorAbstractMachine) {
356+
alfheimportalMachine.setRL(ResourceLocation("botania", "alfheimportal"))
357+
}
358+
val alfheimportalArray = alfheimportalMachine.pattern
359+
val wood = packBlock(ModBlocks.livingwood.defaultState)
360+
val lightwood = packBlock(ModBlocks.livingwood.getStateFromMeta(5))
361+
val alfheimportal = NEWMachineAssemblyManager.BlockPair(ModBlocks.alfPortal, 0)
362+
363+
alfheimportalArray.addBlock(BlockPos.ORIGIN, packBlock(alfheimportal.blockState))
364+
alfheimportalArray.addBlock(1, 0, 0, wood)
365+
alfheimportalArray.addBlock(-1, 0, 0, wood)
366+
alfheimportalArray.addBlock(2, 1, 0, wood)
367+
alfheimportalArray.addBlock(-2, 1, 0, wood)
368+
alfheimportalArray.addBlock(2, 2, 0, lightwood)
369+
alfheimportalArray.addBlock(-2, 2, 0, lightwood)
370+
alfheimportalArray.addBlock(2, 3, 0, wood)
371+
alfheimportalArray.addBlock(-2, 3, 0, wood)
372+
alfheimportalArray.addBlock(0, 4, 0, lightwood)
373+
alfheimportalArray.addBlock(1, 4, 0, wood)
374+
alfheimportalArray.addBlock(-1, 4, 0, wood)
375+
376+
NEWMachineAssemblyManager.setConstructors(
377+
alfheimportal,
378+
alfheimportalMachine.setName("tile.botania:alfheimPortal.name")
379+
)
259380
}
260381

261382
private class XY(val x: Int, val z: Int) {
@@ -264,8 +385,8 @@ object RegistryAssembly {
264385
}
265386
}
266387

267-
private fun transformationBlockArrays(array: PatternBlockArray, name: String): DynamicMachine {
268-
val machine = DynamicMachine("")
388+
private fun transformationBlockArrays(array: PatternBlockArray, name: String): NEWDynamicMachine {
389+
val machine = NEWDynamicMachine("")
269390
if (machine is AccessorAbstractMachine) {
270391
machine.setRL(ResourceLocation("astralsorcery", name))
271392
}
@@ -277,7 +398,7 @@ object RegistryAssembly {
277398
return machine
278399
}
279400

280-
private fun DynamicMachine.setName(name: String): DynamicMachine {
401+
private fun NEWDynamicMachine.setName(name: String): NEWDynamicMachine {
281402
this.localizedName = I18n.translateToLocal(name)
282403
return this
283404
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package github.kasuminova.novaeng.common.util
2+
3+
import hellfirepvp.modularmachinery.common.machine.DynamicMachine
4+
5+
class NEWDynamicMachine(registryName: String) : DynamicMachine(registryName)

src/main/java/github/kasuminova/novaeng/common/util/NEWMachineAssemblyManager.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ class NEWMachineAssemblyManager {
6666
return ADDITIONAL_CONSTRUCTORS.entries.iterator()
6767
}
6868

69-
fun setConstructors(block: BlockPair, machine: DynamicMachine) {
69+
fun setConstructors(block: BlockPair, machine: NEWDynamicMachine) {
7070
ADDITIONAL_CONSTRUCTORS[block] = machine
7171
ModIntegrationJEI.PREVIEW_WRAPPERS.add(StructurePreviewWrapper(machine))
7272
}

src/main/java/github/kasuminova/novaeng/mixin/mmce/MixinBlockArrayPreviewRenderHelper.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ public abstract class MixinBlockArrayPreviewRenderHelper implements BlockArrayPr
5757
@Shadow
5858
protected abstract void updateLayers();
5959

60-
@Redirect(method = {"hashBlocks", "doesPlacedLayerMatch", "hasLowerLayer", "updateLayers"}, at = @At(value = "FIELD", target = "Lhellfirepvp/modularmachinery/client/util/BlockArrayPreviewRenderHelper;attachedPosition:Lnet/minecraft/util/math/BlockPos;"))
60+
@Redirect(method = {"hashBlocks", "hasLowerLayer", "updateLayers"}, at = @At(value = "FIELD", target = "Lhellfirepvp/modularmachinery/client/util/BlockArrayPreviewRenderHelper;attachedPosition:Lnet/minecraft/util/math/BlockPos;"))
6161
public BlockPos isRenderingComplete(BlockArrayPreviewRenderHelper instance) {
6262
if (this.renderHelper == null) return this.attachedPosition;
6363
if ((Object) this instanceof NEWBlockArrayPreviewRenderHelper) {

src/main/java/github/kasuminova/novaeng/mixin/mmce/MixinDynamicMachineRenderContext.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package github.kasuminova.novaeng.mixin.mmce;
22

3+
import github.kasuminova.novaeng.common.util.NEWDynamicMachine;
34
import hellfirepvp.modularmachinery.client.util.DynamicMachineRenderContext;
45
import hellfirepvp.modularmachinery.common.machine.DynamicMachine;
56
import hellfirepvp.modularmachinery.common.util.BlockArray;
@@ -14,7 +15,7 @@ public class MixinDynamicMachineRenderContext {
1415

1516
@Inject(method = "addControllerToBlockArray", at = @At("HEAD"), cancellable = true)
1617
private static void addControllerToBlockArray(DynamicMachine machine, BlockArray copy, Vec3i moveOffset, CallbackInfo ci) {
17-
if (!"modularmachinery".equals(machine.getRegistryName().getNamespace())) {
18+
if (machine instanceof NEWDynamicMachine n) {
1819
ci.cancel();
1920
}
2021
}

src/main/java/github/kasuminova/novaeng/mixin/mmce/MixinWorldSceneRendererWidget.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,24 @@
11
package github.kasuminova.novaeng.mixin.mmce;
22

33
import github.kasuminova.mmce.client.gui.widget.impl.preview.WorldSceneRendererWidget;
4+
import github.kasuminova.novaeng.common.util.NEWDynamicMachine;
45
import hellfirepvp.modularmachinery.common.machine.DynamicMachine;
6+
import hellfirepvp.modularmachinery.common.util.BlockArray;
57
import org.spongepowered.asm.mixin.Mixin;
8+
import org.spongepowered.asm.mixin.Shadow;
69
import org.spongepowered.asm.mixin.injection.At;
710
import org.spongepowered.asm.mixin.injection.Inject;
811
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
912

1013
@Mixin(value = WorldSceneRendererWidget.class, remap = false)
1114
public class MixinWorldSceneRendererWidget {
1215

16+
@Shadow
17+
protected BlockArray pattern;
18+
1319
@Inject(method = "addControllerToPattern", at = @At("HEAD"), cancellable = true)
1420
protected void addControllerToPattern(DynamicMachine machine, CallbackInfo ci) {
15-
if (!"modularmachinery".equals(machine.getRegistryName().getNamespace())) {
21+
if (machine instanceof NEWDynamicMachine n) {
1622
ci.cancel();
1723
}
1824
}

src/main/resources/assets/novaeng_core/lang/en_US.lang

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ message.assembly.tip.fail=模块化组装: 在 %s 放置方块失败,已返还
2626
gui.blueprint.popout.placed.dynamic_pattern.unload=当前结构预览已结束
2727

2828
tile.Reactor.name=Fusion Reactor
29+
tile.ThermalEvaporation.name=Thermal Evaporation Tower
2930

3031
item.novaeng_core.estorage_cell_item_16m.name=§9ECO - §bSE4 §9存储矩阵§a(物品)
3132
item.novaeng_core.estorage_cell_item_64m.name=§9ECO - §6SE6 §9存储矩阵§a(物品)

src/main/resources/assets/novaeng_core/lang/zh_CN.lang

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ message.assembly.tip.fail=模块化组装: 在 %s 放置方块失败,已返还
2626
gui.blueprint.popout.placed.dynamic_pattern.unload=当前结构预览已结束
2727

2828
tile.Reactor.name=聚变反应堆
29+
tile.ThermalEvaporation.name=热力蒸馏塔
2930

3031
item.novaeng_core.estorage_cell_item_16m.name=§9ECO - §bSE4 §9存储矩阵§a(物品)
3132
item.novaeng_core.estorage_cell_item_64m.name=§9ECO - §6SE6 §9存储矩阵§a(物品)

0 commit comments

Comments
 (0)