11package gregtech .common .metatileentities .multi .multiblockpart ;
22
3- import gregtech .api .GTValues ;
43import gregtech .api .capability .IMufflerHatch ;
5- import gregtech .api .items .itemhandlers .GTItemStackHandler ;
64import gregtech .api .metatileentity .ITieredMetaTileEntity ;
75import gregtech .api .metatileentity .MetaTileEntity ;
86import gregtech .api .metatileentity .interfaces .IGregTechTileEntity ;
97import gregtech .api .metatileentity .multiblock .*;
10- import gregtech .api .mui .GTGuis ;
11- import gregtech .api .util .GTTransferUtils ;
128import gregtech .api .util .GTUtility ;
139import gregtech .client .particle .VanillaParticleEffects ;
1410import gregtech .client .renderer .texture .Textures ;
1713import net .minecraft .block .state .IBlockState ;
1814import net .minecraft .client .resources .I18n ;
1915import net .minecraft .item .ItemStack ;
20- import net .minecraft .nbt .NBTTagCompound ;
2116import net .minecraft .util .ResourceLocation ;
2217import net .minecraft .util .math .BlockPos ;
2318import net .minecraft .world .World ;
2419
2520import codechicken .lib .render .CCRenderState ;
2621import codechicken .lib .render .pipeline .IVertexOperation ;
2722import codechicken .lib .vec .Matrix4 ;
28- import com .cleanroommc .modularui .api .drawable .IKey ;
29- import com .cleanroommc .modularui .api .widget .IWidget ;
30- import com .cleanroommc .modularui .factory .PosGuiData ;
31- import com .cleanroommc .modularui .screen .ModularPanel ;
32- import com .cleanroommc .modularui .value .sync .PanelSyncManager ;
33- import com .cleanroommc .modularui .value .sync .SyncHandlers ;
34- import com .cleanroommc .modularui .widgets .ItemSlot ;
35- import com .cleanroommc .modularui .widgets .SlotGroupWidget ;
36- import com .cleanroommc .modularui .widgets .layout .Grid ;
3723import org .jetbrains .annotations .NotNull ;
3824import org .jetbrains .annotations .Nullable ;
3925
40- import java .util .ArrayList ;
4126import java .util .List ;
4227
4328public class MetaTileEntityMufflerHatch extends MetaTileEntityMultiblockPart implements
4429 IMultiblockAbilityPart <IMufflerHatch >, ITieredMetaTileEntity , IMufflerHatch {
4530
46- private final int recoveryChance ;
47- private final GTItemStackHandler inventory ;
48-
4931 private boolean frontFaceFree ;
5032
5133 public MetaTileEntityMufflerHatch (ResourceLocation metaTileEntityId , int tier ) {
5234 super (metaTileEntityId , tier );
53- this .recoveryChance = (int ) Math .ceil ((tier - 1.0f ) / 8 * 100 );
54- this .inventory = new GTItemStackHandler (this , (int ) Math .pow (tier + 1 , 2 ));
55- this .frontFaceFree = false ;
5635 }
5736
5837 @ Override
@@ -63,49 +42,29 @@ public MetaTileEntity createMetaTileEntity(IGregTechTileEntity tileEntity) {
6342 @ Override
6443 public void update () {
6544 super .update ();
66-
67- if (!getWorld ().isRemote ) {
68- if (getOffsetTimer () % 10 == 0 )
69- this .frontFaceFree = checkFrontFaceFree ();
70- }
71-
72- if (getWorld ().isRemote && getController () instanceof MultiblockWithDisplayBase controller &&
73- controller .isActive ()) {
74- VanillaParticleEffects .mufflerEffect (this , controller .getMufflerParticle ());
75- }
76- }
77-
78- @ Override
79- public void clearMachineInventory (@ NotNull List <@ NotNull ItemStack > itemBuffer ) {
80- clearInventory (itemBuffer , inventory );
81- }
82-
83- public void recoverItemsTable (List <ItemStack > recoveryItems ) {
84- for (ItemStack recoveryItem : recoveryItems ) {
85- if (calculateChance ()) {
86- GTTransferUtils .insertItem (inventory , recoveryItem .copy (), false );
45+ if (getWorld ().isRemote ) {
46+ if (getController () instanceof MultiblockWithDisplayBase controller && controller .isActive ()) {
47+ VanillaParticleEffects .mufflerEffect (this , controller .getMufflerParticle ());
8748 }
49+ } else if (getOffsetTimer () % 10 == 0 ) {
50+ this .frontFaceFree = checkFrontFaceFree ();
8851 }
8952 }
9053
91- private boolean calculateChance () {
92- return recoveryChance >= 100 || recoveryChance > GTValues .RNG .nextInt (100 );
93- }
94-
9554 /**
9655 * @return true if front face is free and contains only air blocks in 1x1 area
9756 */
57+ @ Override
9858 public boolean isFrontFaceFree () {
9959 return frontFaceFree ;
10060 }
10161
10262 private boolean checkFrontFaceFree () {
10363 BlockPos frontPos = getPos ().offset (getFrontFacing ());
10464 IBlockState blockState = getWorld ().getBlockState (frontPos );
105- MultiblockWithDisplayBase controller = (MultiblockWithDisplayBase ) getController ();
10665
10766 // break a snow layer if it exists, and if this machine is running
108- if (controller != null && controller .isActive ()) {
67+ if (getController () instanceof MultiblockWithDisplayBase controller && controller .isActive ()) {
10968 if (GTUtility .tryBreakSnow (getWorld (), frontPos , blockState , true )) {
11069 return true ;
11170 }
@@ -117,15 +76,15 @@ private boolean checkFrontFaceFree() {
11776 @ Override
11877 public void renderMetaTileEntity (CCRenderState renderState , Matrix4 translation , IVertexOperation [] pipeline ) {
11978 super .renderMetaTileEntity (renderState , translation , pipeline );
120- if (shouldRenderOverlay ())
79+ if (shouldRenderOverlay ()) {
12180 Textures .MUFFLER_OVERLAY .renderSided (getFrontFacing (), renderState , translation , pipeline );
81+ }
12282 }
12383
12484 @ Override
12585 public void addInformation (ItemStack stack , @ Nullable World player , List <String > tooltip , boolean advanced ) {
12686 super .addInformation (stack , player , tooltip , advanced );
12787 tooltip .add (I18n .format ("gregtech.machine.muffler_hatch.tooltip1" ));
128- tooltip .add (I18n .format ("gregtech.muffler.recovery_tooltip" , recoveryChance ));
12988 tooltip .add (I18n .format ("gregtech.universal.enabled" ));
13089 tooltip .add (TooltipHelper .BLINKING_RED + I18n .format ("gregtech.machine.muffler_hatch.tooltip2" ));
13190 }
@@ -148,50 +107,7 @@ public void registerAbilities(@NotNull AbilityInstances abilityInstances) {
148107 }
149108
150109 @ Override
151- public boolean usesMui2 () {
152- return true ;
153- }
154-
155- @ Override
156- public ModularPanel buildUI (PosGuiData guiData , PanelSyncManager guiSyncManager ) {
157- int rowSize = (int ) Math .sqrt (this .inventory .getSlots ());
158- int xOffset = rowSize == 10 ? 9 : 0 ;
159-
160- guiSyncManager .registerSlotGroup ("item_inv" , rowSize );
161-
162- List <List <IWidget >> widgets = new ArrayList <>();
163- for (int y = 0 ; y < rowSize ; y ++) {
164- widgets .add (new ArrayList <>());
165- for (int x = 0 ; x < rowSize ; x ++) {
166- int index = y * rowSize + x ;
167- widgets .get (y ).add (new ItemSlot ().slot (SyncHandlers .itemSlot (this .inventory , index )
168- .slotGroup ("item_inv" )
169- .accessibility (false , true )));
170- }
171- }
172-
173- // TODO: Change the position of the name when it's standardized.
174- return GTGuis .createPanel (this , 176 + xOffset * 2 , 18 + 18 * rowSize + 94 )
175- .child (IKey .lang (getMetaFullName ()).asWidget ().pos (5 , 5 ))
176- .child (SlotGroupWidget .playerInventory ().left (7 ).bottom (7 ))
177- .child (new Grid ()
178- .top (18 ).height (rowSize * 18 )
179- .minElementMargin (0 , 0 )
180- .minColWidth (18 ).minRowHeight (18 )
181- .alignX (0.5f )
182- .matrix (widgets ));
183- }
184-
185- @ Override
186- public NBTTagCompound writeToNBT (NBTTagCompound data ) {
187- super .writeToNBT (data );
188- data .setTag ("RecoveryInventory" , inventory .serializeNBT ());
189- return data ;
190- }
191-
192- @ Override
193- public void readFromNBT (NBTTagCompound data ) {
194- super .readFromNBT (data );
195- this .inventory .deserializeNBT (data .getCompoundTag ("RecoveryInventory" ));
110+ protected boolean openGUIOnRightClick () {
111+ return false ;
196112 }
197113}
0 commit comments