Merge remote-tracking branch 'origin/master' into fabric-1.16

# Conflicts:
#	src/api/java/appeng/api/parts/IPart.java
#	src/main/java/appeng/block/AEBaseBlockItemChargeable.java
#	src/main/java/appeng/block/qnb/QnbFormedModel.java
#	src/main/java/appeng/bootstrap/BlockDefinitionBuilder.java
#	src/main/java/appeng/bootstrap/ItemDefinitionBuilder.java
#	src/main/java/appeng/client/render/BakedModelUnwrapper.java
#	src/main/java/appeng/client/render/BasicUnbakedModel.java
#	src/main/java/appeng/client/render/FacadeItemModel.java
#	src/main/java/appeng/client/render/cablebus/CableBusModel.java
#	src/main/java/appeng/client/render/cablebus/P2PTunnelFrequencyModel.java
#	src/main/java/appeng/client/render/crafting/CraftingCubeModel.java
#	src/main/java/appeng/client/render/model/AutoRotatingBakedModel.java
#	src/main/java/appeng/client/render/model/BiometricCardModel.java
#	src/main/java/appeng/client/render/model/ColorApplicatorModel.java
#	src/main/java/appeng/client/render/model/DriveBakedModel.java
#	src/main/java/appeng/client/render/model/DriveModel.java
#	src/main/java/appeng/client/render/model/GlassModel.java
#	src/main/java/appeng/client/render/model/MemoryCardModel.java
#	src/main/java/appeng/client/render/model/SkyCompassModel.java
#	src/main/java/appeng/client/render/spatial/SpatialPylonModel.java
#	src/main/java/appeng/client/render/tesr/ChestTileEntityRenderer.java
#	src/main/java/appeng/core/AERecipeType.java
#	src/main/java/appeng/core/AppEng.java
#	src/main/java/appeng/core/Registration.java
#	src/main/java/appeng/core/api/client/ApiCellModelRegistry.java
#	src/main/java/appeng/core/api/definitions/ApiItems.java
#	src/main/java/appeng/fluids/helper/DualityFluidInterface.java
#	src/main/java/appeng/items/misc/CrystalSeedItem.java
#	src/main/java/appeng/items/tools/powered/ColorApplicatorItem.java
#	src/main/java/appeng/parts/automation/PlaneModel.java
#	src/main/java/appeng/recipes/handlers/GrinderRecipe.java
#	src/main/java/appeng/recipes/handlers/GrinderRecipeSerializer.java
#	src/main/java/appeng/recipes/handlers/InscriberRecipe.java
#	src/main/java/appeng/recipes/handlers/InscriberRecipeSerializer.java
#	src/main/java/appeng/spatial/SpatialDimensionManager.java
#	src/main/java/appeng/tile/networking/CableBusBlockEntity.java
#	src/main/java/appeng/tile/storage/SkyChestBlockEntity.java
This commit is contained in:
Sebastian Hartte
2020-08-02 14:37:29 +02:00
15 changed files with 126 additions and 98 deletions
@@ -23,14 +23,12 @@ import java.util.List;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.fabricmc.fabric.api.object.builder.v1.client.model.FabricModelPredicateProviderRegistry;
import net.minecraft.block.Block;
import net.minecraft.client.item.TooltipContext;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.text.Text;
import net.minecraft.text.TranslatableText;
import net.minecraft.util.Identifier;
import net.minecraft.world.World;
import appeng.api.config.AccessRestriction;
@@ -39,21 +37,12 @@ import appeng.api.config.PowerUnits;
import appeng.api.definitions.IBlockDefinition;
import appeng.api.implementations.items.IAEItemPowerStorage;
import appeng.core.Api;
import appeng.core.AppEng;
import appeng.core.localization.GuiText;
public class AEBaseBlockItemChargeable extends AEBaseBlockItem implements IAEItemPowerStorage {
public AEBaseBlockItemChargeable(Block id, Settings props) {
super(id, props);
FabricModelPredicateProviderRegistry.register(this, new Identifier(AppEng.MOD_ID, "fill_level"),
(is, world, entity) -> {
double curPower = getAECurrentPower(is);
double maxPower = getAEMaxPower(is);
return (int) Math.round(100 * curPower / maxPower);
});
}
@Override
@@ -29,6 +29,7 @@ import javax.annotation.Nullable;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.fabricmc.fabric.api.object.builder.v1.client.model.FabricModelPredicateProviderRegistry;
import net.minecraft.block.Block;
import net.minecraft.item.BlockItem;
import net.minecraft.item.Item;
@@ -40,7 +41,9 @@ import appeng.api.definitions.IBlockDefinition;
import appeng.api.features.AEFeature;
import appeng.block.AEBaseBlock;
import appeng.block.AEBaseBlockItem;
import appeng.block.AEBaseBlockItemChargeable;
import appeng.block.AEBaseTileBlock;
import appeng.bootstrap.components.IClientSetupComponent;
import appeng.bootstrap.definitions.TileEntityDefinition;
import appeng.core.AppEng;
import appeng.core.CreativeTab;
@@ -149,6 +152,24 @@ class BlockDefinitionBuilder implements IBlockBuilder {
Registry.register(Registry.ITEM, id, item);
}
// Register the client-only item model property for chargeable items
if (item instanceof AEBaseBlockItemChargeable) {
AEBaseBlockItemChargeable chargeable = (AEBaseBlockItemChargeable) item;
this.factory.addBootstrapComponent(new IClientSetupComponent() {
@Override
@Environment(EnvType.CLIENT)
public void setup() {
FabricModelPredicateProviderRegistry.register(item, AppEng.makeId("fill_level"),
(is, world, entity) -> {
double curPower = chargeable.getAECurrentPower(is);
double maxPower = chargeable.getAEMaxPower(is);
return (int) Math.round(100 * curPower / maxPower);
});
}
});
}
// Register all extra handlers
this.bootstrapComponents.forEach(component -> this.factory.addBootstrapComponent(component.apply(block, item)));
@@ -3,8 +3,7 @@ package appeng.bootstrap.components;
import appeng.bootstrap.IBootstrapComponent;
/**
* Will be run during
* {@link net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent}.
* Will be run on the client-side only.
*/
public interface IClientSetupComponent extends IBootstrapComponent {
@@ -1,18 +0,0 @@
package appeng.core;
import net.minecraft.recipe.Recipe;
import net.minecraft.recipe.RecipeType;
import net.minecraft.util.Identifier;
public class AERecipeType<T extends Recipe<?>> implements RecipeType<T> {
private final String id;
public AERecipeType(Identifier registryName) {
this.id = registryName.toString();
}
@Override
public String toString() {
return id;
}
}
+2 -15
View File
@@ -31,8 +31,6 @@ import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.recipe.Recipe;
import net.minecraft.recipe.RecipeType;
import net.minecraft.screen.ScreenHandlerType;
import net.minecraft.tag.BlockTags;
import net.minecraft.util.Identifier;
@@ -181,7 +179,6 @@ public abstract class AppEngBase implements AppEng {
registerScreenHandlerTypes();
registerParticleTypes();
registerRecipeTypes();
registerRecipeSerializers();
registerWorldGen();
registerServerCommands();
@@ -400,21 +397,11 @@ public abstract class AppEngBase implements AppEng {
ITileEntityRegistrationComponent::register);
}
private static <T extends Recipe<?>> RecipeType<T> registerRecipeType(String id) {
Identifier fullId = AppEng.makeId(id);
return Registry.register(Registry.RECIPE_TYPE, fullId, new AERecipeType<>(fullId));
}
private void registerRecipeTypes() {
GrinderRecipe.TYPE = registerRecipeType("grinder");
InscriberRecipe.TYPE = registerRecipeType("inscriber");
}
private void registerRecipeSerializers() {
Registry.register(Registry.RECIPE_SERIALIZER, AppEng.makeId("quartz_knife"),
QuartzKnifeRecipeSerializer.INSTANCE);
Registry.register(Registry.RECIPE_SERIALIZER, AppEng.makeId("grinder"), GrinderRecipeSerializer.INSTANCE);
Registry.register(Registry.RECIPE_SERIALIZER, AppEng.makeId("inscriber"), InscriberRecipeSerializer.INSTANCE);
Registry.register(Registry.RECIPE_SERIALIZER, GrinderRecipe.TYPE_ID, GrinderRecipeSerializer.INSTANCE);
Registry.register(Registry.RECIPE_SERIALIZER, InscriberRecipe.TYPE_ID, InscriberRecipeSerializer.INSTANCE);
Registry.register(Registry.RECIPE_SERIALIZER, AppEng.makeId("disassemble"), DisassembleRecipe.SERIALIZER);
FacadeItem facadeItem = (FacadeItem) Api.INSTANCE.definitions().items().facade().item();
Registry.register(Registry.RECIPE_SERIALIZER, AppEng.makeId("facade"), FacadeRecipe.getSerializer(facadeItem));
@@ -1,8 +1,9 @@
package appeng.core;
import appeng.server.AppEngServer;
import net.fabricmc.api.DedicatedServerModInitializer;
import appeng.server.AppEngServer;
@SuppressWarnings("unused")
public class AppEngServerStartup implements DedicatedServerModInitializer {
@Override
@@ -22,6 +22,7 @@ import java.util.function.Consumer;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.fabricmc.fabric.api.object.builder.v1.client.model.FabricModelPredicateProviderRegistry;
import net.minecraft.entity.EntityDimensions;
import net.minecraft.entity.SpawnGroup;
import net.minecraft.item.Item;
@@ -35,6 +36,8 @@ import appeng.api.util.AEColoredItemDefinition;
import appeng.bootstrap.FeatureFactory;
import appeng.bootstrap.IItemRendering;
import appeng.bootstrap.ItemRenderingCustomizer;
import appeng.bootstrap.components.IClientSetupComponent;
import appeng.core.AppEng;
import appeng.core.features.ActivityState;
import appeng.core.features.ColoredItemDefinition;
import appeng.core.features.ItemStackSrc;
@@ -62,8 +65,20 @@ import appeng.items.storage.ViewCellItem;
import appeng.items.tools.BiometricCardItem;
import appeng.items.tools.MemoryCardItem;
import appeng.items.tools.NetworkToolItem;
import appeng.items.tools.powered.*;
import appeng.items.tools.quartz.*;
import appeng.items.tools.powered.ChargedStaffItem;
import appeng.items.tools.powered.ColorApplicatorItem;
import appeng.items.tools.powered.ColorApplicatorItemRendering;
import appeng.items.tools.powered.EntropyManipulatorItem;
import appeng.items.tools.powered.MatterCannonItem;
import appeng.items.tools.powered.PortableCellItem;
import appeng.items.tools.powered.WirelessTerminalItem;
import appeng.items.tools.quartz.QuartzAxeItem;
import appeng.items.tools.quartz.QuartzCuttingKnifeItem;
import appeng.items.tools.quartz.QuartzHoeItem;
import appeng.items.tools.quartz.QuartzPickaxeItem;
import appeng.items.tools.quartz.QuartzSpadeItem;
import appeng.items.tools.quartz.QuartzSwordItem;
import appeng.items.tools.quartz.QuartzWrenchItem;
/**
* Internal implementation for the API items
@@ -198,7 +213,22 @@ public final class ApiItems implements IItems {
.addFeatures(AEFeature.PORTABLE_CELL, AEFeature.STORAGE_CELLS).build();
this.colorApplicator = powerTools.item("color_applicator", ColorApplicatorItem::new).props(chargedDefaults)
.addFeatures(AEFeature.COLOR_APPLICATOR).dispenserBehavior(BlockToolDispenseItemBehavior::new)
.rendering(new ColorApplicatorItemRendering()).build();
.bootstrap(item -> new IClientSetupComponent() {
@Override
@Environment(EnvType.CLIENT)
public void setup() {
ColorApplicatorItem colorApplicatorItem = (ColorApplicatorItem) item;
FabricModelPredicateProviderRegistry.register(item, AppEng.makeId("colored"),
(itemStack, world, entity) -> {
// If the stack has no color, don't use the colored model since the impact of
// calling getColor for every quad is extremely high, if the stack tries to
// re-search its
// inventory for a new paintball everytime
AEColor col = colorApplicatorItem.getActiveColor(itemStack);
return (col != null) ? 1 : 0;
});
}
}).rendering(new ColorApplicatorItemRendering()).build();
this.biometricCard = registry.item("biometric_card", BiometricCardItem::new).props(props -> props.maxCount(1))
.features(AEFeature.SECURITY).build();
@@ -273,7 +303,16 @@ public final class ApiItems implements IItems {
this.certusCrystalSeed = registry
.item("certus_crystal_seed",
props -> new CrystalSeedItem(props, materials.purifiedCertusQuartzCrystal().item()))
.features(AEFeature.CRYSTAL_SEEDS).build();
.bootstrap(item -> new IClientSetupComponent() {
@Override
@Environment(EnvType.CLIENT)
public void setup() {
// Expose the growth of the seed to the model system
FabricModelPredicateProviderRegistry.register(item, AppEng.makeId("growth"),
(is, w, p) -> CrystalSeedItem.getGrowthTicks(is)
/ (float) CrystalSeedItem.GROWTH_TICKS_REQUIRED);
}
}).features(AEFeature.CRYSTAL_SEEDS).build();
this.fluixCrystalSeed = registry
.item("fluix_crystal_seed",
props -> new CrystalSeedItem(props, materials.purifiedFluixCrystal().item()))
@@ -26,26 +26,21 @@ import com.google.common.base.Preconditions;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.fabricmc.fabric.api.object.builder.v1.client.model.FabricModelPredicateProviderRegistry;
import net.minecraft.block.Block;
import net.minecraft.block.Material;
import net.minecraft.client.item.TooltipContext;
import net.minecraft.entity.Entity;
import net.minecraft.item.ItemConvertible;
import net.minecraft.item.ItemGroup;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.text.LiteralText;
import net.minecraft.text.Text;
import net.minecraft.util.Identifier;
import net.minecraft.util.collection.DefaultedList;
import net.minecraft.util.math.MathHelper;
import net.minecraft.world.World;
import appeng.api.implementations.items.IGrowableCrystal;
import appeng.core.AppEng;
import appeng.core.localization.ButtonToolTips;
import appeng.entity.GrowingCrystalEntity;
import appeng.items.AEBaseItem;
/**
@@ -62,7 +57,7 @@ public class CrystalSeedItem extends AEBaseItem implements IGrowableCrystal {
/**
* The number of growth ticks required to finish growing.
*/
private static final int GROWTH_TICKS_REQUIRED = 600;
public static final int GROWTH_TICKS_REQUIRED = 600;
/**
* The item to convert to, when growth finishes.
@@ -72,9 +67,6 @@ public class CrystalSeedItem extends AEBaseItem implements IGrowableCrystal {
public CrystalSeedItem(Settings properties, ItemConvertible grownItem) {
super(properties);
this.grownItem = Preconditions.checkNotNull(grownItem);
// Expose the growth of the seed to the model system
FabricModelPredicateProviderRegistry.register(this, new Identifier(AppEng.MOD_ID, "growth"),
(is, w, p) -> getGrowthTicks(is) / (float) GROWTH_TICKS_REQUIRED);
}
@Nullable
@@ -89,7 +81,7 @@ public class CrystalSeedItem extends AEBaseItem implements IGrowableCrystal {
}
}
private static int getGrowthTicks(final ItemStack is) {
public static int getGrowthTicks(final ItemStack is) {
CompoundTag tag = is.getTag();
return tag != null ? tag.getInt(TAG_GROWTH_TICKS) : 0;
}
@@ -18,7 +18,10 @@
package appeng.items.tools.powered;
import java.util.*;
import java.util.Comparator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import javax.annotation.Nullable;
@@ -26,7 +29,6 @@ import com.google.common.collect.ImmutableMap;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.fabricmc.fabric.api.object.builder.v1.client.model.FabricModelPredicateProviderRegistry;
import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.block.entity.BlockEntity;
@@ -67,7 +69,6 @@ import appeng.block.networking.CableBusBlock;
import appeng.block.paint.PaintSplotchesBlock;
import appeng.core.AEConfig;
import appeng.core.Api;
import appeng.core.AppEng;
import appeng.core.localization.GuiText;
import appeng.helpers.IMouseWheelItem;
import appeng.hooks.IBlockTool;
@@ -100,15 +101,6 @@ public class ColorApplicatorItem extends AEBasePoweredItem
public ColorApplicatorItem(Item.Settings props) {
super(AEConfig.instance().getColorApplicatorBattery(), props);
FabricModelPredicateProviderRegistry.register(this, new Identifier(AppEng.MOD_ID, "colored"),
(itemStack, world, entity) -> {
// If the stack has no color, don't use the colored model since the impact of
// calling getColor for every quad is extremely high, if the stack tries to
// re-search its
// inventory for a new paintball everytime
AEColor col = getActiveColor(itemStack);
return (col != null) ? 1 : 0;
});
}
@Override
@@ -12,6 +12,7 @@ import net.minecraft.util.registry.RegistryKey;
import net.minecraft.world.dimension.DimensionType;
import appeng.spatial.SpatialDimensionManager;
import appeng.spatial.StorageSkyProperties;
@Mixin(SkyProperties.class)
public class SkyPropertiesMixin {
@@ -20,7 +21,7 @@ public class SkyPropertiesMixin {
private static void byDimensionType(Optional<RegistryKey<DimensionType>> optional,
CallbackInfoReturnable<SkyProperties> ci) {
if (optional.orElse(null) == SpatialDimensionManager.STORAGE_DIMENSION_TYPE) {
ci.setReturnValue(SpatialDimensionManager.STORAGE_SKY);
ci.setReturnValue(StorageSkyProperties.INSTANCE);
}
}
@@ -14,9 +14,13 @@ import net.minecraft.util.Identifier;
import net.minecraft.util.collection.DefaultedList;
import net.minecraft.world.World;
import appeng.core.AppEng;
public class GrinderRecipe implements Recipe<Inventory> {
public static RecipeType<GrinderRecipe> TYPE;
public static final Identifier TYPE_ID = AppEng.makeId("grinder");
public static final RecipeType<GrinderRecipe> TYPE = RecipeType.register(TYPE_ID.toString());
private final Identifier id;
private final String group;
@@ -2,16 +2,22 @@ package appeng.recipes.handlers;
import net.minecraft.inventory.Inventory;
import net.minecraft.item.ItemStack;
import net.minecraft.recipe.*;
import net.minecraft.recipe.Ingredient;
import net.minecraft.recipe.Recipe;
import net.minecraft.recipe.RecipeSerializer;
import net.minecraft.recipe.RecipeType;
import net.minecraft.util.Identifier;
import net.minecraft.util.collection.DefaultedList;
import net.minecraft.world.World;
import appeng.api.features.InscriberProcessType;
import appeng.core.AppEng;
public class InscriberRecipe implements Recipe<Inventory> {
public static RecipeType<InscriberRecipe> TYPE;
public static final Identifier TYPE_ID = AppEng.makeId("inscriber");
public static final RecipeType<InscriberRecipe> TYPE = RecipeType.register(TYPE_ID.toString());
private final Identifier id;
private final String group;
@@ -23,13 +23,11 @@ import java.util.Locale;
import javax.annotation.Nullable;
import net.minecraft.client.render.SkyProperties;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.world.ServerWorld;
import net.minecraft.text.Text;
import net.minecraft.util.Identifier;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Vec3d;
import net.minecraft.util.registry.Registry;
import net.minecraft.util.registry.RegistryKey;
import net.minecraft.world.World;
@@ -51,25 +49,6 @@ public final class SpatialDimensionManager implements ISpatialDimension {
public static final RegistryKey<DimensionType> STORAGE_DIMENSION_TYPE = RegistryKey.of(Registry.DIMENSION_TYPE_KEY,
AppEng.makeId("storage_cell"));
public static final SkyProperties STORAGE_SKY = new SkyProperties(Float.NaN /* disables clouds */, false,
SkyProperties.SkyType.NONE /* we use a custom render mixin */, true, false) {
@Override
public Vec3d adjustSkyColor(Vec3d color, float sunHeight) {
return Vec3d.ZERO;
}
@Override
public boolean useThickFog(int camX, int camY) {
return false;
}
@Nullable
@Override
public float[] getSkyColor(float skyAngle, float tickDelta) {
return null;
}
};
public static final ISpatialDimension INSTANCE = new SpatialDimensionManager();
private static final String DIM_ID_PREFIX = "spatial_";
@@ -0,0 +1,33 @@
package appeng.spatial;
import javax.annotation.Nullable;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.client.render.SkyProperties;
import net.minecraft.util.math.Vec3d;
@Environment(EnvType.CLIENT)
public class StorageSkyProperties {
// See the fabric version of this to get any idea what its doing
public static final SkyProperties INSTANCE = new SkyProperties(Float.NaN /* disables clouds */, false,
SkyProperties.SkyType.NONE /* we use a custom render mixin */, true, false) {
@Override
public Vec3d adjustSkyColor(Vec3d color, float sunHeight) {
return Vec3d.ZERO;
}
@Override
public boolean useThickFog(int camX, int camY) {
return false;
}
@Nullable
@Override
public float[] getSkyColor(float skyAngle, float tickDelta) {
return null;
}
};
}
@@ -20,6 +20,8 @@ package appeng.tile.storage;
import java.io.IOException;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.EnvironmentInterface;
import net.minecraft.block.Block;
import net.minecraft.block.entity.BlockEntityType;
import net.minecraft.client.block.ChestAnimationProgress;
@@ -38,6 +40,7 @@ import appeng.tile.AEBaseInvBlockEntity;
import appeng.tile.inventory.AppEngInternalInventory;
import appeng.util.inv.InvOperation;
@EnvironmentInterface(value = EnvType.CLIENT, itf = ChestAnimationProgress.class)
public class SkyChestBlockEntity extends AEBaseInvBlockEntity implements Tickable, ChestAnimationProgress {
private final AppEngInternalInventory inv = new AppEngInternalInventory(this, 9 * 4);