diff options
author | Jakub <53441451+kuba6000@users.noreply.github.com> | 2022-12-15 16:53:12 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-12-15 16:53:12 +0100 |
commit | 8a581938862a4d612f510a8afed88727a34c3916 (patch) | |
tree | 0307ca87f3c06bbeda6d699aabbc2247b6f38efb /src/main/java/kubatech/loaders/block/KubaBlock.java | |
parent | 24a9953b153529191c855af0ae2d10f35844095f (diff) | |
download | GT5-Unofficial-8a581938862a4d612f510a8afed88727a34c3916.tar.gz GT5-Unofficial-8a581938862a4d612f510a8afed88727a34c3916.tar.bz2 GT5-Unofficial-8a581938862a4d612f510a8afed88727a34c3916.zip |
MODULAR UI (#34)
* MODULAR UUUUUUUUIIIIIIIIIII
* Tea
* Add recipe to ULTIMATE TEA
* Stupid MT Scripts. I hate it
* Yeet
* More TEA
* Add blocks
* More Modular UIs
* Textures
* Fix custom UI containers
* Texture, tooltip
* UI with tabs
* ButtonWidget
* fix
* Fix
* Texture
* Color is fixed
* More UI work
* Modular UI is hard dependency now
* Spotless
* Simplify
* Format numbers
* A
* Update TeaAcceptorTile.java
* Shadow is fixed, lets gooooo
* hardness
* Mixins mixins mixins
* Tab icons
* Fix crash
* Shop concept
* Bump ModularUI
* Bump Modular UI
* Nooooooooooo
* GREY -> GRAY
* Bump ModularUI
* Bump GT5
* EEC with MUI test
* Include incomplete structure
* REFLECTIONS !!
* Just use slot filter
* Update pos when needed
* Update GT_MetaTileEntity_ExtremeExterminationChamber.java
* Spawner status
* Nice toggle button
* Send messages
* Next toggle button
* Start work on IAADDS
* Scrollable inventory test
* Draw queen slots
* Fix
* Update dependencies.gradle
* Use sync widget
* Add button to enable/disable working
* Configuration in Mega Apiary
* Refactor a bit
* Update ModularUI
* Bump ModularUI
* Bump GT5
* Fix build
* Update dependencies.gradle
* Update build.gradle
* Update dependencies.gradle
* spotless
* Begin working on configuration window
* Update dependencies.gradle
* Deprecated
* Update dependencies.gradle
* Optimize bee storage rendering (2 fps -> 100 fps)
* Make Mega Apiary storage GUI usable
* Configuration window looks ok
* Color is fixed
* TC research
* Disable for now
* Finish tea command
* ok
* Fix
* Update en_US.lang
* ZzZ
* Stuff changed
Diffstat (limited to 'src/main/java/kubatech/loaders/block/KubaBlock.java')
-rw-r--r-- | src/main/java/kubatech/loaders/block/KubaBlock.java | 187 |
1 files changed, 187 insertions, 0 deletions
diff --git a/src/main/java/kubatech/loaders/block/KubaBlock.java b/src/main/java/kubatech/loaders/block/KubaBlock.java new file mode 100644 index 0000000000..dd34ce5883 --- /dev/null +++ b/src/main/java/kubatech/loaders/block/KubaBlock.java @@ -0,0 +1,187 @@ +package kubatech.loaders.block; + +import static kubatech.kubatech.KT; + +import com.gtnewhorizons.modularui.api.screen.ITileWithModularUI; +import com.gtnewhorizons.modularui.api.screen.ModularUIContext; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.builder.UIBuilder; +import com.gtnewhorizons.modularui.common.builder.UIInfo; +import com.gtnewhorizons.modularui.common.internal.wrapper.ModularGui; +import com.gtnewhorizons.modularui.common.internal.wrapper.ModularUIContainer; +import java.lang.ref.WeakReference; +import java.util.HashMap; +import java.util.List; +import java.util.function.Function; +import kubatech.loaders.BlockLoader; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.IIcon; +import net.minecraft.world.World; + +public class KubaBlock extends Block { + + public static final Function<IModularUIContainerCreator, UIInfo<?, ?>> TileEntityUIFactory = + containerConstructor -> UIBuilder.of() + .container((player, world, x, y, z) -> { + TileEntity te = world.getTileEntity(x, y, z); + if (te instanceof ITileWithModularUI) { + UIBuildContext buildContext = new UIBuildContext(player); + ModularWindow window = ((ITileWithModularUI) te).createWindow(buildContext); + return containerConstructor.createUIContainer( + new ModularUIContext(buildContext, te::markDirty), window); + } + return null; + }) + .gui(((player, world, x, y, z) -> { + if (!world.isRemote) return null; + TileEntity te = world.getTileEntity(x, y, z); + if (te instanceof ITileWithModularUI) { + UIBuildContext buildContext = new UIBuildContext(player); + ModularWindow window = ((ITileWithModularUI) te).createWindow(buildContext); + return new ModularGui(containerConstructor.createUIContainer( + new ModularUIContext(buildContext, null), window)); + } + return null; + })) + .build(); + + public static final UIInfo<?, ?> defaultTileEntityUI = TileEntityUIFactory.apply(ModularUIContainer::new); + + static final HashMap<Integer, BlockProxy> blocks = new HashMap<>(); + private static int idCounter = 0; + + public KubaBlock(Material p_i45394_1_) { + super(p_i45394_1_); + setCreativeTab(KT); + } + + public ItemStack registerProxyBlock(BlockProxy block) { + blocks.put(idCounter, block); + block.itemInit(idCounter); + return new ItemStack(BlockLoader.kubaItemBlock, 1, idCounter++); + } + + private BlockProxy getBlock(int id) { + return blocks.get(id); + } + + WeakReference<World> lastAccessor = null; + int X, Y, Z; + + public void setLastBlockAccess(World accessor, int x, int y, int z) { + lastAccessor = new WeakReference<>(accessor); + X = x; + Y = y; + Z = z; + } + + @Override + public boolean hasTileEntity(int meta) { + return getBlock(meta) instanceof IProxyTileEntityProvider; + } + + @SuppressWarnings("unchecked") + @Override + public void getSubBlocks(Item p_149666_1_, CreativeTabs p_149666_2_, List p_149666_3_) { + for (int i = 0; i < blocks.size(); i++) p_149666_3_.add(new ItemStack(p_149666_1_, 1, i)); + } + + @Override + public void registerBlockIcons(IIconRegister p_149651_1_) { + blocks.values().forEach(b -> b.registerIcon(p_149651_1_)); + } + + @Override + public IIcon getIcon(int p_149691_1_, int p_149691_2_) { + return blocks.get(p_149691_2_).getIcon(p_149691_1_); + } + + @Override + public String getLocalizedName() { + return "KUBABLOCK"; + } + + @Override + public TileEntity createTileEntity(World world, int metadata) { + if (!hasTileEntity(metadata)) return null; + return ((IProxyTileEntityProvider) getBlock(metadata)).createTileEntity(world); + } + + @Override + public boolean onBlockActivated( + World p_149727_1_, + int p_149727_2_, + int p_149727_3_, + int p_149727_4_, + EntityPlayer p_149727_5_, + int p_149727_6_, + float p_149727_7_, + float p_149727_8_, + float p_149727_9_) { + return getBlock(p_149727_1_.getBlockMetadata(p_149727_2_, p_149727_3_, p_149727_4_)) + .onActivated(p_149727_1_, p_149727_2_, p_149727_3_, p_149727_4_, p_149727_5_); + } + + @Override + public void onBlockPlacedBy( + World p_149689_1_, + int p_149689_2_, + int p_149689_3_, + int p_149689_4_, + EntityLivingBase p_149689_5_, + ItemStack p_149689_6_) { + getBlock(p_149689_6_.getItemDamage()) + .onBlockPlaced(p_149689_1_, p_149689_2_, p_149689_3_, p_149689_4_, p_149689_5_, p_149689_6_); + } + + @Override + public float getBlockHardness(World p_149712_1_, int p_149712_2_, int p_149712_3_, int p_149712_4_) { + return getBlock(p_149712_1_.getBlockMetadata(p_149712_2_, p_149712_3_, p_149712_4_)) + .getHardness(); + } + + @Override + public Material getMaterial() { + if (lastAccessor == null) return super.getMaterial(); + World world = lastAccessor.get(); + if (world == null) { + lastAccessor = null; + return super.getMaterial(); + } + if (world.getBlock(X, Y, Z) != this) return super.getMaterial(); + return getBlock(world.getBlockMetadata(X, Y, Z)).getMaterial(); + } + + @Override + public float getExplosionResistance( + Entity par1Entity, + World world, + int x, + int y, + int z, + double explosionX, + double explosionY, + double explosionZ) { + return getBlock(world.getBlockMetadata(x, y, z)).getResistance(); + } + + @FunctionalInterface + public interface IModularUIContainerCreator { + ModularUIContainer createUIContainer(ModularUIContext context, ModularWindow mainWindow); + } + + @FunctionalInterface + public interface IModularUIProvider { + UIInfo<?, ?> getUI(); + } +} |