This commit is contained in:
1820982382
2026-08-03 19:25:28 +08:00
parent 7b341980bd
commit f9ddc599e1
69 changed files with 832 additions and 432 deletions
@@ -7,7 +7,6 @@ import appeng.api.stacks.AEKeyTypesInternal;
import appeng.api.upgrades.Upgrades;
import appeng.client.gui.style.StyleManager;
import appeng.core.definitions.AEItems;
import appeng.core.localization.GuiText;
import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.entity.player.Inventory;
@@ -118,27 +117,30 @@ public final class ThaumicEnergistics {
private void registerUpgrades(FMLCommonSetupEvent event) {
event.enqueueWork(() -> {
String essentiaIoBusGroup = GuiText.IOBuses.getTranslationKey();
// 注:不传 group——带 group 会在卡 tooltip 中与 AE2 原版 IO 总线合并显示为
// "ME Import/Export Bus"(同 group 跳过),ThE 设备名不显示。与存储总线一致,各自显示设备名。
var importBusItem = ModItems.ESSENTIA_IMPORT_BUS.get();
Upgrades.add(AEItems.FUZZY_CARD, importBusItem, 1, essentiaIoBusGroup);
Upgrades.add(AEItems.REDSTONE_CARD, importBusItem, 1, essentiaIoBusGroup);
Upgrades.add(AEItems.CAPACITY_CARD, importBusItem, 5, essentiaIoBusGroup);
Upgrades.add(AEItems.SPEED_CARD, importBusItem, 4, essentiaIoBusGroup);
Upgrades.add(AEItems.INVERTER_CARD, importBusItem, 1, essentiaIoBusGroup);
Upgrades.add(AEItems.FUZZY_CARD, importBusItem, 1);
Upgrades.add(AEItems.REDSTONE_CARD, importBusItem, 1);
Upgrades.add(AEItems.CAPACITY_CARD, importBusItem, 5);
Upgrades.add(AEItems.SPEED_CARD, importBusItem, 4);
Upgrades.add(AEItems.INVERTER_CARD, importBusItem, 1);
var exportBusItem = ModItems.ESSENTIA_EXPORT_BUS.get();
Upgrades.add(AEItems.FUZZY_CARD, exportBusItem, 1, essentiaIoBusGroup);
Upgrades.add(AEItems.REDSTONE_CARD, exportBusItem, 1, essentiaIoBusGroup);
Upgrades.add(AEItems.CAPACITY_CARD, exportBusItem, 5, essentiaIoBusGroup);
Upgrades.add(AEItems.SPEED_CARD, exportBusItem, 4, essentiaIoBusGroup);
Upgrades.add(AEItems.CRAFTING_CARD, exportBusItem, 1, essentiaIoBusGroup);
Upgrades.add(AEItems.FUZZY_CARD, exportBusItem, 1);
Upgrades.add(AEItems.REDSTONE_CARD, exportBusItem, 1);
Upgrades.add(AEItems.CAPACITY_CARD, exportBusItem, 5);
Upgrades.add(AEItems.SPEED_CARD, exportBusItem, 4);
Upgrades.add(AEItems.CRAFTING_CARD, exportBusItem, 1);
var storageBusItem = ModItems.ESSENTIA_STORAGE_BUS.get();
Upgrades.add(AEItems.FUZZY_CARD, storageBusItem, 1);
Upgrades.add(AEItems.INVERTER_CARD, storageBusItem, 1);
Upgrades.add(AEItems.CAPACITY_CARD, storageBusItem, 5);
Upgrades.add(AEItems.VOID_CARD, storageBusItem, 1);
// 神秘装配台:加速卡(AEItems.SPEED_CARD = Acceleration Cardtooltip 名单 + 装配台升级槽可装——加快合成)
Upgrades.add(AEItems.SPEED_CARD, ModItems.ARCANE_ASSEMBLER_ITEM.get(), 4);
});
}
@@ -7,6 +7,8 @@ import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.level.Level;
import thaumcraft.api.aspects.Aspect;
import thaumcraft.client.gui.AspectGuiRenderer;
import thaumicenergistics.common.integration.appeng.AEssentiaKey;
import java.util.ArrayList;
@@ -16,29 +18,13 @@ public class EssentiaKeyRenderHandler implements appeng.api.client.AEKeyRenderHa
@Override
public void drawInGui(Minecraft minecraft, GuiGraphics guiGraphics, int x, int y, AEssentiaKey stack) {
// 复用 TC 的 AspectGuiRendererpositionTexColor shader + enableBlend)——透明背景正确,
// 与蒸馏编码台一致;避免 GuiGraphics.blit 的 blend 状态问题(图标内部镂空被填黑)。
String tag = stack.getId().getPath();
// 渲染要素图标(透明背景):TC 的 aspect 图标是白色剪影,需用 aspect 颜色着色(与 JEI 的 AspectGuiRenderer 一致)
int color = getAspectColor(tag);
float r = ((color >> 16) & 0xFF) / 255.0f;
float g = ((color >> 8) & 0xFF) / 255.0f;
float b = (color & 0xFF) / 255.0f;
guiGraphics.setColor(r, g, b, 1.0f);
guiGraphics.blit(aspectTexture(tag), x, y, 0, 0, 16, 16, 16, 16);
guiGraphics.setColor(1.0f, 1.0f, 1.0f, 1.0f);
Aspect aspect = Aspect.getAspect(tag);
if (aspect != null) {
AspectGuiRenderer.draw(guiGraphics, aspect, x, y, 16, 1.0f);
}
/** 按 tag 缓存 aspect 贴图 RL,避免每帧 fromNamespaceAndPath。 */
private static final java.util.Map<String, ResourceLocation> TEXTURE_CACHE = new java.util.HashMap<>();
private static ResourceLocation aspectTexture(String tag) {
return TEXTURE_CACHE.computeIfAbsent(tag,
t -> ResourceLocation.fromNamespaceAndPath("thaumcraft", "textures/aspects/" + t + ".png"));
}
/** 获取 aspect 的 ARGB 颜色(按 tag 查 Thaumcraft Aspect),未知返回白色。 */
private static int getAspectColor(String tag) {
thaumcraft.api.aspects.Aspect aspect = thaumcraft.api.aspects.Aspect.getAspect(tag);
return aspect != null ? aspect.getColor() : 0xFFFFFFFF;
}
@Override
@@ -32,7 +32,7 @@ public class ContainerArcaneAssembler extends AbstractContainerMenu {
// ===== 坐标常量(1:1 对应1.7.10 =====
private static final int PLAYER_INV_X = 8;
private static final int PLAYER_INV_Y = 115;
private static final int PLAYER_INV_Y = 113;
private static final int HOTBAR_Y = PLAYER_INV_Y + 58; // 173
private static final int PATTERN_X = 26;
@@ -29,8 +29,8 @@ import java.util.List;
public class ContainerDistillationPatternEncoder extends AbstractContainerMenu {
private static final int PLAYER_INV_Y = 152;
private static final int HOTBAR_Y = 210;
private static final int PLAYER_INV_Y = 150;
private static final int HOTBAR_Y = 208;
private static final int PLAYER_INV_X = 8;
private static final int SLOT_SOURCE_X = 15;
@@ -48,8 +48,8 @@ public class ContainerEssentiaCellWorkbench extends AbstractContainerMenu {
IItemHandler cellHandler = workbench != null ? workbench.getCellInventory() : fallbackCell;
addSlot(new SlotItemHandler(cellHandler, 0, 152, 8));
for (int r = 0; r < 3; r++) for (int c = 0; c < 9; c++) addSlot(new Slot(inv, c + r * 9 + 9, 8 + c * 18, 169 + r * 18));
for (int c = 0; c < 9; c++) addSlot(new Slot(inv, c, 8 + c * 18, 227));
for (int r = 0; r < 3; r++) for (int c = 0; c < 9; c++) addSlot(new Slot(inv, c + r * 9 + 9, 8 + c * 18, 167 + r * 18));
for (int c = 0; c < 9; c++) addSlot(new Slot(inv, c, 8 + c * 18, 225));
}
/** 客户端打开菜单用(IMenuTypeExtension 注册);workbench 为 null,分区操作走 C2S 到服务端。 */
@@ -45,8 +45,8 @@ public class ContainerKnowledgeInscriber extends AbstractContainerMenu {
private static final int MAXIMUM_PATTERNS = HandlerKnowledgeCore.MAXIMUM_STORED_PATTERNS;
private static final int PLAYER_INV_Y = 162;
private static final int HOTBAR_Y = 220;
private static final int PLAYER_INV_Y = 160;
private static final int HOTBAR_Y = 218;
private static final int PLAYER_INV_X = 8;
private static final int KCORE_SLOT_X = 186;
@@ -25,7 +25,7 @@ public class GuiEssentiaCellWorkbench extends AbstractContainerScreen<ContainerE
private static final ResourceLocation TEX = ResourceLocation.fromNamespaceAndPath(ThaumicEnergistics.MODID, "textures/gui/essentia_cell_workbench.png");
private static final int GUI_WIDTH = 176, GUI_HEIGHT = 251;
/** 分区格布局常量(JEI ghost 拖拽也使用,故公开)。 */
public static final int WIDGET_POS_X = 7, WIDGET_POS_Y = 28;
public static final int WIDGET_POS_X = 8, WIDGET_POS_Y = 29;
public static final int WIDGETS_PER_ROW = 9, WIDGET_ROWS = 7, NUMBER_OF_WIDGETS = 63;
public static final int WIDGET_SIZE = 18;
@@ -50,6 +50,8 @@ public final class RecipeRegistration {
public static ShapelessArcaneRecipe ARCANE_CRAFTING_TERMINAL;
public static ShapelessArcaneRecipe VIS_INTERFACE;
public static ShapelessArcaneRecipe ESSENTIA_VIBRATION_CHAMBER;
/** 赛特斯石英复制(坩埚炼金配方——研究页关联)。 */
public static CrucibleRecipe CERTUS_DUPE_RECIPE;
private static final TagKey<Item> WISP_ESSENCES = tag("thaumicenergistics", "wisp_essences");
@@ -62,9 +64,21 @@ public final class RecipeRegistration {
registerShapedArcane();
registerShapelessArcane();
registerInfusion();
registerCrucible();
ThaumicEnergistics.LOG.info("ThaumicEnergistics recipes registered.");
}
/** 坩埚炼金配方:赛特斯石英复制(丢 1 赛特斯石英 + 水晶/交换要素 → 2 赛特斯石英)。 */
private static void registerCrucible() {
ItemStack quartz = ae("certus_quartz_crystal");
if (quartz.isEmpty()) return;
CERTUS_DUPE_RECIPE = ThaumcraftApi.addCrucibleRecipe(
"CERTUS_DUPE",
quartz.copyWithCount(2),
quartz.copyWithCount(1),
new AspectList().add(Aspect.CRYSTAL, 5).add(Aspect.EXCHANGE, 5));
}
private static void registerShapedArcane() {
STORAGE_COMPONENT_1K = ThaumcraftApi.addArcaneCraftingRecipe("ESSENTIASTORAGE1K", stack(ModItems.STORAGE_COMPONENT_1K),
new AspectList().add(Aspect.FIRE, 3).add(Aspect.ORDER, 1),
@@ -4,13 +4,14 @@ import java.util.Locale;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import net.minecraft.core.Direction;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.level.block.entity.BlockEntity;
import org.jetbrains.annotations.Nullable;
import thaumcraft.api.aspects.Aspect;
import thaumcraft.api.aspects.AspectList;
import thaumcraft.api.aspects.IAspectContainer;
import thaumicenergistics.ThaumicEnergistics;
import thaumcraft.common.essentia.EssentiaTransport;
import thaumicenergistics.api.storage.AspectStack;
public final class TCReflection {
@@ -18,16 +19,69 @@ public final class TCReflection {
/** aspect tag → ResourceLocation 缓存(tag 有界:6 个源质 + 已注册方面)。 */
private static final Map<String, ResourceLocation> ASPECT_ID_CACHE = new ConcurrentHashMap<>();
/** 荒古炼金炉类名(TC port;不实现 IAspectContainer,需反射抽内部源质)。 */
private static final String FURNACE_CLASS_NAME = "thaumcraft.common.blockentities.AlchemicalFurnaceBlockEntity";
/** 炼金炉 private aspects 字段(缓存 Field 避免每 tick getDeclaredField)。 */
private static volatile java.lang.reflect.Field furnaceAspectsField;
private TCReflection() {}
/** 从荒古炼金炉内部源质缓存直接抽取(替代蒸馏釜/罐子中转)。 */
@Nullable
private static AspectStack extractFromFurnace(BlockEntity be, int maxAmount) {
try {
if (furnaceAspectsField == null) {
furnaceAspectsField = be.getClass().getDeclaredField("aspects");
furnaceAspectsField.setAccessible(true);
}
AspectList furnaceAspects = (AspectList) furnaceAspectsField.get(be);
if (furnaceAspects != null && furnaceAspects.size() > 0) {
Aspect[] aspects = furnaceAspects.getAspects();
for (Aspect aspect : aspects) {
if (aspect == null) continue;
int amt = furnaceAspects.getAmount(aspect);
if (amt <= 0) continue;
int toExtract = Math.min(amt, maxAmount);
furnaceAspects.remove(aspect, toExtract);
be.setChanged();
ResourceLocation id = getAspectId(aspect);
return id != null ? new AspectStack(id, toExtract) : null;
}
}
} catch (Exception ignored) {
}
return null;
}
@Nullable
public static AspectStack extractEssentia(@Nullable BlockEntity be, int maxAmount) {
if (be == null) {
ThaumicEnergistics.LOG.debug("[TCReflection] extractEssentia: be is null");
return null;
}
// ===== 路径0: 荒古炼金炉直连(AlchemicalFurnaceBlockEntity 不实现 IAspectContainer
// 源质在 private aspects 缓存——直接抽取,替代"必须经蒸馏釜/罐子"=====
if (FURNACE_CLASS_NAME.equals(be.getClass().getName())) {
AspectStack fromFurnace = extractFromFurnace(be, maxAmount);
if (fromFurnace != null) return fromFurnace;
}
// ===== 路径0b: TC 管道接口(EssentiaTransport——高级荒古炼金炉喷嘴/源质管道)=====
if (be instanceof EssentiaTransport transport) {
for (Direction face : Direction.values()) {
if (!transport.canOutputTo(face)) continue;
Aspect aspect = transport.getEssentiaType(face);
if (aspect == null) continue;
int amount = transport.getEssentiaAmount(face);
if (amount <= 0) continue;
int toExtract = Math.min(amount, maxAmount);
int taken = transport.takeEssentia(aspect, toExtract, face);
if (taken > 0) {
be.setChanged();
ResourceLocation id = getAspectId(aspect);
return id != null ? new AspectStack(id, taken) : null;
}
}
}
if (!(be instanceof IAspectContainer container)) {
ThaumicEnergistics.LOG.debug("[TCReflection] extractEssentia: {} does not implement IAspectContainer", be.getClass().getName());
return null;
}
@@ -36,7 +90,6 @@ public final class TCReflection {
if (aspectList != null && aspectList.size() > 0) {
Aspect[] aspects = aspectList.getAspects();
if (aspects != null) {
ThaumicEnergistics.LOG.debug("[TCReflection] extractEssentia: found {} aspects via getAspects()", aspects.length);
for (Aspect aspect : aspects) {
if (aspect == null) continue;
int amt = aspectList.getAmount(aspect);
@@ -45,7 +98,6 @@ public final class TCReflection {
if (container.takeFromContainer(aspect, toExtract)) {
be.setChanged();
ResourceLocation id = getAspectId(aspect);
ThaumicEnergistics.LOG.debug("[TCReflection] extractEssentia: SUCCESS (API) - extracted {} of {}", toExtract, id);
return id != null ? new AspectStack(id, toExtract) : null;
}
}
@@ -53,7 +105,6 @@ public final class TCReflection {
}
// ===== 路径B: TC 移植版反射回退 (getAspect/getAmount) =====
ThaumicEnergistics.LOG.debug("[TCReflection] extractEssentia: getAspects() empty, trying reflection fallback for {}", be.getClass().getName());
try {
java.lang.reflect.Method[] methods = getAspectMethods(be.getClass());
if (methods.length < 2) {
@@ -66,18 +117,12 @@ public final class TCReflection {
if (container.takeFromContainer(aspect, toExtract)) {
be.setChanged();
ResourceLocation id = getAspectId(aspect);
ThaumicEnergistics.LOG.debug("[TCReflection] extractEssentia: SUCCESS (reflection) - extracted {} of {}", toExtract, id);
return id != null ? new AspectStack(id, toExtract) : null;
}
ThaumicEnergistics.LOG.debug("[TCReflection] extractEssentia: takeFromContainer returned false for {} of {}", toExtract, aspect.getTag());
} else {
ThaumicEnergistics.LOG.debug("[TCReflection] extractEssentia: reflection got aspect={}, amount={}", aspect, amount);
}
} catch (Exception e) {
ThaumicEnergistics.LOG.debug("[TCReflection] extractEssentia: reflection fallback error: {}", e.getMessage());
} catch (Exception ignored) {
}
ThaumicEnergistics.LOG.debug("[TCReflection] extractEssentia: no extractable aspect found");
return null;
}
@@ -96,10 +141,8 @@ public final class TCReflection {
Aspect aspect = findAspectById(stack.aspectId());
if (aspect == null) return 0;
int toInsert = (int) stack.amount();
ThaumicEnergistics.LOG.debug("[TCReflection] insertEssentia: inserting {} of {} into {}", toInsert, stack.aspectId(), be.getClass().getName());
int leftover = container.addToContainer(aspect, toInsert);
int added = toInsert - leftover;
ThaumicEnergistics.LOG.debug("[TCReflection] insertEssentia: added={}, leftover={}", added, leftover);
if (added > 0) {
be.setChanged();
}
@@ -58,7 +58,7 @@ public final class ThEThaumcraft {
ResearchCategories.registerCategory(TAB,
ResourceLocation.fromNamespaceAndPath(MODID, "textures/research/tab_icon.png"),
ResourceLocation.fromNamespaceAndPath("thaumcraft", "textures/gui/gui_researchback.png"));
ResourceLocation.fromNamespaceAndPath(MODID, "textures/research/research_background.png"));
registerScanEvent();
@@ -346,7 +346,9 @@ public final class ThEThaumcraft {
new AspectList().add(Aspect.CRYSTAL, 5).add(Aspect.MAGIC, 5).add(Aspect.EXCHANGE, 5),
-5, -5, 2, new ItemStack(appeng.core.definitions.AEItems.CERTUS_QUARTZ_CRYSTAL.asItem()))
.setRound().setParents("PSEUDO_ALCHEMICALDUPLICATION").setParentsHidden("BASEENERGISTICS")
.setPages(new ResearchPage("tc.research_text.CERTUS_DUPE"))
.setPages(
new ResearchPage("tc.research_text.CERTUS_DUPE"),
new ResearchPage(RecipeRegistration.CERTUS_DUPE_RECIPE))
.registerResearchItem();
}
@@ -83,9 +83,10 @@ public class EssentiaExportBusPart extends IOBusPart
@Override
public void getBoxes(IPartCollisionHelper bch) {
bch.addBox(6, 6, 11, 10, 10, 13);
bch.addBox(5, 5, 13, 11, 11, 14);
bch.addBox(4, 4, 14, 12, 12, 16);
bch.addBox(4, 4, 12, 12, 12, 14);
bch.addBox(5, 5, 14, 11, 11, 15);
bch.addBox(6, 6, 15, 10, 10, 16);
bch.addBox(6, 6, 11, 10, 10, 12);
}
@Override
@@ -20,10 +20,12 @@ public final class ModBlocks {
private ModBlocks() {}
public static final DeferredRegister.Blocks REGISTRY = DeferredRegister.createBlocks(ThaumicEnergistics.MODID);
private static final BlockBehaviour.Properties P = BlockBehaviour.Properties.of().mapColor(MapColor.STONE).strength(2f).sound(SoundType.STONE);
/** 装配器专用:noOcclusion——玻璃方块不被视为不透明,相邻方块(如冰/半透明)接触面不被剔除,透明玻璃后可正常看到后方方块。 */
private static final BlockBehaviour.Properties PA = P.noOcclusion();
public static final DeferredBlock<Block> ESSENTIA_PROVIDER = REGISTRY.register("essentia_provider", () -> new ThEBaseEntityBlock(P) { public net.minecraft.world.level.block.entity.BlockEntity newBlockEntity(BlockPos pos, BlockState st) { return new TileEssentiaProvider(pos, st); } });
public static final DeferredBlock<Block> INFUSION_PROVIDER = REGISTRY.register("infusion_provider", () -> new ThEBaseEntityBlock(P) { public net.minecraft.world.level.block.entity.BlockEntity newBlockEntity(BlockPos pos, BlockState st) { return new TileInfusionProvider(pos, st); } });
public static final DeferredBlock<Block> ARCANE_ASSEMBLER = REGISTRY.register("arcane_assembler", () -> new ThEBaseEntityBlock(P) {
public static final DeferredBlock<Block> ARCANE_ASSEMBLER = REGISTRY.register("arcane_assembler", () -> new ThEBaseEntityBlock(PA) {
public net.minecraft.world.level.block.entity.BlockEntity newBlockEntity(BlockPos pos, BlockState st) { return new TileArcaneAssembler(pos, st); }
@Override
protected net.minecraft.world.ItemInteractionResult useItemOn(net.minecraft.world.item.ItemStack stack, BlockState state, net.minecraft.world.level.Level level, BlockPos pos, net.minecraft.world.entity.player.Player player, net.minecraft.world.InteractionHand hand, net.minecraft.world.phys.BlockHitResult hit) {
@@ -53,6 +55,14 @@ public final class ModBlocks {
public static final DeferredBlock<Block> KNOWLEDGE_INSCRIBER = REGISTRY.register("knowledge_inscriber", () -> new ThEBaseEntityBlock(P) {
public net.minecraft.world.level.block.entity.BlockEntity newBlockEntity(BlockPos pos, BlockState st) { return new TileKnowledgeInscriber(pos, st); }
@Override
protected void createBlockStateDefinition(net.minecraft.world.level.block.state.StateDefinition.Builder<Block, BlockState> builder) {
builder.add(OrientableEntityBlock.FACING);
}
@Override
public BlockState getStateForPlacement(net.minecraft.world.item.context.BlockPlaceContext context) {
return this.defaultBlockState().setValue(OrientableEntityBlock.FACING, context.getHorizontalDirection().getOpposite());
}
@Override
protected net.minecraft.world.ItemInteractionResult useItemOn(net.minecraft.world.item.ItemStack stack, BlockState state, net.minecraft.world.level.Level level, BlockPos pos, net.minecraft.world.entity.player.Player player, net.minecraft.world.InteractionHand hand, net.minecraft.world.phys.BlockHitResult hit) {
if (!level.isClientSide) player.openMenu(state.getMenuProvider(level, pos));
return net.minecraft.world.ItemInteractionResult.SUCCESS;
@@ -68,6 +78,14 @@ public final class ModBlocks {
public static final DeferredBlock<Block> DISTILLATION_ENCODER = REGISTRY.register("distillation_encoder", () -> new ThEBaseEntityBlock(P) {
public net.minecraft.world.level.block.entity.BlockEntity newBlockEntity(BlockPos pos, BlockState st) { return new TileDistillationPatternEncoder(pos, st); }
@Override
protected void createBlockStateDefinition(net.minecraft.world.level.block.state.StateDefinition.Builder<Block, BlockState> builder) {
builder.add(OrientableEntityBlock.FACING);
}
@Override
public BlockState getStateForPlacement(net.minecraft.world.item.context.BlockPlaceContext context) {
return this.defaultBlockState().setValue(OrientableEntityBlock.FACING, context.getHorizontalDirection().getOpposite());
}
@Override
protected net.minecraft.world.ItemInteractionResult useItemOn(net.minecraft.world.item.ItemStack stack, BlockState state, net.minecraft.world.level.Level level, BlockPos pos, net.minecraft.world.entity.player.Player player, net.minecraft.world.InteractionHand hand, net.minecraft.world.phys.BlockHitResult hit) {
if (!level.isClientSide) player.openMenu(state.getMenuProvider(level, pos));
return net.minecraft.world.ItemInteractionResult.SUCCESS;
@@ -1 +1,6 @@
{"variants":{"":{"model":"thaumicenergistics:block/distillation_encoder"}}}
{"variants":{
"facing=north": {"model": "thaumicenergistics:block/distillation_encoder"},
"facing=south": {"model": "thaumicenergistics:block/distillation_encoder", "y": 180},
"facing=west": {"model": "thaumicenergistics:block/distillation_encoder", "y": 270},
"facing=east": {"model": "thaumicenergistics:block/distillation_encoder", "y": 90}
}}
@@ -1 +1,6 @@
{"variants":{"":{"model":"thaumicenergistics:block/knowledge_inscriber"}}}
{"variants":{
"facing=north": {"model": "thaumicenergistics:block/knowledge_inscriber"},
"facing=south": {"model": "thaumicenergistics:block/knowledge_inscriber", "y": 180},
"facing=west": {"model": "thaumicenergistics:block/knowledge_inscriber", "y": 270},
"facing=east": {"model": "thaumicenergistics:block/knowledge_inscriber", "y": 90}
}}
@@ -40,7 +40,7 @@
"ae2.keytype.thaumicenergistics.essentia": "Essentia",
"tc.research_category.THAUMICENERGISTICS": "Thaumic Energistics",
"tc.research_name.BASEENERGISTICS": "Basic Energistics",
"tc.research_text.BASEENERGISTICS": "You have discovered a curious resonance between AE2's mechanical networks and Thaumaturgy. The precision of AE devices seems capable of sensing and manipulating essentia, that mysterious form of matter.",
"tc.research_text.BASEENERGISTICS": "You have discovered a curious resonance between AE2's mechanical networks and Thaumaturgy. The precision of AE devices seems capable of sensing and manipulating essentia, that mysterious form of matter. High version materials are created by §§b§l麦淇淋§r.",
"tc.research_name.FOCUS_AEWRENCH": "Focus: AE Wrench",
"tc.research_text.FOCUS_AEWRENCH": "By condensing the functionality of an AE wrench into a wand focus, you can manipulate AE network devices without switching tools.",
"tc.research_name.DIGISENTIA": "Digitized Essentia",
@@ -28,6 +28,7 @@
"item.thaumicenergistics.essentia_storage_bus": "源质存储总线",
"item.thaumicenergistics.essentia_terminal": "源质终端",
"item.thaumicenergistics.arcane_crafting_terminal": "奥术合成终端",
"gui.thaumicenergistics.ArcaneCraftingTerminal": "奥术合成终端",
"item.thaumicenergistics.essentia_level_emitter": "源质发信器",
"item.thaumicenergistics.vis_interface": "要素中继接口",
"tooltip.thaumicenergistics.essentia_import_bus.desc": "从相邻的源质容器抽取源质导入ME网络",
@@ -43,7 +44,7 @@
"tc.research_category.THAUMICENERGISTICS": "神秘能源",
"tc.research_name.BASEENERGISTICS": "基础能源学",
"tc.research_text.BASEENERGISTICS": "你发现AE2的机械网络与神秘学之间存在奇妙的共鸣。精密的AE设备似乎能够感知并操控源质这种神秘的物质形态。",
"tc.research_text.BASEENERGISTICS": "你发现AE2的机械网络与神秘学之间存在奇妙的共鸣。精密的AE设备似乎能够感知并操控源质这种神秘的物质形态。高版本材质由§b§l麦淇淋§r制作。",
"tc.research_name.FOCUS_AEWRENCH": "法杖核心:AE扳手",
"tc.research_text.FOCUS_AEWRENCH": "将AE扳手的功能凝聚到法杖核心中,让你无需切换工具即可操控AE网络设备。",
@@ -1 +1,177 @@
{"parent":"minecraft:block/cube_all","textures":{"all":"thaumicenergistics:block/arcane_assembler_fallback"}}
{
"format_version": "1.9.0",
"credit": "Made with _leng",
"texture_size": [64, 64],
"render_type": "cutout",
"textures": {
"model": "thaumicenergistics:block/arcane_assembler_fallback",
"particle": "ae2:block/molecular_assembler"
},
"elements": [
{
"from": [14, 0.02, 0],
"to": [15, 15.98, 16],
"faces": {
"north": {"uv": [5.5, 3, 5.75, 7], "texture": "#model", "cullface": "north"},
"east": {"uv": [0, 0, 4, 4], "texture": "#model"},
"south": {"uv": [5.75, 3, 6, 7], "texture": "#model", "cullface": "south"},
"west": {"uv": [0, 4, 4, 0], "texture": "#model"},
"up": {"uv": [6.25, 7, 6, 3], "texture": "#model", "cullface": "up"},
"down": {"uv": [6.5, 7, 6.25, 3], "texture": "#model", "cullface": "down"}
}
},
{
"from": [0, 0, 1],
"to": [16, 16, 2],
"faces": {
"north": {"uv": [0, 0, 4, 4], "texture": "#model"},
"east": {"uv": [5.75, 3, 6, 7], "texture": "#model", "cullface": "east"},
"south": {"uv": [0, 4, 4, 0], "texture": "#model", "cullface": "west"},
"west": {"uv": [5.5, 3, 5.75, 7], "texture": "#model"},
"up": {"uv": [6, 3, 6.25, 7], "rotation": 90, "texture": "#model", "cullface": "up"},
"down": {"uv": [6.5, 7, 6.25, 3], "rotation": 90, "texture": "#model", "cullface": "down"}
}
},
{
"from": [0, 0, 14],
"to": [16, 16, 15],
"faces": {
"north": {"uv": [0, 4, 4, 0], "texture": "#model"},
"east": {"uv": [5.5, 3, 5.75, 7], "texture": "#model", "cullface": "east"},
"south": {"uv": [0, 0, 4, 4], "texture": "#model"},
"west": {"uv": [5.75, 3, 6, 7], "texture": "#model", "cullface": "west"},
"up": {"uv": [6, 7, 6.25, 3], "rotation": 90, "texture": "#model", "cullface": "up"},
"down": {"uv": [6.5, 3, 6.25, 7], "rotation": 90, "texture": "#model", "cullface": "down"}
}
},
{
"from": [1, 0.02, 0],
"to": [2, 15.98, 16],
"faces": {
"north": {"uv": [5.75, 3, 6, 7], "texture": "#model", "cullface": "north"},
"east": {"uv": [0, 4, 4, 0], "texture": "#model"},
"south": {"uv": [5.5, 3, 5.75, 7], "texture": "#model", "cullface": "south"},
"west": {"uv": [0, 0, 4, 4], "texture": "#model"},
"up": {"uv": [6.25, 3, 6, 7], "texture": "#model", "cullface": "up"},
"down": {"uv": [6.5, 3, 6.25, 7], "texture": "#model", "cullface": "down"}
}
},
{
"from": [2, 15, 2],
"to": [14, 16, 14],
"faces": {
"up": {"uv": [3, 7, 0, 4], "texture": "#model", "cullface": "up"},
"down": {"uv": [0, 4, 3, 7], "texture": "#model"}
}
},
{
"from": [2, 0, 2],
"to": [14, 1, 14],
"faces": {
"up": {"uv": [0, 4, 3, 7], "texture": "#model"},
"down": {"uv": [0, 4, 3, 7], "texture": "#model", "cullface": "down"}
}
},
{
"name": "cube_outline",
"from": [2, 14, 14],
"to": [1, 2, 2],
"faces": {
"east": {"uv": [4, 0, 7, 3], "texture": "#model"},
"west": {"uv": [4, 0, 7, 3], "texture": "#model"},
"up": {"uv": [3.25, 9.5, 3, 6.5], "texture": "#model"},
"down": {"uv": [6.75, 6, 6.5, 3], "texture": "#model"}
}
},
{
"name": "cube_outline",
"from": [15, 14, 14],
"to": [14, 2, 2],
"faces": {
"east": {"uv": [4, 0, 7, 3], "texture": "#model"},
"west": {"uv": [4, 3, 7, 0], "texture": "#model"},
"up": {"uv": [3, 6.5, 3.25, 9.5], "texture": "#model"},
"down": {"uv": [6.75, 3, 6.5, 6], "texture": "#model"}
}
},
{
"name": "cube_outline",
"from": [14, 14, 15],
"to": [2, 2, 14],
"faces": {
"north": {"uv": [4, 3, 7, 0], "texture": "#model"},
"south": {"uv": [4, 0, 7, 3], "texture": "#model"},
"up": {"uv": [3, 6.5, 3.25, 9.5], "rotation": 90, "texture": "#model"},
"down": {"uv": [6.75, 6, 6.5, 3], "rotation": 90, "texture": "#model"}
}
},
{
"name": "cube_outline",
"from": [14, 14, 2],
"to": [2, 2, 1],
"faces": {
"north": {"uv": [4, 0, 7, 3], "texture": "#model"},
"south": {"uv": [4, 3, 7, 0], "texture": "#model"},
"up": {"uv": [3, 6.5, 3.25, 9.5], "rotation": 270, "texture": "#model"},
"down": {"uv": [6.75, 3, 6.5, 6], "rotation": 90, "texture": "#model"}
}
},
{
"name": "cube_outline",
"from": [13, 16, 13],
"to": [3, 15, 3],
"faces": {
"north": {"uv": [6.5, 6, 9, 6.25], "texture": "#model"},
"east": {"uv": [6.5, 6.25, 9, 6.5], "texture": "#model"},
"south": {"uv": [6.5, 6.5, 9, 6.75], "texture": "#model"},
"west": {"uv": [6.75, 3, 9.25, 3.25], "texture": "#model"},
"up": {"uv": [5.5, 6.5, 3, 4], "texture": "#model"},
"down": {"uv": [3, 4, 5.5, 6.5], "texture": "#model"}
}
},
{
"name": "cube_outline",
"from": [13, 1, 13],
"to": [3, 0, 3],
"faces": {
"north": {"uv": [9, 6, 6.5, 6.25], "texture": "#model"},
"east": {"uv": [6.5, 6.25, 9, 6.5], "texture": "#model"},
"south": {"uv": [6.5, 6.5, 9, 6.75], "texture": "#model"},
"west": {"uv": [6.75, 3, 9.25, 3.25], "texture": "#model"},
"up": {"uv": [3, 4, 5.5, 6.5], "texture": "#model"},
"down": {"uv": [3, 4, 5.5, 6.5], "texture": "#model"}
}
}
],
"display": {
"thirdperson_righthand": {
"rotation": [75, 45, 0],
"translation": [0, 2.5, 0],
"scale": [0.375, 0.375, 0.375]
},
"thirdperson_lefthand": {
"rotation": [75, 45, 0],
"translation": [0, 2.5, 0],
"scale": [0.375, 0.375, 0.375]
},
"firstperson_righthand": {
"rotation": [0, 45, 0],
"scale": [0.4, 0.4, 0.4]
},
"firstperson_lefthand": {
"rotation": [0, -135, 0],
"scale": [0.4, 0.4, 0.4]
},
"ground": {
"translation": [0, 3, 0],
"scale": [0.25, 0.25, 0.25]
},
"gui": {
"rotation": [30, -135, 0],
"scale": [0.625, 0.625, 0.625]
},
"fixed": {
"scale": [0.5, 0.5, 0.5]
}
}
}
@@ -1 +1,57 @@
{"parent":"minecraft:block/cube_all","textures":{"all":"thaumicenergistics:block/distillation_encoder_face"}}
{
"format_version": "1.21.6",
"credit": "Made with _leng",
"parent": "minecraft:block/cube_all",
"textures": {
"positive": "thaumicenergistics:block/distillation_encoder_face",
"particle": "thaumicenergistics:block/distillation_encoder_bottom",
"bottom": "thaumicenergistics:block/distillation_encoder_bottom",
"side": "thaumicenergistics:block/distillation_encoder_front",
"top": "thaumicenergistics:block/distillation_encoder_top"
},
"elements": [
{
"from": [0, 0, 0],
"to": [16, 16, 16],
"faces": {
"north": {"uv": [0, 0, 16, 16], "texture": "#positive", "cullface": "north"},
"east": {"uv": [0, 0, 16, 16], "texture": "#side", "cullface": "east"},
"south": {"uv": [0, 0, 16, 16], "texture": "#side", "cullface": "south"},
"west": {"uv": [0, 0, 16, 16], "texture": "#side", "cullface": "west"},
"up": {"uv": [0, 0, 16, 16], "texture": "#top", "cullface": "up"},
"down": {"uv": [0, 0, 16, 16], "texture": "#bottom", "cullface": "down"}
}
}
],
"display": {
"thirdperson_righthand": {
"rotation": [75, 45, 0],
"translation": [0, 2.5, 0],
"scale": [0.375, 0.375, 0.375]
},
"thirdperson_lefthand": {
"rotation": [75, 45, 0],
"translation": [0, 2.5, 0],
"scale": [0.375, 0.375, 0.375]
},
"firstperson_righthand": {
"rotation": [0, 45, 0],
"scale": [0.4, 0.4, 0.4]
},
"firstperson_lefthand": {
"rotation": [0, -135, 0],
"scale": [0.4, 0.4, 0.4]
},
"ground": {
"translation": [0, 3, 0],
"scale": [0.25, 0.25, 0.25]
},
"gui": {
"rotation": [30, -135, 0],
"scale": [0.625, 0.625, 0.625]
},
"fixed": {
"scale": [0.5, 0.5, 0.5]
}
}
}
@@ -1,8 +1,28 @@
{
"format_version": "1.21.6",
"credit": "Made with _leng",
"parent": "minecraft:block/orientable",
"textures": {
"front": "thaumicenergistics:block/e_vibration_face_off",
"side": "thaumicenergistics:block/e_vibration_input",
"top": "thaumicenergistics:block/e_vibration_input"
"top": "thaumicenergistics:block/e_vibration_input",
"particle": "thaumicenergistics:block/e_vibration_face_back",
"back": "thaumicenergistics:block/e_vibration_face_back",
"bottom": "thaumicenergistics:block/e_vibration_face_bottom",
"side": "thaumicenergistics:block/e_vibration_face_side"
},
"elements": [
{
"from": [0, 0, 0],
"to": [16, 16, 16],
"faces": {
"north": {"uv": [0, 0, 16, 16], "texture": "#front", "cullface": "north"},
"east": {"uv": [16, 0, 0, 16], "texture": "#side", "cullface": "east"},
"south": {"uv": [0, 0, 16, 16], "texture": "#back", "cullface": "south"},
"west": {"uv": [0, 0, 16, 16], "texture": "#side", "cullface": "west"},
"up": {"uv": [0, 0, 16, 16], "texture": "#top", "cullface": "up"},
"down": {"uv": [0, 0, 16, 16], "texture": "#bottom", "cullface": "down"}
}
}
],
"display": {}
}
@@ -1,8 +1,57 @@
{
"format_version": "1.21.6",
"credit": "Made with _leng",
"parent": "minecraft:block/cube_bottom_top",
"textures": {
"positive": "thaumicenergistics:block/knowledge_inscriber_positive",
"top": "thaumicenergistics:block/knowledge_inscriber_top",
"bottom": "thaumicenergistics:block/knowledge_inscriber_bottom",
"side": "thaumicenergistics:block/knowledge_inscriber_side"
"side": "thaumicenergistics:block/knowledge_inscriber_side",
"particle": "thaumicenergistics:block/knowledge_inscriber_positive"
},
"elements": [
{
"from": [0, 0, 0],
"to": [16, 16, 16],
"faces": {
"north": {"uv": [0, 0, 16, 16], "texture": "#positive", "cullface": "north"},
"east": {"uv": [0, 0, 16, 16], "texture": "#side", "cullface": "east"},
"south": {"uv": [0, 0, 16, 16], "texture": "#side", "cullface": "south"},
"west": {"uv": [0, 0, 16, 16], "texture": "#side", "cullface": "west"},
"up": {"uv": [0, 0, 16, 16], "texture": "#top", "cullface": "up"},
"down": {"uv": [0, 0, 16, 16], "texture": "#bottom", "cullface": "down"}
}
}
],
"display": {
"thirdperson_righthand": {
"rotation": [75, 45, 0],
"translation": [0, 2.5, 0],
"scale": [0.375, 0.375, 0.375]
},
"thirdperson_lefthand": {
"rotation": [75, 45, 0],
"translation": [0, 2.5, 0],
"scale": [0.375, 0.375, 0.375]
},
"firstperson_righthand": {
"rotation": [0, 45, 0],
"scale": [0.4, 0.4, 0.4]
},
"firstperson_lefthand": {
"rotation": [0, -135, 0],
"scale": [0.4, 0.4, 0.4]
},
"ground": {
"translation": [0, 3, 0],
"scale": [0.25, 0.25, 0.25]
},
"gui": {
"rotation": [30, -135, 0],
"scale": [0.625, 0.625, 0.625]
},
"fixed": {
"scale": [0.5, 0.5, 0.5]
}
}
}
@@ -1,4 +1,6 @@
{
"format_version": "1.21.6",
"credit": "Made with _leng",
"textures": {
"sides": "thaumicenergistics:part/arcane_crafting_terminal/arcane_crafting_side",
"particle": "ae2:part/monitor_back_no_status",
@@ -19,8 +21,8 @@
}
},
{
"from": [4, 4, 2],
"to": [12, 12, 3],
"from": [4.01, 4.01, 2.01],
"to": [11.99, 11.99, 2.99],
"faces": {
"east": {"uv": [11, 4, 12, 12], "texture": "#back"},
"south": {"uv": [4, 4, 12, 12], "texture": "#back"},
@@ -1,7 +1,8 @@
{
"format_version": "1.21.6",
"credit": "Made with Blockbench by Sea_Kerman",
"textures": {
"sides": "ae2:part/export_bus_sides",
"sides": "thaumicenergistics:part/export_bus_sides_customized",
"sidesStatus": "ae2:part/monitor_sides_status",
"particle": "ae2:part/monitor_back",
"back": "ae2:part/monitor_back",
@@ -9,50 +10,128 @@
},
"elements": [
{
"from": [4, 4, 0],
"to": [12, 12, 2],
"from": [
4,
4,
2
],
"to": [
12,
12,
4
],
"faces": {
"north": { "uv": [4, 4, 12, 12], "texture": "#front" },
"east": { "uv": [14, 4, 16, 12], "texture": "#sides" },
"south": { "uv": [4, 4, 12, 12], "texture": "#sides" },
"west": { "uv": [0, 4, 2, 12], "texture": "#sides" },
"up": { "uv": [4, 0, 12, 2], "texture": "#sides" },
"down": { "uv": [4, 14, 12, 16], "texture": "#sides" }
"down": {
"texture": "#sides"
},
"up": {
"texture": "#sides"
},
"south": {
"texture": "#back"
},
"east": {
"texture": "#sides"
},
"north": {
"texture": "#front"
},
"west": {
"texture": "#sides"
}
}
},
{
"from": [5, 5, 2],
"to": [11, 11, 3],
"from": [
5,
5,
1
],
"to": [
11,
11,
2
],
"faces": {
"north": { "uv": [5, 5, 11, 11], "texture": "#front" },
"east": { "uv": [13, 5, 14, 11], "texture": "#sides" },
"south": { "uv": [5, 5, 11, 11], "texture": "#sides" },
"west": { "uv": [2, 5, 3, 11], "texture": "#sides" },
"up": { "uv": [5, 2, 11, 3], "texture": "#sides" },
"down": { "uv": [5, 13, 11, 14], "texture": "#sides" }
"down": {
"texture": "#sides"
},
"up": {
"texture": "#sides"
},
"south": {
"texture": "#back"
},
"east": {
"texture": "#sides"
},
"north": {
"texture": "#front"
},
"west": {
"texture": "#sides"
}
}
},
{
"from": [6, 6, 3],
"to": [10, 10, 4],
"from": [
6,
6,
0
],
"to": [
10,
10,
1
],
"faces": {
"north": { "uv": [6, 6, 10, 10], "texture": "#front" },
"east": { "uv": [12, 6, 13, 10], "texture": "#sides" },
"south": { "uv": [6, 6, 10, 10], "texture": "#back" },
"west": { "uv": [3, 6, 4, 10], "texture": "#sides" },
"up": { "uv": [6, 3, 10, 4], "texture": "#sides" },
"down": { "uv": [6, 12, 10, 13], "texture": "#sides" }
"down": {
"texture": "#sides"
},
"up": {
"texture": "#sides"
},
"south": {
"texture": "#back"
},
"east": {
"texture": "#sides"
},
"north": {
"texture": "#front"
},
"west": {
"texture": "#sides"
}
}
},
{
"from": [6, 6, 4],
"to": [10, 10, 5],
"from": [
6,
6,
4
],
"to": [
10,
10,
5
],
"faces": {
"east": { "uv": [11, 6, 12, 10], "texture": "#sidesStatus" },
"south": { "uv": [6, 6, 10, 10], "texture": "#back" },
"west": { "uv": [4, 6, 5, 10], "texture": "#sidesStatus" },
"up": { "uv": [6, 4, 10, 5], "texture": "#sidesStatus" },
"down": { "uv": [6, 11, 10, 12], "texture": "#sidesStatus" }
"down": {
"texture": "#sidesStatus"
},
"up": {
"texture": "#sidesStatus"
},
"south": {
"texture": "#back"
},
"east": {
"texture": "#sidesStatus"
},
"west": {
"texture": "#sidesStatus"
}
}
}
]
@@ -1,7 +1,8 @@
{
"format_version": "1.21.6",
"credit": "Made with Blockbench by Sea_Kerman",
"textures": {
"sides": "ae2:part/import_bus_sides",
"sides": "thaumicenergistics:part/import_bus_sides_customized",
"sidesStatus": "ae2:part/monitor_sides_status",
"particle": "ae2:part/monitor_back",
"back": "ae2:part/monitor_back",
@@ -1,4 +1,5 @@
{
"format_version": "1.21.6",
"credit": "Made with Blockbench by Sea_Kerman",
"textures": {
"sides": "ae2:part/storage_bus_sides",
@@ -8,39 +9,74 @@
"elements": [
{
"from": [3, 3, 0],
"to": [13, 13, 2],
"to": [13, 13, 1],
"faces": {
"north": {"uv": [3, 3, 13, 13], "texture": "#front"},
"east": { "uv": [14, 3, 16, 13], "texture": "#sides" },
"south": { "uv": [3, 3, 13, 13], "texture": "#sides" },
"west": { "uv": [0, 3, 2, 13], "texture": "#sides" },
"up": { "uv": [3, 0, 13, 2], "texture": "#sides" },
"down": { "uv": [3, 14, 13, 16], "texture": "#sides" }
"east": {"uv": [13, 3, 14, 13], "texture": "#front"},
"south": {"uv": [3, 3, 13, 13], "texture": "#front"},
"west": {"uv": [2, 13, 3, 3], "texture": "#front"},
"up": {"uv": [3, 2, 13, 3], "texture": "#front"},
"down": {"uv": [3, 13, 13, 14], "texture": "#front"}
}
},
{
"from": [2, 2, 2],
"to": [14, 14, 3],
"from": [2, 2, 1],
"to": [14, 14, 2],
"faces": {
"north": { "uv": [2, 2, 14, 14], "texture": "#front" },
"east": { "uv": [13, 2, 14, 14], "texture": "#sides" },
"south": { "uv": [2, 2, 14, 14], "texture": "#sides" },
"west": { "uv": [2, 2, 3, 14], "texture": "#sides" },
"up": { "uv": [2, 2, 14, 3], "texture": "#sides" },
"down": { "uv": [2, 13, 14, 14], "texture": "#sides" }
"north": {"uv": [2, 2, 14, 14], "texture": "#back"},
"east": {"uv": [13, 2, 14, 14], "texture": "#back"},
"south": {"uv": [2, 2, 14, 14], "texture": "#back"},
"west": {"uv": [2, 2, 3, 14], "texture": "#back"},
"up": {"uv": [2, 2, 14, 3], "texture": "#back"},
"down": {"uv": [2, 13, 14, 14], "texture": "#back"}
}
},
{
"from": [5, 5, 3],
"to": [11, 11, 5],
"from": [5, 5, 2],
"to": [11, 11, 4],
"faces": {
"north": {"uv": [5, 5, 11, 11], "texture": "#front"},
"east": { "uv": [6, 5, 8, 11], "texture": "#sides" },
"east": {"uv": [4, 5, 2, 11], "texture": "#sides"},
"south": {"uv": [5, 5, 11, 11], "texture": "#back"},
"west": { "uv": [8, 5, 10, 11], "texture": "#sides" },
"up": { "uv": [5, 3, 11, 5], "texture": "#sides" },
"down": { "uv": [5, 11, 11, 13], "texture": "#sides" }
"west": {"uv": [14, 5, 12, 11], "texture": "#sides"},
"up": {"uv": [5, 2, 11, 4], "texture": "#sides"},
"down": {"uv": [5, 12, 11, 14], "texture": "#sides"}
}
}
],
"display": {
"thirdperson_righthand": {
"rotation": [75, 45, 0],
"translation": [0, -1.5, 0],
"scale": [0.375, 0.375, 0.375]
},
"thirdperson_lefthand": {
"rotation": [75, 45, 0],
"translation": [0, -1.5, 0],
"scale": [0.375, 0.375, 0.375]
},
"firstperson_righthand": {
"rotation": [0, 45, 0],
"translation": [2, 0, 0],
"scale": [0.4, 0.4, 0.4]
},
"firstperson_lefthand": {
"rotation": [0, 45.5, 0],
"translation": [2.5, 0.5, 0],
"scale": [0.4, 0.4, 0.4]
},
"ground": {
"translation": [0, 3, 0],
"scale": [0.25, 0.25, 0.25]
},
"gui": {
"rotation": [30, -135, 0],
"translation": [-3.75, 1.25, 0],
"scale": [0.785, 0.785, 0.785]
},
"fixed": {
"translation": [0, 0, 2.75],
"scale": [0.5, 0.5, 0.5]
}
}
]
}
@@ -1,16 +1,18 @@
{
"format_version": "1.21.6",
"credit": "Made with _leng",
"textures": {
"indicator": "ae2:part/monitor_sides_status_has_channel"
},
"elements": [
{
"from": [5, 5, 3],
"to": [11, 11, 5],
"from": [4.99, 4.99, 1.99],
"to": [11.01, 11.01, 3.01],
"faces": {
"down": { "texture": "#indicator" },
"up": { "texture": "#indicator" },
"east": { "texture": "#indicator" },
"west": { "texture": "#indicator" }
"east": {"uv": [13, 5, 14, 11], "texture": "#indicator"},
"west": {"uv": [2, 5, 3, 11], "texture": "#indicator"},
"up": {"uv": [5, 2, 11, 3], "texture": "#indicator"},
"down": {"uv": [5, 13, 11, 14], "texture": "#indicator"}
}
}
]
@@ -1,16 +1,18 @@
{
"format_version": "1.21.6",
"credit": "Made with _leng",
"textures": {
"indicator": "ae2:part/monitor_sides_status_off"
},
"elements": [
{
"from": [5, 5, 3],
"to": [11, 11, 5],
"from": [4.99, 4.99, 1.99],
"to": [11.01, 11.01, 3.01],
"faces": {
"down": { "texture": "#indicator" },
"up": { "texture": "#indicator" },
"east": { "texture": "#indicator" },
"west": { "texture": "#indicator" }
"east": {"uv": [13, 5, 14, 11], "texture": "#indicator"},
"west": {"uv": [2, 5, 3, 11], "texture": "#indicator"},
"up": {"uv": [5, 2, 11, 3], "texture": "#indicator"},
"down": {"uv": [5, 13, 11, 14], "texture": "#indicator"}
}
}
]
@@ -1,16 +1,18 @@
{
"format_version": "1.21.6",
"credit": "Made with _leng",
"textures": {
"indicator": "ae2:part/monitor_sides_status_on"
},
"elements": [
{
"from": [5, 5, 3],
"to": [11, 11, 5],
"from": [4.99, 4.99, 1.99],
"to": [11.01, 11.01, 3.01],
"faces": {
"down": { "texture": "#indicator" },
"up": { "texture": "#indicator" },
"east": { "texture": "#indicator" },
"west": { "texture": "#indicator" }
"east": {"uv": [13, 5, 14, 11], "texture": "#indicator"},
"west": {"uv": [2, 5, 3, 11], "texture": "#indicator"},
"up": {"uv": [5, 2, 11, 3], "texture": "#indicator"},
"down": {"uv": [5, 13, 11, 14], "texture": "#indicator"}
}
}
]
@@ -1,4 +1,5 @@
{
"format_version": "1.21.6",
"credit": "对齐 AE2 monitor_base.json",
"textures": {
"sides": "ae2:part/monitor_sides",
@@ -8,130 +9,26 @@
},
"elements": [
{
"from": [
2,
2,
0
],
"to": [
14,
14,
2
],
"from": [2, 2, 0],
"to": [14, 14, 2],
"faces": {
"north": {
"uv": [
2,
2,
14,
14
],
"texture": "#front"
},
"east": {
"uv": [
14,
2,
16,
14
],
"texture": "#sides"
},
"south": {
"uv": [
2,
2,
14,
14
],
"texture": "#back"
},
"west": {
"uv": [
0,
2,
2,
14
],
"texture": "#sides"
},
"up": {
"uv": [
2,
0,
14,
2
],
"texture": "#sides"
},
"down": {
"uv": [
2,
14,
14,
16
],
"texture": "#sides"
}
"north": {"uv": [2, 2, 14, 14], "texture": "#front"},
"east": {"uv": [14, 2, 16, 14], "texture": "#sides"},
"south": {"uv": [2, 2, 14, 14], "texture": "#back"},
"west": {"uv": [0, 2, 2, 14], "texture": "#sides"},
"up": {"uv": [2, 0, 14, 2], "texture": "#sides"},
"down": {"uv": [2, 14, 14, 16], "texture": "#sides"}
}
},
{
"from": [
4,
4,
2
],
"to": [
12,
12,
3
],
"from": [4.01, 4.01, 2.01],
"to": [11.99, 11.99, 2.99],
"faces": {
"east": {
"uv": [
11,
4,
12,
12
],
"texture": "#back"
},
"south": {
"uv": [
4,
4,
12,
12
],
"texture": "#back"
},
"west": {
"uv": [
4,
4,
5,
12
],
"texture": "#back"
},
"up": {
"uv": [
4,
4,
12,
5
],
"texture": "#back"
},
"down": {
"uv": [
4,
11,
12,
12
],
"texture": "#back"
}
"east": {"uv": [11, 4, 12, 12], "texture": "#back"},
"south": {"uv": [4, 4, 12, 12], "texture": "#back"},
"west": {"uv": [4, 4, 5, 12], "texture": "#back"},
"up": {"uv": [4, 4, 12, 5], "texture": "#back"},
"down": {"uv": [4, 11, 12, 12], "texture": "#back"}
}
}
]
Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 608 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.6 KiB

After

Width:  |  Height:  |  Size: 361 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 354 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

After

Width:  |  Height:  |  Size: 540 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 347 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 435 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 318 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

After

Width:  |  Height:  |  Size: 592 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

After

Width:  |  Height:  |  Size: 519 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 293 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 383 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

After

Width:  |  Height:  |  Size: 391 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.1 KiB

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.7 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.0 KiB

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.8 KiB

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.8 KiB

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 448 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 464 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 442 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 448 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 447 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 763 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

After

Width:  |  Height:  |  Size: 455 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

After

Width:  |  Height:  |  Size: 487 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 458 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

@@ -1,5 +1,6 @@
{
"animation": {
"interpolate": true,
"frametime": 3
}
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 612 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 604 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 482 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 277 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 370 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 561 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 338 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 301 B

After

Width:  |  Height:  |  Size: 410 B