逃过一劫
|
|
@ -32,7 +32,9 @@ public class ProviderSelectScreen extends Screen {
|
||||||
// 置顶的供应器名称集合(静态变量,持久化到配置文件)
|
// 置顶的供应器名称集合(静态变量,持久化到配置文件)
|
||||||
private static final Set<String> pinnedProviders = new HashSet<>();
|
private static final Set<String> pinnedProviders = new HashSet<>();
|
||||||
private static final String PINNED_CONFIG_PATH = "extendedae_plus/pinned_providers.json";
|
private static final String PINNED_CONFIG_PATH = "extendedae_plus/pinned_providers.json";
|
||||||
|
private static final String AUTO_UPLOAD_UNIQUE_MATCH_KEY = "auto_upload_unique_match";
|
||||||
private static final Gson GSON = new GsonBuilder().setPrettyPrinting().disableHtmlEscaping().create();
|
private static final Gson GSON = new GsonBuilder().setPrettyPrinting().disableHtmlEscaping().create();
|
||||||
|
private static boolean autoUploadUniqueMatchEnabled = true;
|
||||||
|
|
||||||
// 静态初始化块:加载置顶配置
|
// 静态初始化块:加载置顶配置
|
||||||
static {
|
static {
|
||||||
|
|
@ -63,6 +65,7 @@ public class ProviderSelectScreen extends Screen {
|
||||||
private EditBox searchBox;
|
private EditBox searchBox;
|
||||||
// 中文名输入框(用于添加映射)
|
// 中文名输入框(用于添加映射)
|
||||||
private EditBox cnInput;
|
private EditBox cnInput;
|
||||||
|
private Button autoUploadToggleButton;
|
||||||
private String query = "";
|
private String query = "";
|
||||||
private boolean needsRefresh = false;
|
private boolean needsRefresh = false;
|
||||||
private int page = 0;
|
private int page = 0;
|
||||||
|
|
@ -143,6 +146,22 @@ public class ProviderSelectScreen extends Screen {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Component buildAutoUploadToggleLabel() {
|
||||||
|
String stateKey = autoUploadUniqueMatchEnabled
|
||||||
|
? "extendedae_plus.configuration.state_on"
|
||||||
|
: "extendedae_plus.configuration.state_off";
|
||||||
|
return Component.translatable("extendedae_plus.screen.auto_upload_unique_match",
|
||||||
|
Component.translatable(stateKey));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void toggleAutoUploadUniqueMatch() {
|
||||||
|
autoUploadUniqueMatchEnabled = !autoUploadUniqueMatchEnabled;
|
||||||
|
savePinnedProviders();
|
||||||
|
if (this.autoUploadToggleButton != null) {
|
||||||
|
this.autoUploadToggleButton.setMessage(this.buildAutoUploadToggleLabel());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private String buildLabel(int idx) {
|
private String buildLabel(int idx) {
|
||||||
String name = this.fNames.get(idx);
|
String name = this.fNames.get(idx);
|
||||||
int totalSlots = this.fTotalSlots.get(idx);
|
int totalSlots = this.fTotalSlots.get(idx);
|
||||||
|
|
@ -251,7 +270,7 @@ public class ProviderSelectScreen extends Screen {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void tryAutoUploadIfUniqueMatch() {
|
private void tryAutoUploadIfUniqueMatch() {
|
||||||
if (!this.autoUploadRequestedFromPresetSearch || this.autoUploadAttempted) {
|
if (!autoUploadUniqueMatchEnabled || !this.autoUploadRequestedFromPresetSearch || this.autoUploadAttempted) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
this.autoUploadAttempted = true;
|
this.autoUploadAttempted = true;
|
||||||
|
|
@ -336,35 +355,40 @@ public class ProviderSelectScreen extends Screen {
|
||||||
|
|
||||||
// 重载映射按钮(热重载 recipe_type_names.json)——移至下一行,与关闭按钮并排
|
// 重载映射按钮(热重载 recipe_type_names.json)——移至下一行,与关闭按钮并排
|
||||||
Button reload = Button.builder(Component.translatable("extendedae_plus.screen.reload_mapping"), b -> this.reloadMapping())
|
Button reload = Button.builder(Component.translatable("extendedae_plus.screen.reload_mapping"), b -> this.reloadMapping())
|
||||||
.bounds(centerX - 130, navY + 30, 80, 20)
|
.bounds(centerX - 130, navY + 55, 80, 20)
|
||||||
.build();
|
.build();
|
||||||
this.addRenderableWidget(reload);
|
this.addRenderableWidget(reload);
|
||||||
|
|
||||||
|
this.autoUploadToggleButton = Button.builder(this.buildAutoUploadToggleLabel(), b -> this.toggleAutoUploadUniqueMatch())
|
||||||
|
.bounds(centerX + 50, navY + 30, 250, 20)
|
||||||
|
.build();
|
||||||
|
this.addRenderableWidget(this.autoUploadToggleButton);
|
||||||
|
|
||||||
// 中文名输入框(用于新增映射的值)
|
// 中文名输入框(用于新增映射的值)
|
||||||
if (this.cnInput == null) {
|
if (this.cnInput == null) {
|
||||||
this.cnInput = new EditBox(this.font, centerX + 50, navY + 30, 120, 20, Component.translatable("extendedae_plus.screen.cn_name"));
|
this.cnInput = new EditBox(this.font, centerX + 50, navY + 55, 120, 20, Component.translatable("extendedae_plus.screen.cn_name"));
|
||||||
} else {
|
} else {
|
||||||
this.cnInput.setX(centerX + 50);
|
this.cnInput.setX(centerX + 50);
|
||||||
this.cnInput.setY(navY + 30);
|
this.cnInput.setY(navY + 55);
|
||||||
this.cnInput.setWidth(120);
|
this.cnInput.setWidth(120);
|
||||||
}
|
}
|
||||||
this.addRenderableWidget(this.cnInput);
|
this.addRenderableWidget(this.cnInput);
|
||||||
|
|
||||||
// 增加映射按钮(使用当前搜索关键字 -> 中文)
|
// 增加映射按钮(使用当前搜索关键字 -> 中文)
|
||||||
Button addMap = Button.builder(Component.translatable("extendedae_plus.screen.add_mapping"), b -> this.addMappingFromUI())
|
Button addMap = Button.builder(Component.translatable("extendedae_plus.screen.add_mapping"), b -> this.addMappingFromUI())
|
||||||
.bounds(centerX + 175, navY + 30, 60, 20)
|
.bounds(centerX + 175, navY + 55, 60, 20)
|
||||||
.build();
|
.build();
|
||||||
this.addRenderableWidget(addMap);
|
this.addRenderableWidget(addMap);
|
||||||
|
|
||||||
// 删除映射(按中文值精确匹配删除)按钮
|
// 删除映射(按中文值精确匹配删除)按钮
|
||||||
Button delByCn = Button.builder(Component.translatable("extendedae_plus.screen.remove_mapping"), b -> this.deleteMappingByCnFromUI())
|
Button delByCn = Button.builder(Component.translatable("extendedae_plus.screen.remove_mapping"), b -> this.deleteMappingByCnFromUI())
|
||||||
.bounds(centerX + 240, navY + 30, 60, 20)
|
.bounds(centerX + 240, navY + 55, 60, 20)
|
||||||
.build();
|
.build();
|
||||||
this.addRenderableWidget(delByCn);
|
this.addRenderableWidget(delByCn);
|
||||||
|
|
||||||
// 关闭按钮
|
// 关闭按钮
|
||||||
Button close = Button.builder(Component.translatable("gui.cancel"), b -> this.onClose())
|
Button close = Button.builder(Component.translatable("gui.cancel"), b -> this.onClose())
|
||||||
.bounds(centerX - 40, navY + 30, 80, 20)
|
.bounds(centerX - 40, navY + 55, 80, 20)
|
||||||
.build();
|
.build();
|
||||||
this.addRenderableWidget(close);
|
this.addRenderableWidget(close);
|
||||||
|
|
||||||
|
|
@ -533,6 +557,11 @@ public class ProviderSelectScreen extends Screen {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
JsonElement autoUploadElement = obj.get(AUTO_UPLOAD_UNIQUE_MATCH_KEY);
|
||||||
|
if (autoUploadElement != null && autoUploadElement.isJsonPrimitive()) {
|
||||||
|
autoUploadUniqueMatchEnabled = autoUploadElement.getAsBoolean();
|
||||||
|
}
|
||||||
} catch (IOException | JsonSyntaxException e) {
|
} catch (IOException | JsonSyntaxException e) {
|
||||||
// 加载失败时静默处理
|
// 加载失败时静默处理
|
||||||
}
|
}
|
||||||
|
|
@ -552,6 +581,7 @@ public class ProviderSelectScreen extends Screen {
|
||||||
arr.add(name);
|
arr.add(name);
|
||||||
}
|
}
|
||||||
obj.add("pinned", arr);
|
obj.add("pinned", arr);
|
||||||
|
obj.addProperty(AUTO_UPLOAD_UNIQUE_MATCH_KEY, autoUploadUniqueMatchEnabled);
|
||||||
|
|
||||||
Files.writeString(cfgPath, GSON.toJson(obj));
|
Files.writeString(cfgPath, GSON.toJson(obj));
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
|
|
|
||||||
|
|
@ -5,8 +5,12 @@ import appeng.api.ids.AEComponents;
|
||||||
import appeng.api.inventories.InternalInventory;
|
import appeng.api.inventories.InternalInventory;
|
||||||
import appeng.api.networking.IManagedGridNode;
|
import appeng.api.networking.IManagedGridNode;
|
||||||
import appeng.block.crafting.PatternProviderBlock;
|
import appeng.block.crafting.PatternProviderBlock;
|
||||||
|
import appeng.block.crafting.PushDirection;
|
||||||
import appeng.blockentity.crafting.PatternProviderBlockEntity;
|
import appeng.blockentity.crafting.PatternProviderBlockEntity;
|
||||||
|
import appeng.blockentity.networking.CableBusBlockEntity;
|
||||||
import appeng.helpers.patternprovider.PatternProviderLogic;
|
import appeng.helpers.patternprovider.PatternProviderLogic;
|
||||||
|
import appeng.helpers.patternprovider.PatternProviderLogicHost;
|
||||||
|
import appeng.parts.AEBasePart;
|
||||||
import appeng.util.SettingsFrom;
|
import appeng.util.SettingsFrom;
|
||||||
import appeng.util.inv.AppEngInternalInventory;
|
import appeng.util.inv.AppEngInternalInventory;
|
||||||
import com.extendedae_plus.api.bridge.PatternProviderLogicSyncBridge;
|
import com.extendedae_plus.api.bridge.PatternProviderLogicSyncBridge;
|
||||||
|
|
@ -21,6 +25,7 @@ import net.minecraft.core.registries.Registries;
|
||||||
import net.minecraft.nbt.CompoundTag;
|
import net.minecraft.nbt.CompoundTag;
|
||||||
import net.minecraft.nbt.Tag;
|
import net.minecraft.nbt.Tag;
|
||||||
import net.minecraft.network.chat.Component;
|
import net.minecraft.network.chat.Component;
|
||||||
|
import net.minecraft.network.chat.MutableComponent;
|
||||||
import net.minecraft.resources.ResourceKey;
|
import net.minecraft.resources.ResourceKey;
|
||||||
import net.minecraft.resources.ResourceLocation;
|
import net.minecraft.resources.ResourceLocation;
|
||||||
import net.minecraft.server.level.ServerLevel;
|
import net.minecraft.server.level.ServerLevel;
|
||||||
|
|
@ -38,6 +43,7 @@ public class MirrorPatternProviderBlockEntity extends PatternProviderBlockEntity
|
||||||
private static final String TAG_MASTER = "mirrorMaster";
|
private static final String TAG_MASTER = "mirrorMaster";
|
||||||
private static final String TAG_MASTER_DIMENSION = "dimension";
|
private static final String TAG_MASTER_DIMENSION = "dimension";
|
||||||
private static final String TAG_MASTER_POS = "pos";
|
private static final String TAG_MASTER_POS = "pos";
|
||||||
|
private static final String TAG_MASTER_SIDE = "side";
|
||||||
private static final int FAST_SYNC_INTERVAL = 2;
|
private static final int FAST_SYNC_INTERVAL = 2;
|
||||||
private static final int STABLE_SYNC_INTERVAL = 20;
|
private static final int STABLE_SYNC_INTERVAL = 20;
|
||||||
private static final int UNLOADED_MASTER_RETRY_INTERVAL = 40;
|
private static final int UNLOADED_MASTER_RETRY_INTERVAL = 40;
|
||||||
|
|
@ -52,10 +58,26 @@ public class MirrorPatternProviderBlockEntity extends PatternProviderBlockEntity
|
||||||
@Nullable
|
@Nullable
|
||||||
private BlockPos masterPos;
|
private BlockPos masterPos;
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
private Direction masterSide;
|
||||||
|
|
||||||
private long nextSyncTick = Long.MIN_VALUE;
|
private long nextSyncTick = Long.MIN_VALUE;
|
||||||
private long lastSyncedPatternVersion = UNKNOWN_PATTERN_SYNC_VERSION;
|
private long lastSyncedPatternVersion = UNKNOWN_PATTERN_SYNC_VERSION;
|
||||||
private boolean needsUnboundPatternCleanup;
|
private boolean needsUnboundPatternCleanup;
|
||||||
|
|
||||||
|
public record MasterLocation(ResourceKey<Level> dimension, BlockPos pos, @Nullable Direction side) {
|
||||||
|
public MasterLocation {
|
||||||
|
pos = pos.immutable();
|
||||||
|
}
|
||||||
|
|
||||||
|
public GlobalPos asGlobalPos() {
|
||||||
|
return GlobalPos.of(this.dimension, this.pos);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private record ResolvedMaster(MasterLocation location, PatternProviderLogicHost host) {
|
||||||
|
}
|
||||||
|
|
||||||
public MirrorPatternProviderBlockEntity(BlockPos pos, BlockState blockState) {
|
public MirrorPatternProviderBlockEntity(BlockPos pos, BlockState blockState) {
|
||||||
super(ModBlockEntities.MIRROR_PATTERN_PROVIDER_BE.get(), pos, blockState);
|
super(ModBlockEntities.MIRROR_PATTERN_PROVIDER_BE.get(), pos, blockState);
|
||||||
}
|
}
|
||||||
|
|
@ -106,6 +128,9 @@ public class MirrorPatternProviderBlockEntity extends PatternProviderBlockEntity
|
||||||
var masterTag = new CompoundTag();
|
var masterTag = new CompoundTag();
|
||||||
masterTag.putString(TAG_MASTER_DIMENSION, this.masterDimension.location().toString());
|
masterTag.putString(TAG_MASTER_DIMENSION, this.masterDimension.location().toString());
|
||||||
masterTag.putLong(TAG_MASTER_POS, this.masterPos.asLong());
|
masterTag.putLong(TAG_MASTER_POS, this.masterPos.asLong());
|
||||||
|
if (this.masterSide != null) {
|
||||||
|
masterTag.putString(TAG_MASTER_SIDE, this.masterSide.getSerializedName());
|
||||||
|
}
|
||||||
data.put(TAG_MASTER, masterTag);
|
data.put(TAG_MASTER, masterTag);
|
||||||
} else {
|
} else {
|
||||||
data.remove(TAG_MASTER);
|
data.remove(TAG_MASTER);
|
||||||
|
|
@ -118,6 +143,7 @@ public class MirrorPatternProviderBlockEntity extends PatternProviderBlockEntity
|
||||||
|
|
||||||
this.masterDimension = null;
|
this.masterDimension = null;
|
||||||
this.masterPos = null;
|
this.masterPos = null;
|
||||||
|
this.masterSide = null;
|
||||||
this.scheduleImmediateSync();
|
this.scheduleImmediateSync();
|
||||||
this.invalidatePatternSyncState();
|
this.invalidatePatternSyncState();
|
||||||
this.needsUnboundPatternCleanup = true;
|
this.needsUnboundPatternCleanup = true;
|
||||||
|
|
@ -128,6 +154,9 @@ public class MirrorPatternProviderBlockEntity extends PatternProviderBlockEntity
|
||||||
Registries.DIMENSION,
|
Registries.DIMENSION,
|
||||||
ResourceLocation.parse(masterTag.getString(TAG_MASTER_DIMENSION)));
|
ResourceLocation.parse(masterTag.getString(TAG_MASTER_DIMENSION)));
|
||||||
this.masterPos = BlockPos.of(masterTag.getLong(TAG_MASTER_POS));
|
this.masterPos = BlockPos.of(masterTag.getLong(TAG_MASTER_POS));
|
||||||
|
if (masterTag.contains(TAG_MASTER_SIDE, Tag.TAG_STRING)) {
|
||||||
|
this.masterSide = Direction.byName(masterTag.getString(TAG_MASTER_SIDE));
|
||||||
|
}
|
||||||
this.needsUnboundPatternCleanup = false;
|
this.needsUnboundPatternCleanup = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -166,6 +195,10 @@ public class MirrorPatternProviderBlockEntity extends PatternProviderBlockEntity
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean bindToMaster(GlobalPos master) {
|
public boolean bindToMaster(GlobalPos master) {
|
||||||
|
return this.bindToMaster(new MasterLocation(master.dimension(), master.pos(), null));
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean bindToMaster(MasterLocation master) {
|
||||||
if (!(this.getLevel() instanceof ServerLevel serverLevel)) {
|
if (!(this.getLevel() instanceof ServerLevel serverLevel)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
@ -174,17 +207,18 @@ public class MirrorPatternProviderBlockEntity extends PatternProviderBlockEntity
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var resolvedMaster = this.resolveMaster(serverLevel, master);
|
||||||
|
if (resolvedMaster != null) {
|
||||||
|
this.syncFromMaster(resolvedMaster);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
var masterLevel = serverLevel.getServer().getLevel(master.dimension());
|
var masterLevel = serverLevel.getServer().getLevel(master.dimension());
|
||||||
if (masterLevel != null && masterLevel.hasChunkAt(master.pos())) {
|
if (masterLevel != null && masterLevel.hasChunkAt(master.pos())) {
|
||||||
var blockEntity = masterLevel.getBlockEntity(master.pos());
|
|
||||||
if (isValidMaster(blockEntity)) {
|
|
||||||
this.syncFromMaster((PatternProviderBlockEntity) blockEntity);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
var changed = this.setBoundMaster(master.dimension(), master.pos());
|
var changed = this.setBoundMaster(master);
|
||||||
if (changed) {
|
if (changed) {
|
||||||
this.flushStateChanges();
|
this.flushStateChanges();
|
||||||
}
|
}
|
||||||
|
|
@ -193,33 +227,22 @@ public class MirrorPatternProviderBlockEntity extends PatternProviderBlockEntity
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
public PatternProviderBlockEntity getMaster() {
|
public PatternProviderLogicHost getMaster() {
|
||||||
if (this.masterDimension == null || this.masterPos == null || !(this.getLevel() instanceof ServerLevel serverLevel)) {
|
if (!(this.getLevel() instanceof ServerLevel serverLevel)) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
ServerLevel masterLevel;
|
var master = this.resolveBoundMaster(serverLevel);
|
||||||
if (serverLevel.dimension() == this.masterDimension) {
|
return master != null ? master.host() : null;
|
||||||
masterLevel = serverLevel;
|
|
||||||
} else {
|
|
||||||
masterLevel = serverLevel.getServer().getLevel(this.masterDimension);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (masterLevel == null || !masterLevel.hasChunkAt(this.masterPos)) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
var blockEntity = masterLevel.getBlockEntity(this.masterPos);
|
|
||||||
return isValidMaster(blockEntity) ? (PatternProviderBlockEntity) blockEntity : null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Component createBoundMessage() {
|
public Component createBoundMessage() {
|
||||||
if (this.masterPos != null) {
|
if (this.masterPos != null) {
|
||||||
return Component.translatable(
|
return this.appendMasterSide(Component.translatable(
|
||||||
"extendedae_plus.message.mirror_pattern_provider.bound",
|
"extendedae_plus.message.mirror_pattern_provider.bound",
|
||||||
this.masterPos.getX(),
|
this.masterPos.getX(),
|
||||||
this.masterPos.getY(),
|
this.masterPos.getY(),
|
||||||
this.masterPos.getZ());
|
this.masterPos.getZ()));
|
||||||
}
|
}
|
||||||
|
|
||||||
return Component.translatable("extendedae_plus.message.mirror_pattern_provider.missing_master");
|
return Component.translatable("extendedae_plus.message.mirror_pattern_provider.missing_master");
|
||||||
|
|
@ -227,11 +250,11 @@ public class MirrorPatternProviderBlockEntity extends PatternProviderBlockEntity
|
||||||
|
|
||||||
public Component getStatusMessage() {
|
public Component getStatusMessage() {
|
||||||
if (this.masterPos != null) {
|
if (this.masterPos != null) {
|
||||||
return Component.translatable(
|
return this.appendMasterSide(Component.translatable(
|
||||||
"extendedae_plus.message.mirror_pattern_provider.following",
|
"extendedae_plus.message.mirror_pattern_provider.following",
|
||||||
this.masterPos.getX(),
|
this.masterPos.getX(),
|
||||||
this.masterPos.getY(),
|
this.masterPos.getY(),
|
||||||
this.masterPos.getZ());
|
this.masterPos.getZ()));
|
||||||
}
|
}
|
||||||
|
|
||||||
return Component.translatable("extendedae_plus.message.mirror_pattern_provider.missing_master");
|
return Component.translatable("extendedae_plus.message.mirror_pattern_provider.missing_master");
|
||||||
|
|
@ -273,7 +296,11 @@ public class MirrorPatternProviderBlockEntity extends PatternProviderBlockEntity
|
||||||
return UNLOADED_MASTER_RETRY_INTERVAL;
|
return UNLOADED_MASTER_RETRY_INTERVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
var master = this.getMaster();
|
if (!(this.getLevel() instanceof ServerLevel serverLevel)) {
|
||||||
|
return UNLOADED_MASTER_RETRY_INTERVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
var master = this.resolveBoundMaster(serverLevel);
|
||||||
if (master != null) {
|
if (master != null) {
|
||||||
return this.syncFromMaster(master) ? FAST_SYNC_INTERVAL : STABLE_SYNC_INTERVAL;
|
return this.syncFromMaster(master) ? FAST_SYNC_INTERVAL : STABLE_SYNC_INTERVAL;
|
||||||
}
|
}
|
||||||
|
|
@ -298,18 +325,19 @@ public class MirrorPatternProviderBlockEntity extends PatternProviderBlockEntity
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
ServerLevel masterLevel;
|
var target = this.getBoundMasterLocation();
|
||||||
if (serverLevel.dimension() == this.masterDimension) {
|
if (target == null) {
|
||||||
masterLevel = serverLevel;
|
|
||||||
} else {
|
|
||||||
masterLevel = serverLevel.getServer().getLevel(this.masterDimension);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (masterLevel == null || !masterLevel.hasChunkAt(this.masterPos)) {
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return !isValidMaster(masterLevel.getBlockEntity(this.masterPos));
|
var masterLevel = target.dimension() == serverLevel.dimension()
|
||||||
|
? serverLevel
|
||||||
|
: serverLevel.getServer().getLevel(target.dimension());
|
||||||
|
if (masterLevel == null || !masterLevel.hasChunkAt(target.pos())) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.resolveMaster(serverLevel, target) == null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean clearMasterBinding(boolean clearMirroredPatterns) {
|
private boolean clearMasterBinding(boolean clearMirroredPatterns) {
|
||||||
|
|
@ -317,6 +345,7 @@ public class MirrorPatternProviderBlockEntity extends PatternProviderBlockEntity
|
||||||
|
|
||||||
this.masterDimension = null;
|
this.masterDimension = null;
|
||||||
this.masterPos = null;
|
this.masterPos = null;
|
||||||
|
this.masterSide = null;
|
||||||
this.invalidatePatternSyncState();
|
this.invalidatePatternSyncState();
|
||||||
this.needsUnboundPatternCleanup = false;
|
this.needsUnboundPatternCleanup = false;
|
||||||
|
|
||||||
|
|
@ -329,12 +358,14 @@ public class MirrorPatternProviderBlockEntity extends PatternProviderBlockEntity
|
||||||
return changed;
|
return changed;
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean setBoundMaster(ResourceKey<Level> dimension, BlockPos pos) {
|
private boolean setBoundMaster(MasterLocation master) {
|
||||||
var newPos = pos.immutable();
|
var changed = !Objects.equals(this.masterDimension, master.dimension())
|
||||||
var changed = !Objects.equals(this.masterDimension, dimension) || !Objects.equals(this.masterPos, newPos);
|
|| !Objects.equals(this.masterPos, master.pos())
|
||||||
|
|| !Objects.equals(this.masterSide, master.side());
|
||||||
|
|
||||||
this.masterDimension = dimension;
|
this.masterDimension = master.dimension();
|
||||||
this.masterPos = newPos;
|
this.masterPos = master.pos();
|
||||||
|
this.masterSide = master.side();
|
||||||
this.needsUnboundPatternCleanup = false;
|
this.needsUnboundPatternCleanup = false;
|
||||||
if (changed) {
|
if (changed) {
|
||||||
this.invalidatePatternSyncState();
|
this.invalidatePatternSyncState();
|
||||||
|
|
@ -343,7 +374,7 @@ public class MirrorPatternProviderBlockEntity extends PatternProviderBlockEntity
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
private PatternProviderBlockEntity findAdjacentMaster() {
|
private ResolvedMaster findAdjacentMaster() {
|
||||||
var level = this.getLevel();
|
var level = this.getLevel();
|
||||||
if (level == null) {
|
if (level == null) {
|
||||||
return null;
|
return null;
|
||||||
|
|
@ -351,24 +382,23 @@ public class MirrorPatternProviderBlockEntity extends PatternProviderBlockEntity
|
||||||
|
|
||||||
for (var direction : Direction.values()) {
|
for (var direction : Direction.values()) {
|
||||||
var adjacent = level.getBlockEntity(this.getBlockPos().relative(direction));
|
var adjacent = level.getBlockEntity(this.getBlockPos().relative(direction));
|
||||||
if (isValidMaster(adjacent)) {
|
var master = resolveMaster(adjacent, null);
|
||||||
return (PatternProviderBlockEntity) adjacent;
|
if (master == null) {
|
||||||
|
master = resolveMaster(adjacent, direction.getOpposite());
|
||||||
|
}
|
||||||
|
if (master != null) {
|
||||||
|
return master;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean syncFromMaster(PatternProviderBlockEntity master) {
|
private boolean syncFromMaster(ResolvedMaster master) {
|
||||||
var masterLevel = master.getLevel();
|
var bindingChanged = this.setBoundMaster(master.location());
|
||||||
if (masterLevel == null) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
var bindingChanged = this.setBoundMaster(masterLevel.dimension(), master.getBlockPos());
|
|
||||||
var changed = bindingChanged;
|
var changed = bindingChanged;
|
||||||
changed |= this.syncMirroredSettings(master);
|
changed |= this.syncMirroredSettings(master.host());
|
||||||
changed |= this.syncMirroredPatterns(master, bindingChanged);
|
changed |= this.syncMirroredPatterns(master.host(), bindingChanged);
|
||||||
|
|
||||||
if (changed) {
|
if (changed) {
|
||||||
this.flushStateChanges();
|
this.flushStateChanges();
|
||||||
|
|
@ -377,18 +407,21 @@ public class MirrorPatternProviderBlockEntity extends PatternProviderBlockEntity
|
||||||
return changed;
|
return changed;
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean syncMirroredSettings(PatternProviderBlockEntity master) {
|
private boolean syncMirroredSettings(PatternProviderLogicHost master) {
|
||||||
if (!this.hasDifferentMirroredSettings(master)) {
|
if (!this.hasDifferentMirroredSettings(master)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
var builder = DataComponentMap.builder();
|
var builder = DataComponentMap.builder();
|
||||||
if (master.getCustomName() != null) {
|
var customName = getCustomName(master);
|
||||||
builder.set(AEComponents.EXPORTED_CUSTOM_NAME, master.getCustomName());
|
if (customName != null) {
|
||||||
|
builder.set(AEComponents.EXPORTED_CUSTOM_NAME, customName);
|
||||||
}
|
}
|
||||||
builder.set(AEComponents.EXPORTED_SETTINGS, master.getConfigManager().exportSettings());
|
builder.set(AEComponents.EXPORTED_SETTINGS, master.getConfigManager().exportSettings());
|
||||||
builder.set(AEComponents.EXPORTED_PRIORITY, master.getPriority());
|
builder.set(AEComponents.EXPORTED_PRIORITY, master.getPriority());
|
||||||
builder.set(AEComponents.EXPORTED_PUSH_DIRECTION, master.getBlockState().getValue(PatternProviderBlock.PUSH_DIRECTION));
|
if (supportsPushDirectionState(master)) {
|
||||||
|
builder.set(AEComponents.EXPORTED_PUSH_DIRECTION, getPushDirection(master));
|
||||||
|
}
|
||||||
this.importSettings(SettingsFrom.MEMORY_CARD, builder.build(), null);
|
this.importSettings(SettingsFrom.MEMORY_CARD, builder.build(), null);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
@ -399,11 +432,11 @@ public class MirrorPatternProviderBlockEntity extends PatternProviderBlockEntity
|
||||||
return this.syncMirroredSettings(defaultMirror);
|
return this.syncMirroredSettings(defaultMirror);
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean hasDifferentMirroredSettings(PatternProviderBlockEntity master) {
|
private boolean hasDifferentMirroredSettings(PatternProviderLogicHost master) {
|
||||||
var mirrorLogic = this.getLogic();
|
var mirrorLogic = this.getLogic();
|
||||||
var masterLogic = master.getLogic();
|
var masterLogic = master.getLogic();
|
||||||
|
|
||||||
return !Objects.equals(this.getCustomName(), master.getCustomName())
|
return !Objects.equals(this.getCustomName(), getCustomName(master))
|
||||||
|| mirrorLogic.getPriority() != masterLogic.getPriority()
|
|| mirrorLogic.getPriority() != masterLogic.getPriority()
|
||||||
|| mirrorLogic.getConfigManager().getSetting(Settings.BLOCKING_MODE)
|
|| mirrorLogic.getConfigManager().getSetting(Settings.BLOCKING_MODE)
|
||||||
!= masterLogic.getConfigManager().getSetting(Settings.BLOCKING_MODE)
|
!= masterLogic.getConfigManager().getSetting(Settings.BLOCKING_MODE)
|
||||||
|
|
@ -411,11 +444,11 @@ public class MirrorPatternProviderBlockEntity extends PatternProviderBlockEntity
|
||||||
!= masterLogic.getConfigManager().getSetting(Settings.PATTERN_ACCESS_TERMINAL)
|
!= masterLogic.getConfigManager().getSetting(Settings.PATTERN_ACCESS_TERMINAL)
|
||||||
|| mirrorLogic.getConfigManager().getSetting(Settings.LOCK_CRAFTING_MODE)
|
|| mirrorLogic.getConfigManager().getSetting(Settings.LOCK_CRAFTING_MODE)
|
||||||
!= masterLogic.getConfigManager().getSetting(Settings.LOCK_CRAFTING_MODE)
|
!= masterLogic.getConfigManager().getSetting(Settings.LOCK_CRAFTING_MODE)
|
||||||
|| this.getBlockState().getValue(PatternProviderBlock.PUSH_DIRECTION)
|
|| supportsPushDirectionState(master)
|
||||||
!= master.getBlockState().getValue(PatternProviderBlock.PUSH_DIRECTION);
|
&& this.getBlockState().getValue(PatternProviderBlock.PUSH_DIRECTION) != getPushDirection(master);
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean syncMirroredPatterns(PatternProviderBlockEntity master, boolean forceSync) {
|
private boolean syncMirroredPatterns(PatternProviderLogicHost master, boolean forceSync) {
|
||||||
var masterPatternVersion = getPatternSyncVersion(master);
|
var masterPatternVersion = getPatternSyncVersion(master);
|
||||||
if (!forceSync && masterPatternVersion != UNKNOWN_PATTERN_SYNC_VERSION
|
if (!forceSync && masterPatternVersion != UNKNOWN_PATTERN_SYNC_VERSION
|
||||||
&& masterPatternVersion == this.lastSyncedPatternVersion) {
|
&& masterPatternVersion == this.lastSyncedPatternVersion) {
|
||||||
|
|
@ -508,7 +541,7 @@ public class MirrorPatternProviderBlockEntity extends PatternProviderBlockEntity
|
||||||
return ItemStack.isSameItemSameComponents(left, right) && left.getCount() == right.getCount();
|
return ItemStack.isSameItemSameComponents(left, right) && left.getCount() == right.getCount();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static long getPatternSyncVersion(PatternProviderBlockEntity master) {
|
private static long getPatternSyncVersion(PatternProviderLogicHost master) {
|
||||||
if (master.getLogic() instanceof PatternProviderLogicSyncBridge bridge) {
|
if (master.getLogic() instanceof PatternProviderLogicSyncBridge bridge) {
|
||||||
return bridge.eap$getPatternSyncVersion();
|
return bridge.eap$getPatternSyncVersion();
|
||||||
}
|
}
|
||||||
|
|
@ -516,10 +549,116 @@ public class MirrorPatternProviderBlockEntity extends PatternProviderBlockEntity
|
||||||
return UNKNOWN_PATTERN_SYNC_VERSION;
|
return UNKNOWN_PATTERN_SYNC_VERSION;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean isValidMaster(@Nullable BlockEntity blockEntity) {
|
@Nullable
|
||||||
return blockEntity instanceof PatternProviderBlockEntity
|
private MasterLocation getBoundMasterLocation() {
|
||||||
&& !(blockEntity instanceof MirrorPatternProviderBlockEntity)
|
if (this.masterDimension == null || this.masterPos == null) {
|
||||||
&& !blockEntity.isRemoved();
|
return null;
|
||||||
|
}
|
||||||
|
return new MasterLocation(this.masterDimension, this.masterPos, this.masterSide);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
private ResolvedMaster resolveBoundMaster(ServerLevel serverLevel) {
|
||||||
|
var target = this.getBoundMasterLocation();
|
||||||
|
return target != null ? this.resolveMaster(serverLevel, target) : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
private ResolvedMaster resolveMaster(ServerLevel serverLevel, MasterLocation target) {
|
||||||
|
var masterLevel = target.dimension() == serverLevel.dimension()
|
||||||
|
? serverLevel
|
||||||
|
: serverLevel.getServer().getLevel(target.dimension());
|
||||||
|
if (masterLevel == null || !masterLevel.hasChunkAt(target.pos())) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return resolveMaster(masterLevel.getBlockEntity(target.pos()), target.side());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
private static ResolvedMaster resolveMaster(@Nullable BlockEntity blockEntity, @Nullable Direction partSide) {
|
||||||
|
if (blockEntity == null || blockEntity.isRemoved()) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (partSide == null && blockEntity instanceof PatternProviderLogicHost host && isValidMasterHost(host)) {
|
||||||
|
var level = blockEntity.getLevel();
|
||||||
|
if (level == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return new ResolvedMaster(
|
||||||
|
new MasterLocation(level.dimension(), blockEntity.getBlockPos(), null),
|
||||||
|
host);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (partSide != null && blockEntity instanceof CableBusBlockEntity cableBus) {
|
||||||
|
return resolvePartMaster(cableBus, partSide);
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
private static ResolvedMaster resolvePartMaster(CableBusBlockEntity cableBus, Direction side) {
|
||||||
|
var part = cableBus.getCableBus().getPart(side);
|
||||||
|
if (part instanceof AEBasePart basePart && isValidMasterHost(basePart)) {
|
||||||
|
var level = cableBus.getLevel();
|
||||||
|
if (level == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return new ResolvedMaster(
|
||||||
|
new MasterLocation(level.dimension(), cableBus.getBlockPos(), side),
|
||||||
|
(PatternProviderLogicHost) basePart);
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
private static Component getCustomName(PatternProviderLogicHost host) {
|
||||||
|
if (host instanceof PatternProviderBlockEntity blockEntity) {
|
||||||
|
return blockEntity.getCustomName();
|
||||||
|
}
|
||||||
|
if (host instanceof AEBasePart part) {
|
||||||
|
return part.getCustomName();
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static PushDirection getPushDirection(PatternProviderLogicHost host) {
|
||||||
|
Direction target = null;
|
||||||
|
var targets = host.getTargets();
|
||||||
|
if (targets.size() == 1) {
|
||||||
|
target = targets.iterator().next();
|
||||||
|
}
|
||||||
|
return PushDirection.fromDirection(target);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static boolean supportsPushDirectionState(PatternProviderLogicHost host) {
|
||||||
|
return host instanceof PatternProviderBlockEntity;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Component appendMasterSide(MutableComponent component) {
|
||||||
|
if (this.masterSide != null) {
|
||||||
|
component.append(Component.literal(" [" + this.masterSide.getSerializedName() + "]"));
|
||||||
|
}
|
||||||
|
return component;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static boolean isValidMasterHost(Object host) {
|
||||||
|
if (!(host instanceof PatternProviderLogicHost)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (host instanceof MirrorPatternProviderBlockEntity) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (host instanceof BlockEntity blockEntity) {
|
||||||
|
return !blockEntity.isRemoved();
|
||||||
|
}
|
||||||
|
|
||||||
|
return host instanceof AEBasePart part && part.getBlockEntity() != null && !part.getBlockEntity().isRemoved();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final class MirrorLogic extends PatternProviderLogic {
|
private static final class MirrorLogic extends PatternProviderLogic {
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,41 @@
|
||||||
|
package com.extendedae_plus.content.decor;
|
||||||
|
|
||||||
|
import net.minecraft.core.Direction;
|
||||||
|
import net.minecraft.world.item.context.BlockPlaceContext;
|
||||||
|
import net.minecraft.world.level.block.Block;
|
||||||
|
import net.minecraft.world.level.block.Mirror;
|
||||||
|
import net.minecraft.world.level.block.Rotation;
|
||||||
|
import net.minecraft.world.level.block.state.BlockBehaviour;
|
||||||
|
import net.minecraft.world.level.block.state.BlockState;
|
||||||
|
import net.minecraft.world.level.block.state.StateDefinition;
|
||||||
|
import net.minecraft.world.level.block.state.properties.BlockStateProperties;
|
||||||
|
import net.minecraft.world.level.block.state.properties.DirectionProperty;
|
||||||
|
|
||||||
|
public class DollBlock extends Block {
|
||||||
|
public static final DirectionProperty FACING = BlockStateProperties.HORIZONTAL_FACING;
|
||||||
|
|
||||||
|
public DollBlock(BlockBehaviour.Properties properties) {
|
||||||
|
super(properties);
|
||||||
|
this.registerDefaultState(this.stateDefinition.any().setValue(FACING, Direction.NORTH));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void createBlockStateDefinition(StateDefinition.Builder<Block, BlockState> builder) {
|
||||||
|
builder.add(FACING);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BlockState getStateForPlacement(BlockPlaceContext context) {
|
||||||
|
return this.defaultBlockState().setValue(FACING, context.getHorizontalDirection().getOpposite());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected BlockState rotate(BlockState state, Rotation rotation) {
|
||||||
|
return state.setValue(FACING, rotation.rotate(state.getValue(FACING)));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected BlockState mirror(BlockState state, Mirror mirror) {
|
||||||
|
return state.rotate(mirror.getRotation(state.getValue(FACING)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -7,6 +7,7 @@ import com.extendedae_plus.content.matrix.CrafterCorePlusBlock;
|
||||||
import com.extendedae_plus.content.matrix.PatternCorePlusBlock;
|
import com.extendedae_plus.content.matrix.PatternCorePlusBlock;
|
||||||
import com.extendedae_plus.content.matrix.SpeedCorePlusBlock;
|
import com.extendedae_plus.content.matrix.SpeedCorePlusBlock;
|
||||||
import com.extendedae_plus.content.matrix.UploadCoreBlock;
|
import com.extendedae_plus.content.matrix.UploadCoreBlock;
|
||||||
|
import com.extendedae_plus.content.decor.DollBlock;
|
||||||
import com.extendedae_plus.content.wireless.LabeledWirelessTransceiverBlock;
|
import com.extendedae_plus.content.wireless.LabeledWirelessTransceiverBlock;
|
||||||
import com.extendedae_plus.content.wireless.WirelessTransceiverBlock;
|
import com.extendedae_plus.content.wireless.WirelessTransceiverBlock;
|
||||||
import com.extendedae_plus.content.crafting.EPlusCraftingUnitType;
|
import com.extendedae_plus.content.crafting.EPlusCraftingUnitType;
|
||||||
|
|
@ -14,6 +15,7 @@ import appeng.block.crafting.CraftingUnitBlock;
|
||||||
import appeng.blockentity.crafting.CraftingBlockEntity;
|
import appeng.blockentity.crafting.CraftingBlockEntity;
|
||||||
import appeng.core.definitions.AEBlockEntities;
|
import appeng.core.definitions.AEBlockEntities;
|
||||||
import net.minecraft.world.level.block.Block;
|
import net.minecraft.world.level.block.Block;
|
||||||
|
import net.minecraft.world.level.block.Blocks;
|
||||||
import net.minecraft.world.level.block.state.BlockBehaviour;
|
import net.minecraft.world.level.block.state.BlockBehaviour;
|
||||||
import net.minecraft.world.level.material.MapColor;
|
import net.minecraft.world.level.material.MapColor;
|
||||||
import net.neoforged.neoforge.registries.DeferredBlock;
|
import net.neoforged.neoforge.registries.DeferredBlock;
|
||||||
|
|
@ -131,4 +133,16 @@ public final class ModBlocks {
|
||||||
"mirror_pattern_provider",
|
"mirror_pattern_provider",
|
||||||
MirrorPatternProviderBlock::new
|
MirrorPatternProviderBlock::new
|
||||||
);
|
);
|
||||||
|
|
||||||
|
public static final DeferredBlock<Block> C_H716 = registerDollBlock("c-h716");
|
||||||
|
public static final DeferredBlock<Block> FISH_DAN = registerDollBlock("fish_dan_");
|
||||||
|
public static final DeferredBlock<Block> _FENG = registerDollBlock("_feng");
|
||||||
|
public static final DeferredBlock<Block> XBAI = registerDollBlock("xbai");
|
||||||
|
|
||||||
|
private static DeferredBlock<Block> registerDollBlock(String name) {
|
||||||
|
return BLOCKS.register(
|
||||||
|
name,
|
||||||
|
() -> new DollBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.WHITE_WOOL).noOcclusion())
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -36,6 +36,10 @@ public final class ModCreativeTabs {
|
||||||
ModItems.ASSEMBLER_MATRIX_CRAFTER_PLUS.get().getDefaultInstance(),
|
ModItems.ASSEMBLER_MATRIX_CRAFTER_PLUS.get().getDefaultInstance(),
|
||||||
ModItems.ASSEMBLER_MATRIX_PATTERN_PLUS.get().getDefaultInstance(),
|
ModItems.ASSEMBLER_MATRIX_PATTERN_PLUS.get().getDefaultInstance(),
|
||||||
ModItems.MIRROR_PATTERN_PROVIDER.get().getDefaultInstance(),
|
ModItems.MIRROR_PATTERN_PROVIDER.get().getDefaultInstance(),
|
||||||
|
ModItems.C_H716.get().getDefaultInstance(),
|
||||||
|
ModItems.FISH_DAN.get().getDefaultInstance(),
|
||||||
|
ModItems._FENG.get().getDefaultInstance(),
|
||||||
|
ModItems.XBAI.get().getDefaultInstance(),
|
||||||
ModItems.MIRROR_PATTERN_BINDING_TOOL.get().getDefaultInstance()
|
ModItems.MIRROR_PATTERN_BINDING_TOOL.get().getDefaultInstance()
|
||||||
).forEach(output::accept);
|
).forEach(output::accept);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -85,6 +85,22 @@ public final class ModItems {
|
||||||
"mirror_pattern_provider",
|
"mirror_pattern_provider",
|
||||||
() -> new BlockItem(ModBlocks.MIRROR_PATTERN_PROVIDER_BLOCK.get(), new Item.Properties())
|
() -> new BlockItem(ModBlocks.MIRROR_PATTERN_PROVIDER_BLOCK.get(), new Item.Properties())
|
||||||
);
|
);
|
||||||
|
public static final DeferredItem<Item> C_H716 = ITEMS.register(
|
||||||
|
"c-h716",
|
||||||
|
() -> new BlockItem(ModBlocks.C_H716.get(), new Item.Properties())
|
||||||
|
);
|
||||||
|
public static final DeferredItem<Item> FISH_DAN = ITEMS.register(
|
||||||
|
"fish_dan_",
|
||||||
|
() -> new BlockItem(ModBlocks.FISH_DAN.get(), new Item.Properties())
|
||||||
|
);
|
||||||
|
public static final DeferredItem<Item> _FENG = ITEMS.register(
|
||||||
|
"_feng",
|
||||||
|
() -> new BlockItem(ModBlocks._FENG.get(), new Item.Properties())
|
||||||
|
);
|
||||||
|
public static final DeferredItem<Item> XBAI = ITEMS.register(
|
||||||
|
"xbai",
|
||||||
|
() -> new BlockItem(ModBlocks.XBAI.get(), new Item.Properties())
|
||||||
|
);
|
||||||
public static final DeferredItem<MirrorPatternBindingToolItem> MIRROR_PATTERN_BINDING_TOOL = ITEMS.register(
|
public static final DeferredItem<MirrorPatternBindingToolItem> MIRROR_PATTERN_BINDING_TOOL = ITEMS.register(
|
||||||
"mirror_pattern_binding_tool",
|
"mirror_pattern_binding_tool",
|
||||||
() -> new MirrorPatternBindingToolItem(new Item.Properties())
|
() -> new MirrorPatternBindingToolItem(new Item.Properties())
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,18 @@
|
||||||
package com.extendedae_plus.items.tools;
|
package com.extendedae_plus.items.tools;
|
||||||
|
|
||||||
import appeng.blockentity.crafting.PatternProviderBlockEntity;
|
import appeng.blockentity.networking.CableBusBlockEntity;
|
||||||
|
import appeng.helpers.patternprovider.PatternProviderLogicHost;
|
||||||
|
import appeng.parts.AEBasePart;
|
||||||
import com.extendedae_plus.content.ae2.MirrorPatternProviderBlockEntity;
|
import com.extendedae_plus.content.ae2.MirrorPatternProviderBlockEntity;
|
||||||
|
import com.extendedae_plus.content.ae2.MirrorPatternProviderBlockEntity.MasterLocation;
|
||||||
import net.minecraft.core.BlockPos;
|
import net.minecraft.core.BlockPos;
|
||||||
|
import net.minecraft.core.Direction;
|
||||||
import net.minecraft.core.GlobalPos;
|
import net.minecraft.core.GlobalPos;
|
||||||
import net.minecraft.core.component.DataComponents;
|
import net.minecraft.core.component.DataComponents;
|
||||||
import net.minecraft.nbt.CompoundTag;
|
import net.minecraft.nbt.CompoundTag;
|
||||||
import net.minecraft.nbt.Tag;
|
import net.minecraft.nbt.Tag;
|
||||||
import net.minecraft.network.chat.Component;
|
import net.minecraft.network.chat.Component;
|
||||||
|
import net.minecraft.network.chat.MutableComponent;
|
||||||
import net.minecraft.world.InteractionHand;
|
import net.minecraft.world.InteractionHand;
|
||||||
import net.minecraft.world.InteractionResult;
|
import net.minecraft.world.InteractionResult;
|
||||||
import net.minecraft.world.InteractionResultHolder;
|
import net.minecraft.world.InteractionResultHolder;
|
||||||
|
|
@ -18,6 +23,7 @@ import net.minecraft.world.item.TooltipFlag;
|
||||||
import net.minecraft.world.item.component.CustomData;
|
import net.minecraft.world.item.component.CustomData;
|
||||||
import net.minecraft.world.item.context.UseOnContext;
|
import net.minecraft.world.item.context.UseOnContext;
|
||||||
import net.minecraft.world.level.Level;
|
import net.minecraft.world.level.Level;
|
||||||
|
import net.minecraft.world.phys.Vec3;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
@ -27,6 +33,7 @@ public class MirrorPatternBindingToolItem extends Item {
|
||||||
private static final String TAG_SELECTED_RANGE_START = "selectedRangeStart";
|
private static final String TAG_SELECTED_RANGE_START = "selectedRangeStart";
|
||||||
private static final String TAG_DIMENSION = "dimension";
|
private static final String TAG_DIMENSION = "dimension";
|
||||||
private static final String TAG_POS = "pos";
|
private static final String TAG_POS = "pos";
|
||||||
|
private static final String TAG_SIDE = "side";
|
||||||
|
|
||||||
public MirrorPatternBindingToolItem(Properties properties) {
|
public MirrorPatternBindingToolItem(Properties properties) {
|
||||||
super(properties.stacksTo(1));
|
super(properties.stacksTo(1));
|
||||||
|
|
@ -47,18 +54,13 @@ public class MirrorPatternBindingToolItem extends Item {
|
||||||
var player = context.getPlayer();
|
var player = context.getPlayer();
|
||||||
var blockEntity = level.getBlockEntity(context.getClickedPos());
|
var blockEntity = level.getBlockEntity(context.getClickedPos());
|
||||||
|
|
||||||
if (blockEntity instanceof PatternProviderBlockEntity && !(blockEntity instanceof MirrorPatternProviderBlockEntity)) {
|
var clickedMaster = getClickedMaster(level, context);
|
||||||
|
if (clickedMaster != null) {
|
||||||
if (player != null && player.isShiftKeyDown()) {
|
if (player != null && player.isShiftKeyDown()) {
|
||||||
if (!level.isClientSide) {
|
if (!level.isClientSide) {
|
||||||
setSelectedMaster(stack, GlobalPos.of(level.dimension(), context.getClickedPos()));
|
setSelectedMaster(stack, clickedMaster);
|
||||||
clearSelectedRangeStart(stack);
|
clearSelectedRangeStart(stack);
|
||||||
player.displayClientMessage(
|
player.displayClientMessage(createSelectedMessage(clickedMaster), true);
|
||||||
Component.translatable(
|
|
||||||
"extendedae_plus.message.mirror_binding_tool.selected",
|
|
||||||
context.getClickedPos().getX(),
|
|
||||||
context.getClickedPos().getY(),
|
|
||||||
context.getClickedPos().getZ()),
|
|
||||||
true);
|
|
||||||
}
|
}
|
||||||
return InteractionResult.sidedSuccess(level.isClientSide);
|
return InteractionResult.sidedSuccess(level.isClientSide);
|
||||||
}
|
}
|
||||||
|
|
@ -130,6 +132,9 @@ public class MirrorPatternBindingToolItem extends Item {
|
||||||
tooltipComponents.add(Component.translatable(
|
tooltipComponents.add(Component.translatable(
|
||||||
"item.extendedae_plus.mirror_pattern_binding_tool.dimension",
|
"item.extendedae_plus.mirror_pattern_binding_tool.dimension",
|
||||||
selectedMaster.dimension().location().toString()));
|
selectedMaster.dimension().location().toString()));
|
||||||
|
if (selectedMaster.side() != null) {
|
||||||
|
tooltipComponents.add(Component.literal("方向: " + selectedMaster.side().getSerializedName()));
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
tooltipComponents.add(Component.translatable("item.extendedae_plus.mirror_pattern_binding_tool.unset"));
|
tooltipComponents.add(Component.translatable("item.extendedae_plus.mirror_pattern_binding_tool.unset"));
|
||||||
}
|
}
|
||||||
|
|
@ -145,9 +150,9 @@ public class MirrorPatternBindingToolItem extends Item {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void setSelectedMaster(ItemStack stack, GlobalPos master) {
|
private static void setSelectedMaster(ItemStack stack, MasterLocation master) {
|
||||||
var tag = stack.getOrDefault(DataComponents.CUSTOM_DATA, CustomData.EMPTY).copyTag();
|
var tag = stack.getOrDefault(DataComponents.CUSTOM_DATA, CustomData.EMPTY).copyTag();
|
||||||
tag.put(TAG_SELECTED_MASTER, createGlobalPosTag(master));
|
tag.put(TAG_SELECTED_MASTER, createMasterTag(master));
|
||||||
stack.set(DataComponents.CUSTOM_DATA, CustomData.of(tag));
|
stack.set(DataComponents.CUSTOM_DATA, CustomData.of(tag));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -170,8 +175,8 @@ public class MirrorPatternBindingToolItem extends Item {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
private static GlobalPos getSelectedMaster(ItemStack stack) {
|
private static MasterLocation getSelectedMaster(ItemStack stack) {
|
||||||
return getStoredGlobalPos(stack, TAG_SELECTED_MASTER);
|
return getStoredMasterLocation(stack, TAG_SELECTED_MASTER);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
|
|
@ -179,6 +184,14 @@ public class MirrorPatternBindingToolItem extends Item {
|
||||||
return getStoredGlobalPos(stack, TAG_SELECTED_RANGE_START);
|
return getStoredGlobalPos(stack, TAG_SELECTED_RANGE_START);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static CompoundTag createMasterTag(MasterLocation master) {
|
||||||
|
var selectedTag = createGlobalPosTag(master.asGlobalPos());
|
||||||
|
if (master.side() != null) {
|
||||||
|
selectedTag.putString(TAG_SIDE, master.side().getSerializedName());
|
||||||
|
}
|
||||||
|
return selectedTag;
|
||||||
|
}
|
||||||
|
|
||||||
private static CompoundTag createGlobalPosTag(GlobalPos globalPos) {
|
private static CompoundTag createGlobalPosTag(GlobalPos globalPos) {
|
||||||
var selectedTag = new CompoundTag();
|
var selectedTag = new CompoundTag();
|
||||||
selectedTag.putString(TAG_DIMENSION, globalPos.dimension().location().toString());
|
selectedTag.putString(TAG_DIMENSION, globalPos.dimension().location().toString());
|
||||||
|
|
@ -186,6 +199,23 @@ public class MirrorPatternBindingToolItem extends Item {
|
||||||
return selectedTag;
|
return selectedTag;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
private static MasterLocation getStoredMasterLocation(ItemStack stack, String tagKey) {
|
||||||
|
var globalPos = getStoredGlobalPos(stack, tagKey);
|
||||||
|
if (globalPos == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
var tag = stack.getOrDefault(DataComponents.CUSTOM_DATA, CustomData.EMPTY).copyTag();
|
||||||
|
var selectedTag = tag.getCompound(tagKey);
|
||||||
|
Direction side = null;
|
||||||
|
if (selectedTag.contains(TAG_SIDE, Tag.TAG_STRING)) {
|
||||||
|
side = Direction.byName(selectedTag.getString(TAG_SIDE));
|
||||||
|
}
|
||||||
|
|
||||||
|
return new MasterLocation(globalPos.dimension(), globalPos.pos(), side);
|
||||||
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
private static GlobalPos getStoredGlobalPos(ItemStack stack, String tagKey) {
|
private static GlobalPos getStoredGlobalPos(ItemStack stack, String tagKey) {
|
||||||
var tag = stack.getOrDefault(DataComponents.CUSTOM_DATA, CustomData.EMPTY).copyTag();
|
var tag = stack.getOrDefault(DataComponents.CUSTOM_DATA, CustomData.EMPTY).copyTag();
|
||||||
|
|
@ -253,7 +283,7 @@ public class MirrorPatternBindingToolItem extends Item {
|
||||||
true);
|
true);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static RangeBindResult bindMirrorsInRange(Level level, BlockPos start, BlockPos end, GlobalPos selectedMaster) {
|
private static RangeBindResult bindMirrorsInRange(Level level, BlockPos start, BlockPos end, MasterLocation selectedMaster) {
|
||||||
int totalMirrors = 0;
|
int totalMirrors = 0;
|
||||||
int boundMirrors = 0;
|
int boundMirrors = 0;
|
||||||
|
|
||||||
|
|
@ -277,6 +307,48 @@ public class MirrorPatternBindingToolItem extends Item {
|
||||||
return new RangeBindResult(totalMirrors, boundMirrors, totalMirrors - boundMirrors);
|
return new RangeBindResult(totalMirrors, boundMirrors, totalMirrors - boundMirrors);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
private static MasterLocation getClickedMaster(Level level, UseOnContext context) {
|
||||||
|
var pos = context.getClickedPos();
|
||||||
|
var blockEntity = level.getBlockEntity(pos);
|
||||||
|
if (blockEntity == null || blockEntity instanceof MirrorPatternProviderBlockEntity) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (blockEntity instanceof PatternProviderLogicHost) {
|
||||||
|
return new MasterLocation(level.dimension(), pos, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (blockEntity instanceof CableBusBlockEntity cableBus) {
|
||||||
|
Vec3 hitVec = context.getClickLocation();
|
||||||
|
Vec3 hitInBlock = new Vec3(hitVec.x - pos.getX(), hitVec.y - pos.getY(), hitVec.z - pos.getZ());
|
||||||
|
var selectedPart = cableBus.getCableBus().selectPartLocal(hitInBlock).part;
|
||||||
|
if (selectedPart instanceof AEBasePart basePart
|
||||||
|
&& selectedPart instanceof PatternProviderLogicHost) {
|
||||||
|
return new MasterLocation(level.dimension(), pos, basePart.getSide());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Component createSelectedMessage(MasterLocation master) {
|
||||||
|
return appendSide(
|
||||||
|
Component.translatable(
|
||||||
|
"extendedae_plus.message.mirror_binding_tool.selected",
|
||||||
|
master.pos().getX(),
|
||||||
|
master.pos().getY(),
|
||||||
|
master.pos().getZ()),
|
||||||
|
master.side());
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Component appendSide(MutableComponent message, @Nullable Direction side) {
|
||||||
|
if (side != null) {
|
||||||
|
message.append(Component.literal(" [" + side.getSerializedName() + "]"));
|
||||||
|
}
|
||||||
|
return message;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public InteractionResultHolder<ItemStack> use(Level level, Player player, InteractionHand usedHand) {
|
public InteractionResultHolder<ItemStack> use(Level level, Player player, InteractionHand usedHand) {
|
||||||
var stack = player.getItemInHand(usedHand);
|
var stack = player.getItemInHand(usedHand);
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,8 @@ item_ids:
|
||||||
|
|
||||||
- **超级装配矩阵样板核心**:;每个核心提供 72 个样板槽位。
|
- **超级装配矩阵样板核心**:;每个核心提供 72 个样板槽位。
|
||||||
- **超级装配矩阵合成核心**:每个核心可同时运行 32 个合成任务。
|
- **超级装配矩阵合成核心**:每个核心可同时运行 32 个合成任务。
|
||||||
- **超级装配矩阵速度核心**:提供相当于普通速度核心5倍的加速效果。
|
- **超级装配矩阵速度核心**:提供相当于普通速度核心5倍的加速效果。(一个的效果顶原版五个,放一个就到上限了,多放无用。)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
超级速度核心Guide新增准确描述
|
||||||
|
|
@ -26,7 +26,7 @@ The **Entity Accelerator** consumes energy from the AE2 network to accelerate bl
|
||||||
- If the *Applied Flux* mod is installed, FE energy stored in network disks can be consumed to continue acceleration when AE energy is insufficient (priority configurable).
|
- If the *Applied Flux* mod is installed, FE energy stored in network disks can be consumed to continue acceleration when AE energy is insufficient (priority configurable).
|
||||||
4. **Configuration Options:** Base energy consumption, entity blacklist, and per-entity energy multiplier can be adjusted via the config file.
|
4. **Configuration Options:** Base energy consumption, entity blacklist, and per-entity energy multiplier can be adjusted via the config file.
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
## Energy Consumption Mechanism
|
## Energy Consumption Mechanism
|
||||||
|
|
||||||
|
|
@ -95,4 +95,4 @@ Let \( N \) = number of installed energy cards
|
||||||
- Energy Ratio: 82.85%
|
- Energy Ratio: 82.85%
|
||||||
- **Final Energy Consumption:** 65,536 × 0.8285 ≈ 54,267 AE
|
- **Final Energy Consumption:** 65,536 × 0.8285 ≈ 54,267 AE
|
||||||
|
|
||||||
> Actual energy consumption may vary depending on entity-specific configuration.
|
> Actual energy consumption may vary depending on entity-specific configuration.
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@ The **Pattern Provider Status Controller** is a central control unit that allows
|
||||||
|
|
||||||
## User Interface & Operations
|
## User Interface & Operations
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
The controller UI provides the following control options:
|
The controller UI provides the following control options:
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -25,6 +25,6 @@ Their roles are analogous to the original ExtendedAE Assembler Matrix cores, but
|
||||||
|
|
||||||
- **Assembler Matrix Pattern Core+**: each core provides **72 pattern slots**.
|
- **Assembler Matrix Pattern Core+**: each core provides **72 pattern slots**.
|
||||||
- **Assembler Matrix Craft Core+**: each core can run **32 crafting jobs in parallel**.
|
- **Assembler Matrix Craft Core+**: each core can run **32 crafting jobs in parallel**.
|
||||||
- **Assembler Matrix Speed Core+**: provides **5× the effect of a regular speed core** for the matrix.
|
- **Assembler Matrix Speed Core+**: provides **5× the effect of a regular speed core** for the matrix.(It’s just that its strength is five times, so placing just one is enough.)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 8.3 KiB |
|
|
@ -0,0 +1,8 @@
|
||||||
|
{
|
||||||
|
"variants": {
|
||||||
|
"facing=north": { "model": "extendedae_plus:block/_feng" },
|
||||||
|
"facing=east": { "model": "extendedae_plus:block/_feng", "y": 90 },
|
||||||
|
"facing=south": { "model": "extendedae_plus:block/_feng", "y": 180 },
|
||||||
|
"facing=west": { "model": "extendedae_plus:block/_feng", "y": 270 }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
{
|
||||||
|
"variants": {
|
||||||
|
"facing=north": { "model": "extendedae_plus:block/c-h716" },
|
||||||
|
"facing=east": { "model": "extendedae_plus:block/c-h716", "y": 90 },
|
||||||
|
"facing=south": { "model": "extendedae_plus:block/c-h716", "y": 180 },
|
||||||
|
"facing=west": { "model": "extendedae_plus:block/c-h716", "y": 270 }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
{
|
||||||
|
"variants": {
|
||||||
|
"facing=north": { "model": "extendedae_plus:block/fish_dan_" },
|
||||||
|
"facing=east": { "model": "extendedae_plus:block/fish_dan_", "y": 90 },
|
||||||
|
"facing=south": { "model": "extendedae_plus:block/fish_dan_", "y": 180 },
|
||||||
|
"facing=west": { "model": "extendedae_plus:block/fish_dan_", "y": 270 }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
{
|
||||||
|
"variants": {
|
||||||
|
"facing=north": { "model": "extendedae_plus:block/xbai" },
|
||||||
|
"facing=east": { "model": "extendedae_plus:block/xbai", "y": 90 },
|
||||||
|
"facing=south": { "model": "extendedae_plus:block/xbai", "y": 180 },
|
||||||
|
"facing=west": { "model": "extendedae_plus:block/xbai", "y": 270 }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -22,6 +22,10 @@
|
||||||
"item.extendedae_plus.channel_card": "Channel Card",
|
"item.extendedae_plus.channel_card": "Channel Card",
|
||||||
"item.extendedae_plus.mirror_pattern_binding_tool": "Mirror Pattern Binder",
|
"item.extendedae_plus.mirror_pattern_binding_tool": "Mirror Pattern Binder",
|
||||||
"item.extendedae_plus.virtual_crafting_card": "Virtual Crafting Card",
|
"item.extendedae_plus.virtual_crafting_card": "Virtual Crafting Card",
|
||||||
|
"item.extendedae_plus.c-h716": "C-H716 Doll",
|
||||||
|
"item.extendedae_plus.fish_dan_": "Fish Dan Doll",
|
||||||
|
"item.extendedae_plus._feng": "_feng Doll",
|
||||||
|
"item.extendedae_plus.xbai": "Xbai Doll",
|
||||||
"item.extendedae_plus.channel_card.channel": "Channel: %d",
|
"item.extendedae_plus.channel_card.channel": "Channel: %d",
|
||||||
"item.extendedae_plus.channel_card.channel.unset": "Channel: Unset",
|
"item.extendedae_plus.channel_card.channel.unset": "Channel: Unset",
|
||||||
"item.extendedae_plus.channel_card.set": "Channel set to: %d",
|
"item.extendedae_plus.channel_card.set": "Channel set to: %d",
|
||||||
|
|
@ -61,6 +65,10 @@
|
||||||
"block.extendedae_plus.assembler_matrix_speed_plus": "Assembler Matrix Speed Core Plus",
|
"block.extendedae_plus.assembler_matrix_speed_plus": "Assembler Matrix Speed Core Plus",
|
||||||
"block.extendedae_plus.assembler_matrix_crafter_plus": "Assembler Matrix Crafter Core Plus",
|
"block.extendedae_plus.assembler_matrix_crafter_plus": "Assembler Matrix Crafter Core Plus",
|
||||||
"block.extendedae_plus.assembler_matrix_pattern_plus": "Assembler Matrix Pattern Core Plus",
|
"block.extendedae_plus.assembler_matrix_pattern_plus": "Assembler Matrix Pattern Core Plus",
|
||||||
|
"block.extendedae_plus.c-h716": "C-H716 Doll",
|
||||||
|
"block.extendedae_plus.fish_dan_": "Fish Dan Doll",
|
||||||
|
"block.extendedae_plus._feng": "_feng Doll",
|
||||||
|
"block.extendedae_plus.xbai": "Xbai Doll",
|
||||||
"gui.extendedae_plus.assembler_matrix.pattern": "Assembler Matrix Pattern Core Plus",
|
"gui.extendedae_plus.assembler_matrix.pattern": "Assembler Matrix Pattern Core Plus",
|
||||||
|
|
||||||
"extendedae_plus.upload_to_matrix": "Upload to Assembly Matrix",
|
"extendedae_plus.upload_to_matrix": "Upload to Assembly Matrix",
|
||||||
|
|
@ -71,6 +79,7 @@
|
||||||
"extendedae_plus.screen.reload_mapping": "Reload Mapping",
|
"extendedae_plus.screen.reload_mapping": "Reload Mapping",
|
||||||
"extendedae_plus.screen.add_mapping": "Add Mapping",
|
"extendedae_plus.screen.add_mapping": "Add Mapping",
|
||||||
"extendedae_plus.screen.remove_mapping": "Remove Mapping",
|
"extendedae_plus.screen.remove_mapping": "Remove Mapping",
|
||||||
|
"extendedae_plus.screen.auto_upload_unique_match": "Auto Upload on Unique Match: %s",
|
||||||
"extendedae_plus.screen.cn_name": "Chinese Name",
|
"extendedae_plus.screen.cn_name": "Chinese Name",
|
||||||
"extendedae_plus.button.choose_provider": "Upload Pattern",
|
"extendedae_plus.button.choose_provider": "Upload Pattern",
|
||||||
"key.extendedae_plus.create_pattern": "Create Pattern (Ctrl+Q)",
|
"key.extendedae_plus.create_pattern": "Create Pattern (Ctrl+Q)",
|
||||||
|
|
|
||||||
|
|
@ -22,6 +22,10 @@
|
||||||
"item.extendedae_plus.channel_card": "频道卡",
|
"item.extendedae_plus.channel_card": "频道卡",
|
||||||
"item.extendedae_plus.mirror_pattern_binding_tool": "镜像样板绑定器",
|
"item.extendedae_plus.mirror_pattern_binding_tool": "镜像样板绑定器",
|
||||||
"item.extendedae_plus.virtual_crafting_card": "虚拟合成卡",
|
"item.extendedae_plus.virtual_crafting_card": "虚拟合成卡",
|
||||||
|
"item.extendedae_plus.c-h716": "C-H716 玩偶",
|
||||||
|
"item.extendedae_plus.fish_dan_": "Fish_Dan_ 玩偶",
|
||||||
|
"item.extendedae_plus._feng": "_feng 玩偶",
|
||||||
|
"item.extendedae_plus.xbai": "Xbai 玩偶",
|
||||||
"item.extendedae_plus.channel_card.channel": "频道: %d",
|
"item.extendedae_plus.channel_card.channel": "频道: %d",
|
||||||
"item.extendedae_plus.channel_card.channel.unset": "频道: 未设置",
|
"item.extendedae_plus.channel_card.channel.unset": "频道: 未设置",
|
||||||
"item.extendedae_plus.channel_card.set": "频道已设置为: %d",
|
"item.extendedae_plus.channel_card.set": "频道已设置为: %d",
|
||||||
|
|
@ -61,6 +65,10 @@
|
||||||
"block.extendedae_plus.assembler_matrix_speed_plus": "超级装配矩阵速度核心",
|
"block.extendedae_plus.assembler_matrix_speed_plus": "超级装配矩阵速度核心",
|
||||||
"block.extendedae_plus.assembler_matrix_crafter_plus": "超级装配矩阵合成核心",
|
"block.extendedae_plus.assembler_matrix_crafter_plus": "超级装配矩阵合成核心",
|
||||||
"block.extendedae_plus.assembler_matrix_pattern_plus": "超级装配矩阵样板核心",
|
"block.extendedae_plus.assembler_matrix_pattern_plus": "超级装配矩阵样板核心",
|
||||||
|
"block.extendedae_plus.c-h716": "C-H716 玩偶",
|
||||||
|
"block.extendedae_plus.fish_dan_": "Fish_Dan_ 玩偶",
|
||||||
|
"block.extendedae_plus._feng": "_feng 玩偶",
|
||||||
|
"block.extendedae_plus.xbai": "Xbai 玩偶",
|
||||||
"gui.extendedae_plus.assembler_matrix.pattern": "超级装配矩阵样板核心",
|
"gui.extendedae_plus.assembler_matrix.pattern": "超级装配矩阵样板核心",
|
||||||
|
|
||||||
"extendedae_plus.upload_to_matrix": "上传到装配矩阵",
|
"extendedae_plus.upload_to_matrix": "上传到装配矩阵",
|
||||||
|
|
@ -71,6 +79,7 @@
|
||||||
"extendedae_plus.screen.reload_mapping": "重载映射",
|
"extendedae_plus.screen.reload_mapping": "重载映射",
|
||||||
"extendedae_plus.screen.add_mapping": "增加映射",
|
"extendedae_plus.screen.add_mapping": "增加映射",
|
||||||
"extendedae_plus.screen.remove_mapping": "删除映射",
|
"extendedae_plus.screen.remove_mapping": "删除映射",
|
||||||
|
"extendedae_plus.screen.auto_upload_unique_match": "唯一匹配时自动上传: %s",
|
||||||
"extendedae_plus.screen.cn_name": "中文名",
|
"extendedae_plus.screen.cn_name": "中文名",
|
||||||
"extendedae_plus.button.choose_provider":"上传样板",
|
"extendedae_plus.button.choose_provider":"上传样板",
|
||||||
"key.extendedae_plus.create_pattern": "快速创建样板 (Ctrl+Q)",
|
"key.extendedae_plus.create_pattern": "快速创建样板 (Ctrl+Q)",
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,208 @@
|
||||||
|
{
|
||||||
|
"format_version": "1.9.0",
|
||||||
|
"credit": "Made with Blockbench",
|
||||||
|
"render_type": "cutout",
|
||||||
|
"textures": {
|
||||||
|
"1": "extendedae_plus:block/_feng_fumo",
|
||||||
|
"particle": "extendedae_plus:block/_feng_fumo"
|
||||||
|
},
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"name": "Head",
|
||||||
|
"from": [4.35, 6, 7.35],
|
||||||
|
"to": [11.65, 13.3, 14.65],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [2, 2, 4, 4], "texture": "#1"},
|
||||||
|
"east": {"uv": [0, 2, 2, 4], "texture": "#1"},
|
||||||
|
"south": {"uv": [6, 2, 8, 4], "texture": "#1"},
|
||||||
|
"west": {"uv": [4, 2, 6, 4], "texture": "#1"},
|
||||||
|
"up": {"uv": [4, 2, 2, 0], "texture": "#1"},
|
||||||
|
"down": {"uv": [4, 0, 6, 2], "texture": "#1"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Hat Layer",
|
||||||
|
"from": [4.1, 6, 7],
|
||||||
|
"to": [11.8, 13.6, 14.7],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [10, 2, 12, 4], "texture": "#1"},
|
||||||
|
"east": {"uv": [8, 2, 10, 4], "texture": "#1"},
|
||||||
|
"south": {"uv": [14, 2, 16, 4], "texture": "#1"},
|
||||||
|
"west": {"uv": [12, 2, 14, 4], "texture": "#1"},
|
||||||
|
"up": {"uv": [12, 2, 10, 0], "texture": "#1"},
|
||||||
|
"down": {"uv": [12, 0, 14, 2], "texture": "#1"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Left Arm",
|
||||||
|
"from": [4, 0.35599, 10.01167],
|
||||||
|
"to": [5.5, 6.35599, 12.01167],
|
||||||
|
"rotation": {"angle": -22.5, "axis": "z", "origin": [4.7627, 3.35599, 11.01167]},
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [9, 13, 9.75, 16], "texture": "#1"},
|
||||||
|
"east": {"uv": [8, 13, 9, 16], "texture": "#1"},
|
||||||
|
"south": {"uv": [10.75, 13, 11.5, 16], "texture": "#1"},
|
||||||
|
"west": {"uv": [9.75, 13, 10.5, 16], "texture": "#1"},
|
||||||
|
"up": {"uv": [9, 12, 9.75, 13], "texture": "#1"},
|
||||||
|
"down": {"uv": [9.75, 12, 10.5, 13], "texture": "#1"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Left Arm Layer",
|
||||||
|
"from": [3.9254, 0.25599, 9.91167],
|
||||||
|
"to": [5.6254, 6.45599, 12.11167],
|
||||||
|
"rotation": {"angle": -22.5, "axis": "z", "origin": [4.7627, 3.35599, 11.01167]},
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [13, 13, 13.75, 16], "texture": "#1"},
|
||||||
|
"east": {"uv": [12, 13, 13, 16], "texture": "#1"},
|
||||||
|
"south": {"uv": [14.5, 13, 15.25, 16], "texture": "#1"},
|
||||||
|
"west": {"uv": [13.75, 13, 14.5, 16], "texture": "#1"},
|
||||||
|
"up": {"uv": [13, 12, 13.75, 13], "texture": "#1"},
|
||||||
|
"down": {"uv": [13.75, 12, 14.5, 13], "texture": "#1"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "RightArm",
|
||||||
|
"from": [10.6, 0.34246, 9.979],
|
||||||
|
"to": [12.1, 6.34246, 11.979],
|
||||||
|
"rotation": {"angle": 22.5, "axis": "z", "origin": [11.25663, 3.34246, 10.979]},
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [11, 5, 11.75, 8], "texture": "#1"},
|
||||||
|
"east": {"uv": [10, 5, 11, 8], "texture": "#1"},
|
||||||
|
"south": {"uv": [12.75, 5, 13.5, 8], "texture": "#1"},
|
||||||
|
"west": {"uv": [11.75, 5, 12.5, 8], "texture": "#1"},
|
||||||
|
"up": {"uv": [11, 4, 11.75, 5], "texture": "#1"},
|
||||||
|
"down": {"uv": [11.75, 4, 12.5, 5], "texture": "#1"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Right Arm Layer",
|
||||||
|
"from": [10.48163, 0.24246, 9.879],
|
||||||
|
"to": [12.18163, 6.44246, 12.079],
|
||||||
|
"rotation": {"angle": 22.5, "axis": "z", "origin": [11.28163, 3.34246, 10.979]},
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [11, 9, 11.75, 12], "texture": "#1"},
|
||||||
|
"east": {"uv": [10, 9, 11, 12], "texture": "#1"},
|
||||||
|
"south": {"uv": [12.75, 9, 13.5, 12], "texture": "#1"},
|
||||||
|
"west": {"uv": [11.75, 9, 12.5, 12], "texture": "#1"},
|
||||||
|
"up": {"uv": [11, 8, 11.75, 9], "texture": "#1"},
|
||||||
|
"down": {"uv": [11.75, 8, 12.5, 9], "texture": "#1"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Left Leg",
|
||||||
|
"from": [8, -0.1, 4],
|
||||||
|
"to": [10, 1.9, 10],
|
||||||
|
"rotation": {"angle": -22.5, "axis": "y", "origin": [8, 0, 11]},
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [2, 4, 3, 5], "texture": "#1"},
|
||||||
|
"east": {"uv": [0, 8, 1, 5], "rotation": 90, "texture": "#1"},
|
||||||
|
"south": {"uv": [1, 4, 2, 5], "texture": "#1"},
|
||||||
|
"west": {"uv": [2, 5, 3, 8], "rotation": 90, "texture": "#1"},
|
||||||
|
"up": {"uv": [2, 8, 1, 5], "texture": "#1"},
|
||||||
|
"down": {"uv": [3, 5, 4, 8], "texture": "#1"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Left Leg Layer",
|
||||||
|
"from": [7.9, -0.2, 3.9],
|
||||||
|
"to": [10.1, 2, 10.1],
|
||||||
|
"rotation": {"angle": -22.5, "axis": "y", "origin": [8, 0, 11]},
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [2, 8, 3, 9], "texture": "#1"},
|
||||||
|
"east": {"uv": [0, 12, 1, 9], "rotation": 90, "texture": "#1"},
|
||||||
|
"south": {"uv": [1, 8, 2, 9], "texture": "#1"},
|
||||||
|
"west": {"uv": [2, 9, 3, 12], "rotation": 90, "texture": "#1"},
|
||||||
|
"up": {"uv": [2, 12, 1, 9], "texture": "#1"},
|
||||||
|
"down": {"uv": [3, 9, 4, 12], "texture": "#1"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Right Leg",
|
||||||
|
"from": [6, -0.1, 4],
|
||||||
|
"to": [8, 1.9, 10],
|
||||||
|
"rotation": {"angle": 22.5, "axis": "y", "origin": [8, 0, 11]},
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [6, 12, 7, 13], "texture": "#1"},
|
||||||
|
"east": {"uv": [4, 16, 5, 13], "rotation": 90, "texture": "#1"},
|
||||||
|
"south": {"uv": [5, 12, 6, 13], "texture": "#1"},
|
||||||
|
"west": {"uv": [6, 13, 7, 16], "rotation": 90, "texture": "#1"},
|
||||||
|
"up": {"uv": [6, 16, 5, 13], "texture": "#1"},
|
||||||
|
"down": {"uv": [7, 13, 8, 16], "texture": "#1"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Right Leg Layer",
|
||||||
|
"from": [5.9, -0.2, 3.9],
|
||||||
|
"to": [8.1, 2, 10.1],
|
||||||
|
"rotation": {"angle": 22.5, "axis": "y", "origin": [8, 0, 11]},
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [2, 12, 3, 13], "texture": "#1"},
|
||||||
|
"east": {"uv": [0, 16, 1, 13], "rotation": 90, "texture": "#1"},
|
||||||
|
"south": {"uv": [1, 12, 2, 13], "texture": "#1"},
|
||||||
|
"west": {"uv": [2, 13, 3, 16], "rotation": 90, "texture": "#1"},
|
||||||
|
"up": {"uv": [2, 16, 1, 13], "texture": "#1"},
|
||||||
|
"down": {"uv": [3, 13, 4, 16], "texture": "#1"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Body",
|
||||||
|
"from": [5.6, 0, 9.6],
|
||||||
|
"to": [10.4, 6, 12.4],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [5, 5, 7, 8], "texture": "#1"},
|
||||||
|
"east": {"uv": [4, 5, 5, 8], "texture": "#1"},
|
||||||
|
"south": {"uv": [8, 5, 10, 8], "texture": "#1"},
|
||||||
|
"west": {"uv": [7, 5, 8, 8], "texture": "#1"},
|
||||||
|
"up": {"uv": [5, 5, 7, 4], "texture": "#1"},
|
||||||
|
"down": {"uv": [7, 5, 9, 4], "texture": "#1"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Body Layer",
|
||||||
|
"from": [5.5, -0.1, 9.5],
|
||||||
|
"to": [10.5, 6.1, 12.5],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [5, 9, 7, 12], "texture": "#1"},
|
||||||
|
"east": {"uv": [4, 9, 5, 12], "texture": "#1"},
|
||||||
|
"south": {"uv": [8, 9, 10, 12], "texture": "#1"},
|
||||||
|
"west": {"uv": [7, 9, 8, 12], "texture": "#1"},
|
||||||
|
"up": {"uv": [5, 9, 7, 8], "texture": "#1"},
|
||||||
|
"down": {"uv": [7, 9, 9, 8], "texture": "#1"}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"display": {
|
||||||
|
"thirdperson_righthand": {
|
||||||
|
"rotation": [60, 0, 0],
|
||||||
|
"translation": [0.25, 4.25, 1.25],
|
||||||
|
"scale": [0.7, 0.7, 0.7]
|
||||||
|
},
|
||||||
|
"thirdperson_lefthand": {
|
||||||
|
"rotation": [60, 0, 0],
|
||||||
|
"translation": [0.25, 4.25, 1.25],
|
||||||
|
"scale": [0.7, 0.7, 0.7]
|
||||||
|
},
|
||||||
|
"firstperson_righthand": {
|
||||||
|
"rotation": [0, 120, 0],
|
||||||
|
"translation": [0, 3.75, 0],
|
||||||
|
"scale": [0.5, 0.5, 0.5]
|
||||||
|
},
|
||||||
|
"firstperson_lefthand": {
|
||||||
|
"rotation": [0, 123, 0],
|
||||||
|
"translation": [0, 3.75, 0],
|
||||||
|
"scale": [0.5, 0.5, 0.5]
|
||||||
|
},
|
||||||
|
"ground": {
|
||||||
|
"translation": [0, 5, 0],
|
||||||
|
"scale": [0.5, 0.5, 0.5]
|
||||||
|
},
|
||||||
|
"gui": {
|
||||||
|
"rotation": [15, 150, 0],
|
||||||
|
"scale": [0.7, 0.7, 0.7]
|
||||||
|
},
|
||||||
|
"fixed": {
|
||||||
|
"translation": [0, 0, -3.5]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,222 @@
|
||||||
|
{
|
||||||
|
"format_version": "1.21.6",
|
||||||
|
"credit": "Made with Blockbench",
|
||||||
|
"render_type": "cutout",
|
||||||
|
"textures": {
|
||||||
|
"1": "extendedae_plus:block/iava_user",
|
||||||
|
"2": "extendedae_plus:block/infinity_biginteger_cell",
|
||||||
|
"particle": "extendedae_plus:block/iava_user"
|
||||||
|
},
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"name": "Head",
|
||||||
|
"from": [4.35, 6, 7.35],
|
||||||
|
"to": [11.65, 13.3, 14.65],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [2, 2, 4, 4], "texture": "#1"},
|
||||||
|
"east": {"uv": [0, 2, 2, 4], "texture": "#1"},
|
||||||
|
"south": {"uv": [6, 2, 8, 4], "texture": "#1"},
|
||||||
|
"west": {"uv": [4, 2, 6, 4], "texture": "#1"},
|
||||||
|
"up": {"uv": [2, 2, 4, 0], "texture": "#1"},
|
||||||
|
"down": {"uv": [4, 0, 6, 2], "texture": "#1"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Hat Layer",
|
||||||
|
"from": [4.1, 6, 7],
|
||||||
|
"to": [11.8, 13.6, 14.675],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [10, 2, 12, 4], "texture": "#1"},
|
||||||
|
"east": {"uv": [8, 2, 10, 4], "texture": "#1"},
|
||||||
|
"south": {"uv": [14, 2, 16, 4], "texture": "#1"},
|
||||||
|
"west": {"uv": [12, 2, 14, 4], "texture": "#1"},
|
||||||
|
"up": {"uv": [10, 2, 12, 0], "texture": "#1"},
|
||||||
|
"down": {"uv": [12, 0, 14, 2], "texture": "#1"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Left Arm",
|
||||||
|
"from": [5, 4, 7.08248],
|
||||||
|
"to": [6.5, 6, 13.08248],
|
||||||
|
"rotation": {"angle": -22.5, "axis": "x", "origin": [8.04619, 5, 9.15224]},
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [9.75, 12, 10.5, 13], "rotation": 180, "texture": "#1"},
|
||||||
|
"east": {"uv": [8, 13, 9, 16], "rotation": 270, "texture": "#1"},
|
||||||
|
"south": {"uv": [9, 12, 9.75, 13], "texture": "#1"},
|
||||||
|
"west": {"uv": [9.75, 13, 10.5, 16], "rotation": 90, "texture": "#1"},
|
||||||
|
"up": {"uv": [9, 13, 9.75, 16], "rotation": 180, "texture": "#1"},
|
||||||
|
"down": {"uv": [10.5, 13, 11.5, 16], "texture": "#1"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Left Arm Layer",
|
||||||
|
"from": [4.9004, 3.9, 6.98248],
|
||||||
|
"to": [6.6004, 6.1, 13.18248],
|
||||||
|
"rotation": {"angle": -22.5, "axis": "x", "origin": [7.89619, 5, 9.15224]},
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [13.75, 12, 14.5, 13], "rotation": 180, "texture": "#1"},
|
||||||
|
"east": {"uv": [12, 13, 13, 16], "rotation": 270, "texture": "#1"},
|
||||||
|
"south": {"uv": [13, 12, 13.75, 13], "texture": "#1"},
|
||||||
|
"west": {"uv": [13.75, 13, 14.5, 16], "rotation": 90, "texture": "#1"},
|
||||||
|
"up": {"uv": [13, 13, 13.75, 16], "rotation": 180, "texture": "#1"},
|
||||||
|
"down": {"uv": [14.5, 13, 15.5, 16], "texture": "#1"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "RightArm",
|
||||||
|
"from": [9.6, 4.34246, 6.979],
|
||||||
|
"to": [11.1, 6.34246, 12.979],
|
||||||
|
"rotation": {"angle": -22.5, "axis": "x", "origin": [10.25663, 5.34246, 9.979]},
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [11.75, 4, 12.5, 5], "rotation": 180, "texture": "#1"},
|
||||||
|
"east": {"uv": [10, 5, 11, 8], "rotation": 270, "texture": "#1"},
|
||||||
|
"south": {"uv": [11, 4, 11.75, 5], "texture": "#1"},
|
||||||
|
"west": {"uv": [11.75, 5, 12.5, 8], "rotation": 90, "texture": "#1"},
|
||||||
|
"up": {"uv": [11, 5, 11.75, 8], "rotation": 180, "texture": "#1"},
|
||||||
|
"down": {"uv": [12.5, 5, 13.5, 8], "texture": "#1"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Right Arm Layer",
|
||||||
|
"from": [9.50663, 4.24246, 6.879],
|
||||||
|
"to": [11.20663, 6.44246, 13.079],
|
||||||
|
"rotation": {"angle": -22.5, "axis": "x", "origin": [10.30663, 5.34246, 9.979]},
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [11.75, 8, 12.5, 9], "rotation": 180, "texture": "#1"},
|
||||||
|
"east": {"uv": [10, 9, 11, 12], "rotation": 270, "texture": "#1"},
|
||||||
|
"south": {"uv": [11, 8, 11.75, 9], "texture": "#1"},
|
||||||
|
"west": {"uv": [11.75, 9, 12.5, 12], "rotation": 90, "texture": "#1"},
|
||||||
|
"up": {"uv": [11, 9, 11.75, 12], "rotation": 180, "texture": "#1"},
|
||||||
|
"down": {"uv": [12.5, 9, 13.5, 12], "texture": "#1"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Totem",
|
||||||
|
"from": [6.5, 3, 7],
|
||||||
|
"to": [9.7, 6.2, 7.1],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [0, 0, 16, 16], "texture": "#2"},
|
||||||
|
"south": {"uv": [16, 0, 0, 16], "texture": "#2"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Left Leg",
|
||||||
|
"from": [8, -0.1, 4],
|
||||||
|
"to": [10, 1.9, 10],
|
||||||
|
"rotation": {"angle": -22.5, "axis": "y", "origin": [8, 0, 11]},
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [2, 4, 3, 5], "texture": "#1"},
|
||||||
|
"east": {"uv": [0, 8, 1, 5], "rotation": 90, "texture": "#1"},
|
||||||
|
"south": {"uv": [1, 4, 2, 5], "texture": "#1"},
|
||||||
|
"west": {"uv": [2, 5, 3, 8], "rotation": 90, "texture": "#1"},
|
||||||
|
"up": {"uv": [2, 8, 1, 5], "texture": "#1"},
|
||||||
|
"down": {"uv": [3, 5, 4, 8], "texture": "#1"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Left Leg Layer",
|
||||||
|
"from": [7.9, -0.2, 3.9],
|
||||||
|
"to": [10.1, 2, 10.1],
|
||||||
|
"rotation": {"angle": -22.5, "axis": "y", "origin": [8, 0, 11]},
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [2, 8, 3, 9], "texture": "#1"},
|
||||||
|
"east": {"uv": [0, 12, 1, 9], "rotation": 90, "texture": "#1"},
|
||||||
|
"south": {"uv": [1, 8, 2, 9], "texture": "#1"},
|
||||||
|
"west": {"uv": [2, 9, 3, 12], "rotation": 90, "texture": "#1"},
|
||||||
|
"up": {"uv": [2, 12, 1, 9], "texture": "#1"},
|
||||||
|
"down": {"uv": [3, 9, 4, 12], "texture": "#1"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Right Leg",
|
||||||
|
"from": [6, -0.1, 4],
|
||||||
|
"to": [8, 1.9, 10],
|
||||||
|
"rotation": {"angle": 22.5, "axis": "y", "origin": [8, 0, 11]},
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [6, 12, 7, 13], "texture": "#1"},
|
||||||
|
"east": {"uv": [4, 16, 5, 13], "rotation": 90, "texture": "#1"},
|
||||||
|
"south": {"uv": [5, 12, 6, 13], "texture": "#1"},
|
||||||
|
"west": {"uv": [6, 13, 7, 16], "rotation": 90, "texture": "#1"},
|
||||||
|
"up": {"uv": [6, 16, 5, 13], "texture": "#1"},
|
||||||
|
"down": {"uv": [7, 13, 8, 16], "texture": "#1"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Right Leg Layer",
|
||||||
|
"from": [5.9, -0.2, 3.9],
|
||||||
|
"to": [8.1, 2, 10.1],
|
||||||
|
"rotation": {"angle": 22.5, "axis": "y", "origin": [8, 0, 11]},
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [2, 12, 3, 13], "texture": "#1"},
|
||||||
|
"east": {"uv": [0, 16, 1, 13], "rotation": 90, "texture": "#1"},
|
||||||
|
"south": {"uv": [1, 12, 2, 13], "texture": "#1"},
|
||||||
|
"west": {"uv": [2, 13, 3, 16], "rotation": 90, "texture": "#1"},
|
||||||
|
"up": {"uv": [2, 16, 1, 13], "texture": "#1"},
|
||||||
|
"down": {"uv": [3, 13, 4, 16], "texture": "#1"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Body",
|
||||||
|
"from": [5.6, 0, 9.6],
|
||||||
|
"to": [10.4, 6, 12.4],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [5, 5, 7, 8], "texture": "#1"},
|
||||||
|
"east": {"uv": [4, 5, 5, 8], "texture": "#1"},
|
||||||
|
"south": {"uv": [8, 5, 10, 8], "texture": "#1"},
|
||||||
|
"west": {"uv": [7, 5, 8, 8], "texture": "#1"},
|
||||||
|
"up": {"uv": [5, 5, 7, 4], "texture": "#1"},
|
||||||
|
"down": {"uv": [7, 5, 9, 4], "texture": "#1"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Body Layer",
|
||||||
|
"from": [5.5, -0.1, 9.5],
|
||||||
|
"to": [10.5, 6.1, 12.5],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [5, 9, 7, 12], "texture": "#1"},
|
||||||
|
"east": {"uv": [4, 9, 5, 12], "texture": "#1"},
|
||||||
|
"south": {"uv": [8, 9, 10, 12], "texture": "#1"},
|
||||||
|
"west": {"uv": [7, 9, 8, 12], "texture": "#1"},
|
||||||
|
"up": {"uv": [5, 9, 7, 8], "texture": "#1"},
|
||||||
|
"down": {"uv": [7, 9, 9, 8], "texture": "#1"}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"display": {
|
||||||
|
"thirdperson_righthand": {
|
||||||
|
"rotation": [60, 0, 0],
|
||||||
|
"translation": [0.25, 4.25, 1.25],
|
||||||
|
"scale": [0.7, 0.7, 0.7]
|
||||||
|
},
|
||||||
|
"thirdperson_lefthand": {
|
||||||
|
"rotation": [60, 0, 0],
|
||||||
|
"translation": [1, 1, 16],
|
||||||
|
"scale": [0.55, 0.55, 0.55]
|
||||||
|
},
|
||||||
|
"firstperson_righthand": {
|
||||||
|
"rotation": [0, 120, 0],
|
||||||
|
"translation": [0, 3.75, 0],
|
||||||
|
"scale": [0.5, 0.5, 0.5]
|
||||||
|
},
|
||||||
|
"firstperson_lefthand": {
|
||||||
|
"rotation": [0, 123, 0],
|
||||||
|
"translation": [0, 3.75, 0],
|
||||||
|
"scale": [0.5, 0.5, 0.5]
|
||||||
|
},
|
||||||
|
"ground": {
|
||||||
|
"translation": [0, 2.25, 0],
|
||||||
|
"scale": [0.5, 0.5, 0.5]
|
||||||
|
},
|
||||||
|
"gui": {
|
||||||
|
"rotation": [15, 150, 0],
|
||||||
|
"translation": [0, 0.5, 0],
|
||||||
|
"scale": [0.9, 0.9, 0.9]
|
||||||
|
},
|
||||||
|
"head": {
|
||||||
|
"translation": [11, 2, -1.25]
|
||||||
|
},
|
||||||
|
"fixed": {
|
||||||
|
"translation": [0, 0, -3.5]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
222
src/main/resources/assets/extendedae_plus/models/block/xbai.json
Normal file
|
|
@ -0,0 +1,222 @@
|
||||||
|
{
|
||||||
|
"format_version": "1.21.6",
|
||||||
|
"credit": "Made with _leng",
|
||||||
|
"texture_size": [32, 32],
|
||||||
|
"render_type": "translucent",
|
||||||
|
"textures": {
|
||||||
|
"0": "extendedae_plus:block/xbai",
|
||||||
|
"particle": "extendedae_plus:block/xbai"
|
||||||
|
},
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"name": "Head",
|
||||||
|
"from": [4.35, 6, 7.25],
|
||||||
|
"to": [11.65, 13.3, 14.55],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [1, 1, 2, 2], "texture": "#0"},
|
||||||
|
"east": {"uv": [0, 1, 1, 2], "texture": "#0"},
|
||||||
|
"south": {"uv": [3, 1, 4, 2], "texture": "#0"},
|
||||||
|
"west": {"uv": [2, 1, 3, 2], "texture": "#0"},
|
||||||
|
"up": {"uv": [1, 1, 2, 0], "texture": "#0"},
|
||||||
|
"down": {"uv": [2, 0, 3, 1], "texture": "#0"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Hat Layer",
|
||||||
|
"from": [4.1, 6, 7],
|
||||||
|
"to": [11.8, 13.6, 14.6],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [5, 1, 6, 2], "texture": "#0"},
|
||||||
|
"east": {"uv": [4, 1, 5, 2], "texture": "#0"},
|
||||||
|
"south": {"uv": [7, 1, 8, 2], "texture": "#0"},
|
||||||
|
"west": {"uv": [6, 1, 7, 2], "texture": "#0"},
|
||||||
|
"up": {"uv": [5, 1, 6, 0], "texture": "#0"},
|
||||||
|
"down": {"uv": [6, 0, 7, 1], "texture": "#0"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Left Arm",
|
||||||
|
"from": [5.1, 4, 7.08248],
|
||||||
|
"to": [6.6, 6, 13.08248],
|
||||||
|
"rotation": {"angle": -22.5, "axis": "x", "origin": [8.04619, 5, 9.15224]},
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [5, 6, 5.5, 6.5], "rotation": 180, "texture": "#0"},
|
||||||
|
"east": {"uv": [4, 6.5, 4.5, 8], "rotation": 270, "texture": "#0"},
|
||||||
|
"south": {"uv": [4.5, 6, 5, 6.5], "texture": "#0"},
|
||||||
|
"west": {"uv": [5, 6.5, 5.5, 8], "rotation": 90, "texture": "#0"},
|
||||||
|
"up": {"uv": [4.5, 6.5, 5, 8], "rotation": 180, "texture": "#0"},
|
||||||
|
"down": {"uv": [5.5, 6.5, 6, 8], "texture": "#0"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Left Arm Layer",
|
||||||
|
"from": [5.0504, 3.9, 6.98248],
|
||||||
|
"to": [6.7504, 6.1, 13.18248],
|
||||||
|
"rotation": {"angle": -22.5, "axis": "x", "origin": [8.04619, 5, 9.15224]},
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [7, 6, 7.5, 6.5], "rotation": 180, "texture": "#0"},
|
||||||
|
"east": {"uv": [6, 6.5, 6.5, 8], "rotation": 270, "texture": "#0"},
|
||||||
|
"south": {"uv": [6.875, 6, 6.5, 6.5], "texture": "#0"},
|
||||||
|
"west": {"uv": [7, 6.5, 7.5, 8], "rotation": 90, "texture": "#0"},
|
||||||
|
"up": {"uv": [6.5, 6.5, 6.875, 8], "rotation": 180, "texture": "#0"},
|
||||||
|
"down": {"uv": [7.5, 6.5, 7.875, 8], "texture": "#0"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "RightArm",
|
||||||
|
"from": [9.6, 4.34246, 6.979],
|
||||||
|
"to": [11.1, 6.34246, 12.979],
|
||||||
|
"rotation": {"angle": -22.5, "axis": "x", "origin": [10.25663, 5.34246, 9.979]},
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [6, 2, 6.5, 2.5], "rotation": 180, "texture": "#0"},
|
||||||
|
"east": {"uv": [5, 2.5, 5.5, 4], "rotation": 270, "texture": "#0"},
|
||||||
|
"south": {"uv": [5.5, 2, 6, 2.5], "texture": "#0"},
|
||||||
|
"west": {"uv": [6, 2.5, 6.5, 4], "rotation": 90, "texture": "#0"},
|
||||||
|
"up": {"uv": [5.5, 2.5, 6, 4], "rotation": 180, "texture": "#0"},
|
||||||
|
"down": {"uv": [6.5, 2.5, 7, 4], "texture": "#0"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Right Arm Layer",
|
||||||
|
"from": [9.45663, 4.24246, 6.879],
|
||||||
|
"to": [11.15663, 6.44246, 13.079],
|
||||||
|
"rotation": {"angle": -22.5, "axis": "x", "origin": [10.25663, 5.34246, 9.979]},
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [5.875, 4, 6.25, 4.5], "rotation": 180, "texture": "#0"},
|
||||||
|
"east": {"uv": [5, 4.5, 5.5, 6], "rotation": 270, "texture": "#0"},
|
||||||
|
"south": {"uv": [5.875, 4, 5.5, 4.5], "texture": "#0"},
|
||||||
|
"west": {"uv": [5.875, 4.5, 6.25, 6], "rotation": 90, "texture": "#0"},
|
||||||
|
"up": {"uv": [5.5, 4.5, 5.875, 6], "rotation": 180, "texture": "#0"},
|
||||||
|
"down": {"uv": [6.375, 4.5, 6.75, 6], "texture": "#0"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Totem",
|
||||||
|
"from": [6.5, 3, 7],
|
||||||
|
"to": [9.7, 6.2, 7.1],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [7, 2, 9, 4], "texture": "#0"},
|
||||||
|
"south": {"uv": [9, 2, 7, 4], "texture": "#0"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Left Leg",
|
||||||
|
"from": [8, -0.1, 4],
|
||||||
|
"to": [10, 1.9, 10],
|
||||||
|
"rotation": {"angle": -22.5, "axis": "y", "origin": [8, 0, 11]},
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [1, 2, 1.5, 2.5], "texture": "#0"},
|
||||||
|
"east": {"uv": [0, 4, 0.5, 2.5], "rotation": 90, "texture": "#0"},
|
||||||
|
"south": {"uv": [0.5, 2, 1, 2.5], "texture": "#0"},
|
||||||
|
"west": {"uv": [1, 2.5, 1.5, 4], "rotation": 90, "texture": "#0"},
|
||||||
|
"up": {"uv": [1, 4, 0.5, 2.5], "texture": "#0"},
|
||||||
|
"down": {"uv": [1.5, 2.5, 2, 4], "texture": "#0"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Left Leg Layer",
|
||||||
|
"from": [7.9, -0.2, 3.9],
|
||||||
|
"to": [10.1, 2, 10.1],
|
||||||
|
"rotation": {"angle": -22.5, "axis": "y", "origin": [8, 0, 11]},
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [1, 4, 1.5, 4.5], "texture": "#0"},
|
||||||
|
"east": {"uv": [0, 6, 0.5, 4.5], "rotation": 90, "texture": "#0"},
|
||||||
|
"south": {"uv": [0.5, 4, 1, 4.5], "texture": "#0"},
|
||||||
|
"west": {"uv": [1, 4.5, 1.5, 6], "rotation": 90, "texture": "#0"},
|
||||||
|
"up": {"uv": [1, 6, 0.5, 4.5], "texture": "#0"},
|
||||||
|
"down": {"uv": [1.5, 4.5, 2, 6], "texture": "#0"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Right Leg",
|
||||||
|
"from": [6, -0.1, 4],
|
||||||
|
"to": [8, 1.9, 10],
|
||||||
|
"rotation": {"angle": 22.5, "axis": "y", "origin": [8, 0, 11]},
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [3, 6, 3.5, 6.5], "texture": "#0"},
|
||||||
|
"east": {"uv": [2, 8, 2.5, 6.5], "rotation": 90, "texture": "#0"},
|
||||||
|
"south": {"uv": [2.5, 6, 3, 6.5], "texture": "#0"},
|
||||||
|
"west": {"uv": [3, 6.5, 3.5, 8], "rotation": 90, "texture": "#0"},
|
||||||
|
"up": {"uv": [3, 8, 2.5, 6.5], "texture": "#0"},
|
||||||
|
"down": {"uv": [3.5, 6.5, 4, 8], "texture": "#0"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Right Leg Layer",
|
||||||
|
"from": [5.9, -0.2, 3.9],
|
||||||
|
"to": [8.1, 2, 10.1],
|
||||||
|
"rotation": {"angle": 22.5, "axis": "y", "origin": [8, 0, 11]},
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [1, 6, 1.5, 6.5], "texture": "#0"},
|
||||||
|
"east": {"uv": [0, 8, 0.5, 6.5], "rotation": 90, "texture": "#0"},
|
||||||
|
"south": {"uv": [0.5, 6, 1, 6.5], "texture": "#0"},
|
||||||
|
"west": {"uv": [1, 6.5, 1.5, 8], "rotation": 90, "texture": "#0"},
|
||||||
|
"up": {"uv": [1, 8, 0.5, 6.5], "texture": "#0"},
|
||||||
|
"down": {"uv": [1.5, 6.5, 2, 8], "texture": "#0"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Body",
|
||||||
|
"from": [5.6, 0, 9.6],
|
||||||
|
"to": [10.4, 6, 12.4],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [2.5, 2.5, 3.5, 4], "texture": "#0"},
|
||||||
|
"east": {"uv": [2, 2.5, 2.5, 4], "texture": "#0"},
|
||||||
|
"south": {"uv": [4, 2.5, 5, 4], "texture": "#0"},
|
||||||
|
"west": {"uv": [3.5, 2.5, 4, 4], "texture": "#0"},
|
||||||
|
"up": {"uv": [2.5, 2.5, 3.5, 2], "texture": "#0"},
|
||||||
|
"down": {"uv": [3.5, 2.5, 4.5, 2], "texture": "#0"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Body Layer",
|
||||||
|
"from": [5.5, -0.1, 9.5],
|
||||||
|
"to": [10.5, 6.1, 12.5],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [2.5, 4.5, 3.5, 6], "texture": "#0"},
|
||||||
|
"east": {"uv": [2, 4.5, 2.5, 6], "texture": "#0"},
|
||||||
|
"south": {"uv": [4, 4.5, 5, 6], "texture": "#0"},
|
||||||
|
"west": {"uv": [3.5, 4.5, 4, 6], "texture": "#0"},
|
||||||
|
"up": {"uv": [2.5, 4.5, 3.5, 4], "texture": "#0"},
|
||||||
|
"down": {"uv": [3.5, 4.5, 4.5, 4], "texture": "#0"}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"display": {
|
||||||
|
"thirdperson_righthand": {
|
||||||
|
"rotation": [60, 0, 0],
|
||||||
|
"translation": [0.25, 4.25, 1.25],
|
||||||
|
"scale": [0.8, 0.8, 0.8]
|
||||||
|
},
|
||||||
|
"thirdperson_lefthand": {
|
||||||
|
"rotation": [60, 0, 0],
|
||||||
|
"translation": [0.25, 4.25, 1.25],
|
||||||
|
"scale": [0.8, 0.8, 0.8]
|
||||||
|
},
|
||||||
|
"firstperson_righthand": {
|
||||||
|
"rotation": [0, 120, 0],
|
||||||
|
"translation": [0.75, 3.5, 0],
|
||||||
|
"scale": [0.5, 0.5, 0.5]
|
||||||
|
},
|
||||||
|
"firstperson_lefthand": {
|
||||||
|
"rotation": [0, 123, 0],
|
||||||
|
"translation": [1, 3.5, 0],
|
||||||
|
"scale": [0.5, 0.5, 0.5]
|
||||||
|
},
|
||||||
|
"ground": {
|
||||||
|
"translation": [0, 5, 0],
|
||||||
|
"scale": [0.8, 0.8, 0.8]
|
||||||
|
},
|
||||||
|
"gui": {
|
||||||
|
"rotation": [15, 150, 0],
|
||||||
|
"translation": [-0.25, 0.5, 0],
|
||||||
|
"scale": [0.8, 0.8, 0.8]
|
||||||
|
},
|
||||||
|
"head": {
|
||||||
|
"translation": [11, 0.75, -2.25]
|
||||||
|
},
|
||||||
|
"fixed": {
|
||||||
|
"translation": [0, 0, -3.5]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
"parent": "extendedae_plus:block/_feng"
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
"parent": "extendedae_plus:item/iava_skin_doll"
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
"parent": "extendedae_plus:block/fish_dan_"
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,221 @@
|
||||||
|
{
|
||||||
|
"format_version": "1.21.6",
|
||||||
|
"credit": "Made with _leng",
|
||||||
|
"render_type": "cutout",
|
||||||
|
"textures": {
|
||||||
|
"1": "extendedae_plus:block/iava_user",
|
||||||
|
"2": "extendedae_plus:block/infinity_biginteger_cell"
|
||||||
|
},
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"name": "Head",
|
||||||
|
"from": [4.35, 6, 7.35],
|
||||||
|
"to": [11.65, 13.3, 14.65],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [2, 2, 4, 4], "texture": "#1"},
|
||||||
|
"east": {"uv": [0, 2, 2, 4], "texture": "#1"},
|
||||||
|
"south": {"uv": [6, 2, 8, 4], "texture": "#1"},
|
||||||
|
"west": {"uv": [4, 2, 6, 4], "texture": "#1"},
|
||||||
|
"up": {"uv": [2, 2, 4, 0], "texture": "#1"},
|
||||||
|
"down": {"uv": [4, 0, 6, 2], "texture": "#1"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Hat Layer",
|
||||||
|
"from": [4.1, 6, 7],
|
||||||
|
"to": [11.8, 13.6, 14.675],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [10, 2, 12, 4], "texture": "#1"},
|
||||||
|
"east": {"uv": [8, 2, 10, 4], "texture": "#1"},
|
||||||
|
"south": {"uv": [14, 2, 16, 4], "texture": "#1"},
|
||||||
|
"west": {"uv": [12, 2, 14, 4], "texture": "#1"},
|
||||||
|
"up": {"uv": [10, 2, 12, 0], "texture": "#1"},
|
||||||
|
"down": {"uv": [12, 0, 14, 2], "texture": "#1"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Left Arm",
|
||||||
|
"from": [5, 4, 7.08248],
|
||||||
|
"to": [6.5, 6, 13.08248],
|
||||||
|
"rotation": {"angle": -22.5, "axis": "x", "origin": [8.04619, 5, 9.15224]},
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [9.75, 12, 10.5, 13], "rotation": 180, "texture": "#1"},
|
||||||
|
"east": {"uv": [8, 13, 9, 16], "rotation": 270, "texture": "#1"},
|
||||||
|
"south": {"uv": [9, 12, 9.75, 13], "texture": "#1"},
|
||||||
|
"west": {"uv": [9.75, 13, 10.5, 16], "rotation": 90, "texture": "#1"},
|
||||||
|
"up": {"uv": [9, 13, 9.75, 16], "rotation": 180, "texture": "#1"},
|
||||||
|
"down": {"uv": [10.5, 13, 11.5, 16], "texture": "#1"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Left Arm Layer",
|
||||||
|
"from": [4.9004, 3.9, 6.98248],
|
||||||
|
"to": [6.6004, 6.1, 13.18248],
|
||||||
|
"rotation": {"angle": -22.5, "axis": "x", "origin": [7.89619, 5, 9.15224]},
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [13.75, 12, 14.5, 13], "rotation": 180, "texture": "#1"},
|
||||||
|
"east": {"uv": [12, 13, 13, 16], "rotation": 270, "texture": "#1"},
|
||||||
|
"south": {"uv": [13, 12, 13.75, 13], "texture": "#1"},
|
||||||
|
"west": {"uv": [13.75, 13, 14.5, 16], "rotation": 90, "texture": "#1"},
|
||||||
|
"up": {"uv": [13, 13, 13.75, 16], "rotation": 180, "texture": "#1"},
|
||||||
|
"down": {"uv": [14.5, 13, 15.5, 16], "texture": "#1"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "RightArm",
|
||||||
|
"from": [9.6, 4.34246, 6.979],
|
||||||
|
"to": [11.1, 6.34246, 12.979],
|
||||||
|
"rotation": {"angle": -22.5, "axis": "x", "origin": [10.25663, 5.34246, 9.979]},
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [11.75, 4, 12.5, 5], "rotation": 180, "texture": "#1"},
|
||||||
|
"east": {"uv": [10, 5, 11, 8], "rotation": 270, "texture": "#1"},
|
||||||
|
"south": {"uv": [11, 4, 11.75, 5], "texture": "#1"},
|
||||||
|
"west": {"uv": [11.75, 5, 12.5, 8], "rotation": 90, "texture": "#1"},
|
||||||
|
"up": {"uv": [11, 5, 11.75, 8], "rotation": 180, "texture": "#1"},
|
||||||
|
"down": {"uv": [12.5, 5, 13.5, 8], "texture": "#1"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Right Arm Layer",
|
||||||
|
"from": [9.50663, 4.24246, 6.879],
|
||||||
|
"to": [11.20663, 6.44246, 13.079],
|
||||||
|
"rotation": {"angle": -22.5, "axis": "x", "origin": [10.30663, 5.34246, 9.979]},
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [11.75, 8, 12.5, 9], "rotation": 180, "texture": "#1"},
|
||||||
|
"east": {"uv": [10, 9, 11, 12], "rotation": 270, "texture": "#1"},
|
||||||
|
"south": {"uv": [11, 8, 11.75, 9], "texture": "#1"},
|
||||||
|
"west": {"uv": [11.75, 9, 12.5, 12], "rotation": 90, "texture": "#1"},
|
||||||
|
"up": {"uv": [11, 9, 11.75, 12], "rotation": 180, "texture": "#1"},
|
||||||
|
"down": {"uv": [12.5, 9, 13.5, 12], "texture": "#1"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Totem",
|
||||||
|
"from": [6.5, 3, 7],
|
||||||
|
"to": [9.7, 6.2, 7.1],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [0, 0, 16, 16], "texture": "#2"},
|
||||||
|
"south": {"uv": [16, 0, 0, 16], "texture": "#2"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Left Leg",
|
||||||
|
"from": [8, -0.1, 4],
|
||||||
|
"to": [10, 1.9, 10],
|
||||||
|
"rotation": {"angle": -22.5, "axis": "y", "origin": [8, 0, 11]},
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [2, 4, 3, 5], "texture": "#1"},
|
||||||
|
"east": {"uv": [0, 8, 1, 5], "rotation": 90, "texture": "#1"},
|
||||||
|
"south": {"uv": [1, 4, 2, 5], "texture": "#1"},
|
||||||
|
"west": {"uv": [2, 5, 3, 8], "rotation": 90, "texture": "#1"},
|
||||||
|
"up": {"uv": [2, 8, 1, 5], "texture": "#1"},
|
||||||
|
"down": {"uv": [3, 5, 4, 8], "texture": "#1"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Left Leg Layer",
|
||||||
|
"from": [7.9, -0.2, 3.9],
|
||||||
|
"to": [10.1, 2, 10.1],
|
||||||
|
"rotation": {"angle": -22.5, "axis": "y", "origin": [8, 0, 11]},
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [2, 8, 3, 9], "texture": "#1"},
|
||||||
|
"east": {"uv": [0, 12, 1, 9], "rotation": 90, "texture": "#1"},
|
||||||
|
"south": {"uv": [1, 8, 2, 9], "texture": "#1"},
|
||||||
|
"west": {"uv": [2, 9, 3, 12], "rotation": 90, "texture": "#1"},
|
||||||
|
"up": {"uv": [2, 12, 1, 9], "texture": "#1"},
|
||||||
|
"down": {"uv": [3, 9, 4, 12], "texture": "#1"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Right Leg",
|
||||||
|
"from": [6, -0.1, 4],
|
||||||
|
"to": [8, 1.9, 10],
|
||||||
|
"rotation": {"angle": 22.5, "axis": "y", "origin": [8, 0, 11]},
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [6, 12, 7, 13], "texture": "#1"},
|
||||||
|
"east": {"uv": [4, 16, 5, 13], "rotation": 90, "texture": "#1"},
|
||||||
|
"south": {"uv": [5, 12, 6, 13], "texture": "#1"},
|
||||||
|
"west": {"uv": [6, 13, 7, 16], "rotation": 90, "texture": "#1"},
|
||||||
|
"up": {"uv": [6, 16, 5, 13], "texture": "#1"},
|
||||||
|
"down": {"uv": [7, 13, 8, 16], "texture": "#1"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Right Leg Layer",
|
||||||
|
"from": [5.9, -0.2, 3.9],
|
||||||
|
"to": [8.1, 2, 10.1],
|
||||||
|
"rotation": {"angle": 22.5, "axis": "y", "origin": [8, 0, 11]},
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [2, 12, 3, 13], "texture": "#1"},
|
||||||
|
"east": {"uv": [0, 16, 1, 13], "rotation": 90, "texture": "#1"},
|
||||||
|
"south": {"uv": [1, 12, 2, 13], "texture": "#1"},
|
||||||
|
"west": {"uv": [2, 13, 3, 16], "rotation": 90, "texture": "#1"},
|
||||||
|
"up": {"uv": [2, 16, 1, 13], "texture": "#1"},
|
||||||
|
"down": {"uv": [3, 13, 4, 16], "texture": "#1"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Body",
|
||||||
|
"from": [5.6, 0, 9.6],
|
||||||
|
"to": [10.4, 6, 12.4],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [5, 5, 7, 8], "texture": "#1"},
|
||||||
|
"east": {"uv": [4, 5, 5, 8], "texture": "#1"},
|
||||||
|
"south": {"uv": [8, 5, 10, 8], "texture": "#1"},
|
||||||
|
"west": {"uv": [7, 5, 8, 8], "texture": "#1"},
|
||||||
|
"up": {"uv": [5, 5, 7, 4], "texture": "#1"},
|
||||||
|
"down": {"uv": [7, 5, 9, 4], "texture": "#1"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Body Layer",
|
||||||
|
"from": [5.5, -0.1, 9.5],
|
||||||
|
"to": [10.5, 6.1, 12.5],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [5, 9, 7, 12], "texture": "#1"},
|
||||||
|
"east": {"uv": [4, 9, 5, 12], "texture": "#1"},
|
||||||
|
"south": {"uv": [8, 9, 10, 12], "texture": "#1"},
|
||||||
|
"west": {"uv": [7, 9, 8, 12], "texture": "#1"},
|
||||||
|
"up": {"uv": [5, 9, 7, 8], "texture": "#1"},
|
||||||
|
"down": {"uv": [7, 9, 9, 8], "texture": "#1"}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"display": {
|
||||||
|
"thirdperson_righthand": {
|
||||||
|
"rotation": [60, 0, 0],
|
||||||
|
"translation": [0.25, 4.25, 1.25],
|
||||||
|
"scale": [0.8, 0.8, 0.8]
|
||||||
|
},
|
||||||
|
"thirdperson_lefthand": {
|
||||||
|
"rotation": [67.5, 0, 0],
|
||||||
|
"translation": [1.25, 1.25, 16],
|
||||||
|
"scale": [0.6, 0.6, 0.6]
|
||||||
|
},
|
||||||
|
"firstperson_righthand": {
|
||||||
|
"rotation": [0, 120, 0],
|
||||||
|
"translation": [0.75, 3.5, 0],
|
||||||
|
"scale": [0.5, 0.5, 0.5]
|
||||||
|
},
|
||||||
|
"firstperson_lefthand": {
|
||||||
|
"rotation": [0, 123, 0],
|
||||||
|
"translation": [1, 3.5, 0],
|
||||||
|
"scale": [0.5, 0.5, 0.5]
|
||||||
|
},
|
||||||
|
"ground": {
|
||||||
|
"translation": [0, 3.5, 0],
|
||||||
|
"scale": [0.8, 0.8, 0.8]
|
||||||
|
},
|
||||||
|
"gui": {
|
||||||
|
"rotation": [15, 150, 0],
|
||||||
|
"translation": [-0.25, 0.5, 0],
|
||||||
|
"scale": [0.8, 0.8, 0.8]
|
||||||
|
},
|
||||||
|
"head": {
|
||||||
|
"translation": [11, 0.75, -2.25]
|
||||||
|
},
|
||||||
|
"fixed": {
|
||||||
|
"translation": [0, 0, -3.5]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
"parent": "extendedae_plus:block/xbai"
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 2.7 KiB |
|
After Width: | Height: | Size: 904 B |
|
After Width: | Height: | Size: 3.3 KiB |
|
After Width: | Height: | Size: 439 B |
|
After Width: | Height: | Size: 2.8 KiB |
|
After Width: | Height: | Size: 3.8 KiB |
|
|
@ -0,0 +1,19 @@
|
||||||
|
{
|
||||||
|
"type": "minecraft:block",
|
||||||
|
"pools": [
|
||||||
|
{
|
||||||
|
"rolls": 1,
|
||||||
|
"entries": [
|
||||||
|
{
|
||||||
|
"type": "minecraft:item",
|
||||||
|
"name": "extendedae_plus:_feng"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"conditions": [
|
||||||
|
{
|
||||||
|
"condition": "minecraft:survives_explosion"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,19 @@
|
||||||
|
{
|
||||||
|
"type": "minecraft:block",
|
||||||
|
"pools": [
|
||||||
|
{
|
||||||
|
"rolls": 1,
|
||||||
|
"entries": [
|
||||||
|
{
|
||||||
|
"type": "minecraft:item",
|
||||||
|
"name": "extendedae_plus:c-h716"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"conditions": [
|
||||||
|
{
|
||||||
|
"condition": "minecraft:survives_explosion"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,19 @@
|
||||||
|
{
|
||||||
|
"type": "minecraft:block",
|
||||||
|
"pools": [
|
||||||
|
{
|
||||||
|
"rolls": 1,
|
||||||
|
"entries": [
|
||||||
|
{
|
||||||
|
"type": "minecraft:item",
|
||||||
|
"name": "extendedae_plus:fish_dan_"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"conditions": [
|
||||||
|
{
|
||||||
|
"condition": "minecraft:survives_explosion"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,19 @@
|
||||||
|
{
|
||||||
|
"type": "minecraft:block",
|
||||||
|
"pools": [
|
||||||
|
{
|
||||||
|
"rolls": 1,
|
||||||
|
"entries": [
|
||||||
|
{
|
||||||
|
"type": "minecraft:item",
|
||||||
|
"name": "extendedae_plus:xbai"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"conditions": [
|
||||||
|
{
|
||||||
|
"condition": "minecraft:survives_explosion"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||