mirror of
https://github.com/TicTicBoooom-Mods/MasterfulMachinery.git
synced 2026-03-18 21:40:34 +01:00
started on port blocks + rendering
This commit is contained in:
@@ -6,7 +6,7 @@ buildscript {
|
||||
maven { url "https://repo.spongepowered.org/maven/" }
|
||||
}
|
||||
dependencies {
|
||||
classpath group: 'net.minecraftforge.gradle', name: 'ForgeGradle', version: '4.1.+', changing: true
|
||||
classpath group: 'net.minecraftforge.gradle', name: 'ForgeGradle', version: '5.1.+', changing: true
|
||||
classpath 'org.spongepowered:mixingradle:0.7-SNAPSHOT'
|
||||
}
|
||||
}
|
||||
|
||||
2
gradle/wrapper/gradle-wrapper.properties
vendored
2
gradle/wrapper/gradle-wrapper.properties
vendored
@@ -1,5 +1,5 @@
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-6.8.1-bin.zip
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-7.1.1-bin.zip
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
package com.ticticboooom.mods.mm;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import com.mojang.datafixers.util.Pair;
|
||||
import com.ticticboooom.mods.mm.block.ter.model.ControllerBlockModel;
|
||||
import com.ticticboooom.mods.mm.block.ter.model.controller.ControllerBlockModel;
|
||||
import com.ticticboooom.mods.mm.block.ter.model.port.PortBlockModel;
|
||||
import com.ticticboooom.mods.mm.ports.PortTypeRegistry;
|
||||
import com.ticticboooom.mods.mm.ports.base.PortType;
|
||||
import com.ticticboooom.mods.mm.setup.MMBlocks;
|
||||
import com.ticticboooom.mods.mm.setup.MMItems;
|
||||
import com.ticticboooom.mods.mm.setup.MMTiles;
|
||||
@@ -11,24 +11,23 @@ import net.minecraft.client.renderer.BlockModelShapes;
|
||||
import net.minecraft.client.renderer.RenderType;
|
||||
import net.minecraft.client.renderer.RenderTypeLookup;
|
||||
import net.minecraft.client.renderer.model.ModelResourceLocation;
|
||||
import net.minecraft.client.renderer.texture.AtlasTexture;
|
||||
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
|
||||
import net.minecraft.client.resources.data.AnimationMetadataSection;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraftforge.client.event.ModelBakeEvent;
|
||||
import net.minecraftforge.client.event.ModelRegistryEvent;
|
||||
import net.minecraftforge.client.event.TextureStitchEvent;
|
||||
import net.minecraftforge.client.model.ModelLoader;
|
||||
import net.minecraftforge.client.model.MultiLayerModel;
|
||||
import net.minecraftforge.eventbus.api.IEventBus;
|
||||
import net.minecraftforge.fml.common.Mod;
|
||||
import net.minecraftforge.fml.common.thread.EffectiveSide;
|
||||
import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
|
||||
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
@Mod(Ref.MOD_ID)
|
||||
public class ModRoot {
|
||||
public ModRoot() {
|
||||
PortTypeRegistry.registerDefault();
|
||||
IEventBus bus = FMLJavaModLoadingContext.get().getModEventBus();
|
||||
MMTiles.TILES.register(bus);
|
||||
MMBlocks.BLOCKS.register(bus);
|
||||
@@ -45,22 +44,33 @@ public class ModRoot {
|
||||
public static void bake(ModelBakeEvent event) {
|
||||
MMBlocks.CONTROLLER.get().getStateContainer().getValidStates().forEach(blockState -> {
|
||||
ModelResourceLocation modelLocation = BlockModelShapes.getModelLocation(blockState);
|
||||
event.getModelRegistry().put(modelLocation, ControllerBlockModel.INSTANCE);
|
||||
event.getModelRegistry().put(modelLocation, new ControllerBlockModel());
|
||||
});
|
||||
event.getModelRegistry().put(new ModelResourceLocation(MMItems.CONTROLLER.getId(), "inventory"), ControllerBlockModel.INSTANCE);
|
||||
event.getModelRegistry().put(new ModelResourceLocation(MMItems.CONTROLLER.getId(), "inventory"), new ControllerBlockModel());
|
||||
MMBlocks.PORT.get().getStateContainer().getValidStates().forEach(b -> {
|
||||
ModelResourceLocation modelLocation = BlockModelShapes.getModelLocation(b);
|
||||
event.getModelRegistry().put(modelLocation, new PortBlockModel());
|
||||
});
|
||||
event.getModelRegistry().put(new ModelResourceLocation(MMItems.PORT.getId(), "inventory"), new PortBlockModel());
|
||||
}
|
||||
|
||||
public static void stitch(TextureStitchEvent.Pre event) {
|
||||
event.addSprite(Ref.res("block/controller_cutout"));
|
||||
for (Map.Entry<ResourceLocation, PortType> entry : PortTypeRegistry.PORT_TYPES.entrySet()) {
|
||||
event.addSprite(entry.getValue().getInputCutout());
|
||||
event.addSprite(entry.getValue().getOutputCutout());
|
||||
}
|
||||
}
|
||||
|
||||
public static void modelRegistry(ModelRegistryEvent event) {
|
||||
ModelLoader.addSpecialModel(MMBlocks.CONTROLLER.getId());
|
||||
ModelLoader.addSpecialModel(MMBlocks.PORT.getId());
|
||||
}
|
||||
|
||||
public static void clientSetup(FMLClientSetupEvent event) {
|
||||
event.enqueueWork(() -> {
|
||||
RenderTypeLookup.setRenderLayer(MMBlocks.CONTROLLER.get(), RenderType.getTranslucent());
|
||||
RenderTypeLookup.setRenderLayer(MMBlocks.PORT.get(), RenderType.getTranslucent());
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,5 +11,9 @@ public class Ref {
|
||||
|
||||
public static final ResourceLocation CONTROLLER_OVERLAY_MODEL = res("controller_model");
|
||||
|
||||
public static final class PortTypes {
|
||||
public static final ResourceLocation ITEM_TYPE = res("items");
|
||||
}
|
||||
|
||||
public static final ResourceLocation JEI_PLUGIN = res("jei");
|
||||
}
|
||||
|
||||
@@ -3,15 +3,31 @@ package com.ticticboooom.mods.mm.block;
|
||||
import com.ticticboooom.mods.mm.setup.MMTiles;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.block.DirectionalBlock;
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.item.BlockItemUseContext;
|
||||
import net.minecraft.state.StateContainer;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraft.world.IBlockReader;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
public class ControllerBlock extends Block {
|
||||
public class ControllerBlock extends DirectionalBlock {
|
||||
public ControllerBlock() {
|
||||
super(Properties.create(Material.IRON));
|
||||
setDefaultState(getDefaultState().with(FACING, Direction.NORTH));
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public BlockState getStateForPlacement(BlockItemUseContext context) {
|
||||
return super.getStateForPlacement(context).with(FACING, context.getPlacementHorizontalFacing().getOpposite());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void fillStateContainer(StateContainer.Builder<Block, BlockState> builder) {
|
||||
super.fillStateContainer(builder.add(DirectionalBlock.FACING));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
28
src/main/java/com/ticticboooom/mods/mm/block/PortBlock.java
Normal file
28
src/main/java/com/ticticboooom/mods/mm/block/PortBlock.java
Normal file
@@ -0,0 +1,28 @@
|
||||
package com.ticticboooom.mods.mm.block;
|
||||
|
||||
import com.ticticboooom.mods.mm.setup.MMTiles;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.world.IBlockReader;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
public class PortBlock extends Block {
|
||||
|
||||
public PortBlock() {
|
||||
super(Properties.create(Material.IRON));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasTileEntity(BlockState state) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public TileEntity createTileEntity(BlockState state, IBlockReader world) {
|
||||
return MMTiles.PORT.get().create();
|
||||
}
|
||||
}
|
||||
@@ -3,7 +3,7 @@ package com.ticticboooom.mods.mm.block.item;
|
||||
import com.ticticboooom.mods.mm.block.tile.ControllerTile;
|
||||
import com.ticticboooom.mods.mm.data.DataRegistry;
|
||||
import com.ticticboooom.mods.mm.setup.MMBlocks;
|
||||
import com.ticticboooom.mods.mm.util.ControllerHelper;
|
||||
import com.ticticboooom.mods.mm.util.TagHelper;
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.entity.player.PlayerEntity;
|
||||
import net.minecraft.item.BlockItem;
|
||||
@@ -20,9 +20,10 @@ public class ControllerBlockItem extends BlockItem {
|
||||
super(MMBlocks.CONTROLLER.get(), new Properties().group(MMItemGroup.INSTANCE));
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected boolean onBlockPlaced(BlockPos pos, World worldIn, @Nullable PlayerEntity player, ItemStack stack, BlockState state) {
|
||||
ResourceLocation loc = ControllerHelper.getId(stack);
|
||||
ResourceLocation loc = TagHelper.getControllerId(stack);
|
||||
if (loc == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ package com.ticticboooom.mods.mm.block.item;
|
||||
|
||||
import com.ticticboooom.mods.mm.data.DataRegistry;
|
||||
import com.ticticboooom.mods.mm.data.model.ControllerModel;
|
||||
import com.ticticboooom.mods.mm.data.model.PortModel;
|
||||
import com.ticticboooom.mods.mm.setup.MMItems;
|
||||
import net.minecraft.item.ItemGroup;
|
||||
import net.minecraft.item.ItemStack;
|
||||
@@ -10,6 +11,7 @@ import net.minecraft.nbt.CompoundNBT;
|
||||
import net.minecraft.util.NonNullList;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
|
||||
import javax.sound.sampled.Port;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Map;
|
||||
|
||||
@@ -21,7 +23,6 @@ public class MMItemGroup extends ItemGroup {
|
||||
super("masterfulmachinery");
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public ItemStack createIcon() {
|
||||
return new ItemStack(Items.ACACIA_PLANKS);
|
||||
@@ -41,6 +42,12 @@ public class MMItemGroup extends ItemGroup {
|
||||
tag.putString("Controller", entry.getValue().id.toString());
|
||||
controllers.add(stack);
|
||||
}
|
||||
for (Map.Entry<ResourceLocation, PortModel> entry : DataRegistry.PORTS.entrySet()) {
|
||||
ItemStack stack = new ItemStack(MMItems.PORT.get());
|
||||
CompoundNBT tag = stack.getOrCreateTag();
|
||||
tag.putString("Port", entry.getValue().id.toString());
|
||||
controllers.add(stack);
|
||||
}
|
||||
return controllers;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
package com.ticticboooom.mods.mm.block.item;
|
||||
|
||||
import com.ticticboooom.mods.mm.block.tile.PortTile;
|
||||
import com.ticticboooom.mods.mm.data.DataRegistry;
|
||||
import com.ticticboooom.mods.mm.setup.MMBlocks;
|
||||
import com.ticticboooom.mods.mm.util.TagHelper;
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.entity.player.PlayerEntity;
|
||||
import net.minecraft.item.BlockItem;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
public class PortBlockItem extends BlockItem {
|
||||
public PortBlockItem() {
|
||||
super(MMBlocks.PORT.get(), new Properties().group(MMItemGroup.INSTANCE));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean onBlockPlaced(BlockPos pos, World worldIn, @Nullable PlayerEntity player, ItemStack stack, BlockState state) {
|
||||
ResourceLocation loc = TagHelper.getPortId(stack);
|
||||
if (loc == null) {
|
||||
return false;
|
||||
}
|
||||
if (!DataRegistry.PORTS.containsKey(loc)){
|
||||
return false;
|
||||
}
|
||||
TileEntity tileEntity = worldIn.getTileEntity(pos);
|
||||
if (tileEntity instanceof PortTile) {
|
||||
PortTile controller = (PortTile) tileEntity;
|
||||
controller.portModel = DataRegistry.PORTS.get(loc);
|
||||
}
|
||||
return super.onBlockPlaced(pos, worldIn, player, stack, state);
|
||||
}
|
||||
}
|
||||
@@ -1,16 +1,17 @@
|
||||
package com.ticticboooom.mods.mm.block.ter.model;
|
||||
package com.ticticboooom.mods.mm.block.ter.model.controller;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import com.ticticboooom.mods.mm.Ref;
|
||||
import com.ticticboooom.mods.mm.data.model.ControllerModel;
|
||||
import com.ticticboooom.mods.mm.util.ModelTools;
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.block.DirectionalBlock;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.renderer.model.BakedQuad;
|
||||
import net.minecraft.client.renderer.model.IBakedModel;
|
||||
import net.minecraft.client.renderer.model.ItemOverrideList;
|
||||
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraft.util.math.vector.Vector3f;
|
||||
import net.minecraftforge.client.model.data.EmptyModelData;
|
||||
import net.minecraftforge.client.model.data.IDynamicBakedModel;
|
||||
import net.minecraftforge.client.model.data.IModelData;
|
||||
@@ -19,24 +20,24 @@ import net.minecraftforge.client.model.data.ModelProperty;
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.Random;
|
||||
|
||||
public class ControllerBlockModel implements IDynamicBakedModel {
|
||||
|
||||
public static final ModelProperty<ControllerModel> CONTROLLER = new ModelProperty<>();
|
||||
public static final ControllerBlockModel INSTANCE = new ControllerBlockModel();
|
||||
public static final ControllerItemOverrideList OVERRIDE_LIST = new ControllerItemOverrideList();
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public List<BakedQuad> getQuads(@Nullable BlockState state, @Nullable Direction side, @Nonnull Random rand, @Nonnull IModelData data) {
|
||||
List<BakedQuad> quads = getModel(data).getQuads(state, side, rand, data);
|
||||
if (side == Direction.NORTH) {
|
||||
if (data.hasProperty(CONTROLLER) && data.getData(CONTROLLER) != null && data.getData(CONTROLLER).showCutout) {
|
||||
quads.add(ModelTools.createQuad(Ref.res("block/controller_cutout"), new Vector3f(1, 1, 0), new Vector3f(1, 0, 0), new Vector3f(0, 0, 0), new Vector3f(0, 1, 0)));
|
||||
List<BakedQuad> quads = Lists.newArrayList(getModel(data).getQuads(state, side, rand, data));
|
||||
if (state != null && side == state.get(DirectionalBlock.FACING)) {
|
||||
if (data.hasProperty(CONTROLLER) && data.getData(CONTROLLER) != null && Objects.requireNonNull(data.getData(CONTROLLER)).showCutout) {
|
||||
quads.add(ModelTools.createQuad(Ref.res("block/controller_cutout"), side));
|
||||
}
|
||||
}
|
||||
return quads;
|
||||
return quads;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,10 +1,8 @@
|
||||
package com.ticticboooom.mods.mm.block.ter.model;
|
||||
package com.ticticboooom.mods.mm.block.ter.model.controller;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.ticticboooom.mods.mm.data.DataRegistry;
|
||||
import com.ticticboooom.mods.mm.data.model.ControllerModel;
|
||||
import net.minecraft.client.renderer.model.IBakedModel;
|
||||
import net.minecraft.client.renderer.model.ItemOverride;
|
||||
import net.minecraft.client.renderer.model.ItemOverrideList;
|
||||
import net.minecraft.client.world.ClientWorld;
|
||||
import net.minecraft.entity.LivingEntity;
|
||||
@@ -0,0 +1,95 @@
|
||||
package com.ticticboooom.mods.mm.block.ter.model.port;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import com.sun.org.apache.xpath.internal.operations.Bool;
|
||||
import com.ticticboooom.mods.mm.Ref;
|
||||
import com.ticticboooom.mods.mm.data.model.ControllerModel;
|
||||
import com.ticticboooom.mods.mm.data.model.PortModel;
|
||||
import com.ticticboooom.mods.mm.ports.PortTypeRegistry;
|
||||
import com.ticticboooom.mods.mm.ports.base.PortType;
|
||||
import com.ticticboooom.mods.mm.util.ModelTools;
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.renderer.model.BakedQuad;
|
||||
import net.minecraft.client.renderer.model.IBakedModel;
|
||||
import net.minecraft.client.renderer.model.ItemOverrideList;
|
||||
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraftforge.client.model.data.EmptyModelData;
|
||||
import net.minecraftforge.client.model.data.IDynamicBakedModel;
|
||||
import net.minecraftforge.client.model.data.IModelData;
|
||||
import net.minecraftforge.client.model.data.ModelProperty;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
|
||||
public class PortBlockModel implements IDynamicBakedModel {
|
||||
public static final ModelProperty<PortModel> PORT = new ModelProperty<>();
|
||||
public static final ModelProperty<Boolean> PORT_IO_TYPE = new ModelProperty<>();
|
||||
public static final PortItemOverrideList OVERRIDE_LIST = new PortItemOverrideList();
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public List<BakedQuad> getQuads(@Nullable BlockState state, @Nullable Direction side, @Nonnull Random rand, @Nonnull IModelData data) {
|
||||
List<BakedQuad> quads = Lists.newArrayList(getModel(data).getQuads(state, side, rand, data));
|
||||
PortModel port = data.getData(PORT);
|
||||
if (data.hasProperty(PORT) && port != null && side != Direction.UP && side != Direction.DOWN) {
|
||||
PortType portType = PortTypeRegistry.PORT_TYPES.get(port.type);
|
||||
if (data.hasProperty(PORT_IO_TYPE)) {
|
||||
Boolean isInput = data.getData(PORT_IO_TYPE);
|
||||
if (isInput != null && isInput) {
|
||||
quads.add(ModelTools.createQuad(portType.getInputCutout(), side));
|
||||
} else {
|
||||
quads.add(ModelTools.createQuad(portType.getOutputCutout(), side));
|
||||
}
|
||||
}
|
||||
}
|
||||
return quads;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAmbientOcclusion() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isGui3d() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isSideLit() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isBuiltInRenderer() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public TextureAtlasSprite getParticleTexture() {
|
||||
return getParticleTexture(EmptyModelData.INSTANCE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TextureAtlasSprite getParticleTexture(@Nonnull IModelData data) {
|
||||
return getModel(data).getParticleTexture(data);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemOverrideList getOverrides() {
|
||||
return OVERRIDE_LIST;
|
||||
}
|
||||
|
||||
private IBakedModel getModel(IModelData data) {
|
||||
if (!data.hasProperty(PORT) || data.getData(PORT) == null) {
|
||||
return Minecraft.getInstance().getModelManager().getMissingModel();
|
||||
}
|
||||
PortModel port = data.getData(PORT);
|
||||
IBakedModel model = port.defaultModel.getModel();
|
||||
return model;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,56 @@
|
||||
package com.ticticboooom.mods.mm.block.ter.model.port;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import com.ticticboooom.mods.mm.data.DataRegistry;
|
||||
import com.ticticboooom.mods.mm.data.model.ControllerModel;
|
||||
import com.ticticboooom.mods.mm.data.model.PortModel;
|
||||
import com.ticticboooom.mods.mm.ports.PortTypeRegistry;
|
||||
import com.ticticboooom.mods.mm.ports.base.PortType;
|
||||
import com.ticticboooom.mods.mm.util.ModelTools;
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.renderer.model.BakedQuad;
|
||||
import net.minecraft.client.renderer.model.IBakedModel;
|
||||
import net.minecraft.client.renderer.model.ItemOverrideList;
|
||||
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
|
||||
import net.minecraft.client.world.ClientWorld;
|
||||
import net.minecraft.entity.LivingEntity;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.CompoundNBT;
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraftforge.client.model.data.IDynamicBakedModel;
|
||||
import net.minecraftforge.client.model.data.IModelData;
|
||||
import net.minecraftforge.client.model.data.ModelProperty;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
|
||||
public class PortItemOverrideList extends ItemOverrideList {
|
||||
@Nullable
|
||||
@Override
|
||||
public IBakedModel getOverrideModel(IBakedModel model, ItemStack stack, @Nullable ClientWorld world, @Nullable LivingEntity livingEntity) {
|
||||
if (!stack.hasTag()) {
|
||||
return super.getOverrideModel(model, stack, world, livingEntity);
|
||||
}
|
||||
CompoundNBT tag = stack.getTag();
|
||||
if (!tag.contains("Port")){
|
||||
return super.getOverrideModel(model, stack, world, livingEntity);
|
||||
}
|
||||
|
||||
String controller = tag.getString("Port");
|
||||
ResourceLocation resourceLocation = ResourceLocation.tryCreate(controller);
|
||||
if (resourceLocation == null){
|
||||
return super.getOverrideModel(model, stack, world, livingEntity);
|
||||
}
|
||||
|
||||
if (!DataRegistry.PORTS.containsKey(resourceLocation)) {
|
||||
return super.getOverrideModel(model, stack, world, livingEntity);
|
||||
}
|
||||
|
||||
PortModel portModel = DataRegistry.PORTS.get(resourceLocation);
|
||||
return portModel.defaultModel.getModel();
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
package com.ticticboooom.mods.mm.block.tile;
|
||||
|
||||
import com.ticticboooom.mods.mm.block.ter.model.ControllerBlockModel;
|
||||
import com.ticticboooom.mods.mm.block.ter.model.controller.ControllerBlockModel;
|
||||
import com.ticticboooom.mods.mm.data.model.ControllerModel;
|
||||
import com.ticticboooom.mods.mm.setup.MMTiles;
|
||||
import net.minecraft.tileentity.ITickableTileEntity;
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
package com.ticticboooom.mods.mm.block.tile;
|
||||
|
||||
import com.ticticboooom.mods.mm.block.ter.model.port.PortBlockModel;
|
||||
import com.ticticboooom.mods.mm.data.model.PortModel;
|
||||
import com.ticticboooom.mods.mm.setup.MMTiles;
|
||||
import net.minecraft.tileentity.ITickableTileEntity;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraftforge.client.model.data.IModelData;
|
||||
import net.minecraftforge.client.model.data.ModelDataMap;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
|
||||
public class PortTile extends TileEntity implements ITickableTileEntity {
|
||||
public PortTile() {
|
||||
super(MMTiles.PORT.get());
|
||||
}
|
||||
|
||||
public PortModel portModel;
|
||||
public boolean isInput;
|
||||
|
||||
@Override
|
||||
public void tick() {
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public IModelData getModelData() {
|
||||
return new ModelDataMap.Builder()
|
||||
.withInitial(PortBlockModel.PORT, portModel)
|
||||
.withInitial(PortBlockModel.PORT_IO_TYPE, isInput)
|
||||
.build();
|
||||
}
|
||||
}
|
||||
@@ -1,10 +1,14 @@
|
||||
package com.ticticboooom.mods.mm.data.model;
|
||||
|
||||
import com.ticticboooom.mods.mm.data.model.base.BlockstateModel;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraft.util.text.ITextComponent;
|
||||
|
||||
public class PortModel {
|
||||
public ResourceLocation controllerId;
|
||||
public ResourceLocation type;
|
||||
public ResourceLocation id;
|
||||
public ITextComponent name;
|
||||
public BlockstateModel defaultModel;
|
||||
public boolean showCutout;
|
||||
}
|
||||
|
||||
@@ -20,11 +20,11 @@ public class BlockstateModel {
|
||||
public static final BlockstateModel DEFAULT = new BlockstateModel(Ref.res("base_block"));
|
||||
|
||||
public BlockstateModel(){
|
||||
|
||||
properties = new HashMap<>();
|
||||
}
|
||||
|
||||
public BlockstateModel(ResourceLocation block) {
|
||||
|
||||
properties = new HashMap<>();
|
||||
this.block = block;
|
||||
}
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@ import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonObject;
|
||||
import com.ticticboooom.mods.mm.data.DataRegistry;
|
||||
import com.ticticboooom.mods.mm.data.model.PortModel;
|
||||
import com.ticticboooom.mods.mm.data.model.base.BlockstateModel;
|
||||
import com.ticticboooom.mods.mm.data.util.ParserUtils;
|
||||
import net.minecraft.client.resources.JsonReloadListener;
|
||||
import net.minecraft.profiler.IProfiler;
|
||||
@@ -17,16 +18,16 @@ import net.minecraftforge.fml.common.Mod;
|
||||
import java.util.Map;
|
||||
|
||||
@Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.FORGE)
|
||||
public class PortConfigurationReloadListener extends JsonReloadListener {
|
||||
public class PortReloadListener extends JsonReloadListener {
|
||||
public static final Gson GSON = new Gson();
|
||||
|
||||
public PortConfigurationReloadListener() {
|
||||
public PortReloadListener() {
|
||||
super(GSON, "masterfulmachinery/ports");
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public static void on(AddReloadListenerEvent event) {
|
||||
event.addListener(new PortConfigurationReloadListener());
|
||||
event.addListener(new PortReloadListener());
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -39,8 +40,11 @@ public class PortConfigurationReloadListener extends JsonReloadListener {
|
||||
private PortModel parse(ResourceLocation res, JsonObject json) {
|
||||
PortModel model = new PortModel();
|
||||
model.id = res;
|
||||
model.type = ResourceLocation.tryCreate(json.get("type").getAsString());
|
||||
model.name = ParserUtils.parseTextComponent(json.get("name"));
|
||||
model.controllerId = ResourceLocation.tryCreate(json.get("controllerId").getAsString());
|
||||
model.defaultModel = ParserUtils.parseOrDefault(json, "defaultModel", (x) -> ParserUtils.parseBlockState(x.getAsJsonObject()), BlockstateModel.DEFAULT);
|
||||
model.showCutout = ParserUtils.parseOrDefault(json, "showCutout", JsonElement::getAsBoolean, true);
|
||||
return model;
|
||||
}
|
||||
}
|
||||
@@ -1,9 +1,6 @@
|
||||
package com.ticticboooom.mods.mm.integration.jei.ingredients.controller;
|
||||
|
||||
import com.ticticboooom.mods.mm.block.item.ControllerBlockItem;
|
||||
import com.ticticboooom.mods.mm.data.model.ControllerModel;
|
||||
import com.ticticboooom.mods.mm.util.ControllerHelper;
|
||||
import mezz.jei.api.ingredients.IIngredientType;
|
||||
import com.ticticboooom.mods.mm.util.TagHelper;
|
||||
import mezz.jei.api.ingredients.subtypes.IIngredientSubtypeInterpreter;
|
||||
import mezz.jei.api.ingredients.subtypes.UidContext;
|
||||
import net.minecraft.item.ItemStack;
|
||||
@@ -12,7 +9,7 @@ import net.minecraft.util.ResourceLocation;
|
||||
public class ControllerIngredientTypeInterpreter implements IIngredientSubtypeInterpreter<ItemStack> {
|
||||
@Override
|
||||
public String apply(ItemStack ingredient, UidContext context) {
|
||||
ResourceLocation id = ControllerHelper.getId(ingredient);
|
||||
ResourceLocation id = TagHelper.getControllerId(ingredient);
|
||||
if (id == null) {
|
||||
return NONE;
|
||||
}
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
package com.ticticboooom.mods.mm.ports;
|
||||
|
||||
import com.ticticboooom.mods.mm.Ref;
|
||||
import com.ticticboooom.mods.mm.ports.base.PortType;
|
||||
import com.ticticboooom.mods.mm.ports.items.ItemPortType;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
|
||||
import java.util.HashMap;
|
||||
@@ -10,6 +12,6 @@ public class PortTypeRegistry {
|
||||
public static final Map<ResourceLocation, PortType> PORT_TYPES = new HashMap<>();
|
||||
|
||||
public static void registerDefault() {
|
||||
|
||||
PORT_TYPES.put(Ref.PortTypes.ITEM_TYPE, new ItemPortType());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,15 +2,16 @@ package com.ticticboooom.mods.mm.ports.base;
|
||||
|
||||
import com.google.gson.JsonObject;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraftforge.registries.ForgeRegistryEntry;
|
||||
|
||||
import java.util.function.Supplier;
|
||||
|
||||
public abstract class PortType extends ForgeRegistryEntry<PortType> {
|
||||
private final Supplier<PortProcessor> inputProcessorSupplier;
|
||||
private final Supplier<PortProcessor> outputProcessorSupplier;
|
||||
private final PortProcessor inputProcessorSupplier;
|
||||
private final PortProcessor outputProcessorSupplier;
|
||||
|
||||
public PortType(Supplier<PortProcessor> inputProcessor, Supplier<PortProcessor> outputProcessor) {
|
||||
public PortType(PortProcessor inputProcessor, PortProcessor outputProcessor) {
|
||||
this.inputProcessorSupplier = inputProcessor;
|
||||
this.outputProcessorSupplier = outputProcessor;
|
||||
}
|
||||
@@ -19,4 +20,6 @@ public abstract class PortType extends ForgeRegistryEntry<PortType> {
|
||||
public TileEntity createTileEntity() {
|
||||
return null;
|
||||
}
|
||||
public abstract ResourceLocation getInputCutout();
|
||||
public abstract ResourceLocation getOutputCutout();
|
||||
}
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
package com.ticticboooom.mods.mm.ports.items;
|
||||
|
||||
import com.ticticboooom.mods.mm.ports.base.MachineRecipeContext;
|
||||
import com.ticticboooom.mods.mm.ports.base.PortProcessor;
|
||||
import com.ticticboooom.mods.mm.ports.base.PortStorage;
|
||||
|
||||
public class ItemPortInputProcessor extends PortProcessor {
|
||||
@Override
|
||||
public boolean canProcess(MachineRecipeContext ctx, PortStorage current) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean process(MachineRecipeContext ctx, PortStorage current) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package com.ticticboooom.mods.mm.ports.items;
|
||||
|
||||
import com.ticticboooom.mods.mm.ports.base.MachineRecipeContext;
|
||||
import com.ticticboooom.mods.mm.ports.base.PortProcessor;
|
||||
import com.ticticboooom.mods.mm.ports.base.PortStorage;
|
||||
|
||||
public class ItemPortOutputProcessor extends PortProcessor {
|
||||
@Override
|
||||
public boolean canProcess(MachineRecipeContext ctx, PortStorage current) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean process(MachineRecipeContext ctx, PortStorage current) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
package com.ticticboooom.mods.mm.ports.items;
|
||||
|
||||
import com.ticticboooom.mods.mm.ports.base.PortStorage;
|
||||
import net.minecraft.nbt.CompoundNBT;
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraftforge.common.capabilities.Capability;
|
||||
import net.minecraftforge.common.util.LazyOptional;
|
||||
|
||||
public class ItemPortStorage extends PortStorage {
|
||||
|
||||
|
||||
private final int rows;
|
||||
private final int columns;
|
||||
|
||||
public ItemPortStorage(int rows, int columns) {
|
||||
this.rows = rows;
|
||||
this.columns = columns;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public <T> LazyOptional<T> getLazyOptional(Capability<T> cap, Direction direction) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CompoundNBT save(CompoundNBT nbt) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void load(CompoundNBT nbt) {
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
package com.ticticboooom.mods.mm.ports.items;
|
||||
|
||||
import com.google.gson.JsonObject;
|
||||
import com.ticticboooom.mods.mm.Ref;
|
||||
import com.ticticboooom.mods.mm.ports.base.PortStorage;
|
||||
import com.ticticboooom.mods.mm.ports.base.PortType;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
|
||||
public class ItemPortType extends PortType {
|
||||
public ItemPortType() {
|
||||
super(new ItemPortInputProcessor(), new ItemPortOutputProcessor());
|
||||
}
|
||||
|
||||
@Override
|
||||
public PortStorage parseStorage(JsonObject data) {
|
||||
int rows = data.get("rows").getAsInt();
|
||||
int columns = data.get("columns").getAsInt();
|
||||
return new ItemPortStorage(rows, columns);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResourceLocation getInputCutout() {
|
||||
return Ref.res("block/base_ports/item_input_cutout");
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResourceLocation getOutputCutout() {
|
||||
return Ref.res("block/base_ports/item_output_cutout");
|
||||
}
|
||||
}
|
||||
@@ -2,6 +2,7 @@ package com.ticticboooom.mods.mm.setup;
|
||||
|
||||
import com.ticticboooom.mods.mm.Ref;
|
||||
import com.ticticboooom.mods.mm.block.ControllerBlock;
|
||||
import com.ticticboooom.mods.mm.block.PortBlock;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraftforge.fml.RegistryObject;
|
||||
import net.minecraftforge.registries.DeferredRegister;
|
||||
@@ -11,4 +12,5 @@ public class MMBlocks {
|
||||
public static final DeferredRegister<Block> BLOCKS = DeferredRegister.create(ForgeRegistries.BLOCKS, Ref.MOD_ID);
|
||||
|
||||
public static final RegistryObject<ControllerBlock> CONTROLLER = BLOCKS.register("controller", ControllerBlock::new);
|
||||
public static final RegistryObject<PortBlock> PORT = BLOCKS.register("port", PortBlock::new);
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ package com.ticticboooom.mods.mm.setup;
|
||||
import com.ticticboooom.mods.mm.Ref;
|
||||
import com.ticticboooom.mods.mm.block.ControllerBlock;
|
||||
import com.ticticboooom.mods.mm.block.item.ControllerBlockItem;
|
||||
import com.ticticboooom.mods.mm.block.item.PortBlockItem;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraftforge.fml.RegistryObject;
|
||||
@@ -13,4 +14,5 @@ public class MMItems {
|
||||
public static final DeferredRegister<Item> ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, Ref.MOD_ID);
|
||||
|
||||
public static final RegistryObject<ControllerBlockItem> CONTROLLER = ITEMS.register("controller", ControllerBlockItem::new);
|
||||
public static final RegistryObject<PortBlockItem> PORT = ITEMS.register("port", PortBlockItem::new);
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ package com.ticticboooom.mods.mm.setup;
|
||||
|
||||
import com.ticticboooom.mods.mm.Ref;
|
||||
import com.ticticboooom.mods.mm.block.tile.ControllerTile;
|
||||
import com.ticticboooom.mods.mm.block.tile.PortTile;
|
||||
import net.minecraft.tileentity.TileEntityType;
|
||||
import net.minecraftforge.fml.RegistryObject;
|
||||
import net.minecraftforge.registries.DeferredRegister;
|
||||
@@ -11,4 +12,5 @@ public class MMTiles {
|
||||
public static final DeferredRegister<TileEntityType<?>> TILES = DeferredRegister.create(ForgeRegistries.TILE_ENTITIES, Ref.MOD_ID);
|
||||
|
||||
public static final RegistryObject<TileEntityType<ControllerTile>> CONTROLLER = TILES.register("controller", () -> TileEntityType.Builder.create(ControllerTile::new, MMBlocks.CONTROLLER.get()).build(null));
|
||||
public static final RegistryObject<TileEntityType<PortTile>> PORT = TILES.register("port", () -> TileEntityType.Builder.create(PortTile::new, MMBlocks.PORT.get()).build(null));
|
||||
}
|
||||
|
||||
@@ -1,21 +0,0 @@
|
||||
package com.ticticboooom.mods.mm.util;
|
||||
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.CompoundNBT;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
|
||||
public class ControllerHelper {
|
||||
public static ResourceLocation getId(ItemStack stack) {
|
||||
if (!stack.hasTag()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
CompoundNBT nbt = stack.getTag();
|
||||
if (!nbt.contains("Controller")) {
|
||||
return null;
|
||||
}
|
||||
|
||||
String controller = nbt.getString("Controller");
|
||||
return ResourceLocation.tryCreate(controller);
|
||||
}
|
||||
}
|
||||
@@ -8,9 +8,10 @@ import net.minecraft.client.renderer.vertex.VertexFormatElement;
|
||||
import net.minecraft.inventory.container.PlayerContainer;
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraft.util.math.vector.Vector3f;
|
||||
import net.minecraft.util.math.vector.Vector4f;
|
||||
import net.minecraft.util.math.vector.*;
|
||||
import net.minecraftforge.client.model.QuadTransformer;
|
||||
import net.minecraftforge.client.model.pipeline.BakedQuadBuilder;
|
||||
import net.minecraftforge.common.model.TransformationHelper;
|
||||
|
||||
public class ModelTools {
|
||||
|
||||
@@ -52,7 +53,7 @@ public class ModelTools {
|
||||
}
|
||||
}
|
||||
|
||||
public static BakedQuad createQuad(ResourceLocation texture, Vector3f v1, Vector3f v2, Vector3f v3, Vector3f v4) {
|
||||
public static BakedQuad createQuad(ResourceLocation texture, Vector3f v1, Vector3f v2, Vector3f v3, Vector3f v4, Direction side) {
|
||||
Vector3f normal = v3.copy();
|
||||
normal.sub(v2);
|
||||
Vector3f tmp = v1.copy();
|
||||
@@ -67,9 +68,32 @@ public class ModelTools {
|
||||
BakedQuadBuilder b = new BakedQuadBuilder(sprite);
|
||||
putVertex(b, normal, new Vector4f(v1), 0, 0, sprite);
|
||||
putVertex(b, normal, new Vector4f(v2), 0, th, sprite);
|
||||
putVertex(b, normal, new Vector4f(v3), tw,th, sprite);
|
||||
putVertex(b, normal, new Vector4f(v3), tw, th, sprite);
|
||||
putVertex(b, normal, new Vector4f(v4), tw, 0, sprite);
|
||||
b.setQuadOrientation(Direction.NORTH);
|
||||
b.setQuadOrientation(side);
|
||||
return b.build();
|
||||
}
|
||||
|
||||
public static BakedQuad createQuad(ResourceLocation texture, Direction side) {
|
||||
if (side == Direction.NORTH){
|
||||
return createQuad(texture, new Vector3f(1, 1, 0), new Vector3f(1, 0, 0), new Vector3f(0, 0, 0), new Vector3f(0, 1, 0), side);
|
||||
}
|
||||
else if (side == Direction.SOUTH) {
|
||||
return createQuad(texture, new Vector3f(0, 1, 1), new Vector3f(0, 0, 1), new Vector3f(1, 0, 1), new Vector3f(1, 1, 1), side);
|
||||
}
|
||||
else if (side == Direction.WEST) {
|
||||
return createQuad(texture, new Vector3f(0, 1, 0), new Vector3f(0, 0, 0), new Vector3f(0, 0, 1), new Vector3f(0, 1, 1), side);
|
||||
}
|
||||
else if (side == Direction.EAST) {
|
||||
return createQuad(texture, new Vector3f(1, 1, 1), new Vector3f(1, 0, 1), new Vector3f(1, 0, 0), new Vector3f(1, 1, 0), side);
|
||||
}
|
||||
else if (side == Direction.UP) {
|
||||
return createQuad(texture, new Vector3f(0, 1, 0), new Vector3f(0, 1, 1), new Vector3f(1, 1, 0), new Vector3f(1, 1, 1), side);
|
||||
}
|
||||
else if (side == Direction.DOWN) {
|
||||
return createQuad(texture, new Vector3f(0, 0, 0), new Vector3f(0, 0, 1), new Vector3f(1, 0, 0), new Vector3f(1, 0, 1), side);
|
||||
}
|
||||
return createQuad(texture, new Vector3f(1, 1, 0), new Vector3f(1, 0, 0), new Vector3f(0, 0, 0), new Vector3f(0, 1, 0), side);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
31
src/main/java/com/ticticboooom/mods/mm/util/TagHelper.java
Normal file
31
src/main/java/com/ticticboooom/mods/mm/util/TagHelper.java
Normal file
@@ -0,0 +1,31 @@
|
||||
package com.ticticboooom.mods.mm.util;
|
||||
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.CompoundNBT;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
|
||||
public class TagHelper {
|
||||
public static ResourceLocation getControllerId(ItemStack stack) {
|
||||
return getRL(stack, "Controller");
|
||||
}
|
||||
|
||||
public static ResourceLocation getPortId(ItemStack stack) {
|
||||
return getRL(stack, "Port");
|
||||
}
|
||||
|
||||
public static ResourceLocation getRL(ItemStack stack, String key) {
|
||||
if (!stack.hasTag()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
CompoundNBT nbt = stack.getTag();
|
||||
if (!nbt.contains(key)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
String controller = nbt.getString(key);
|
||||
return ResourceLocation.tryCreate(controller);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"controllerId": "main",
|
||||
"name": "Main Items",
|
||||
"type": "masterfulmachinery:items",
|
||||
"defaultMode": {
|
||||
"block": "minecraft:sponge",
|
||||
"properties": {}
|
||||
}
|
||||
}
|
||||
@@ -1,2 +1,2 @@
|
||||
#Mon Jan 17 07:14:22 GMT 2022
|
||||
VERSION_CODE=1096
|
||||
#Mon Feb 07 20:37:00 GMT 2022
|
||||
VERSION_CODE=1300
|
||||
|
||||
Reference in New Issue
Block a user