Jump to content

TE hasn't been registered


dyno

Recommended Posts

I cannot understand what i am doing wrong.

It seems like forge never register TE: I tried to use an item to know if its TE has been registered. It says that it hasn't any TE

 

Block:

package com.olivemod.blocks.machine.energy_cell.copper;

import com.olivemod.utils.ModTileEntityTypes;
import com.olivemod.utils.Reference.NBTKeys;
import com.olivemod.utils.Reference.Reference;

import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.block.ContainerBlock;
import net.minecraft.block.RedstoneTorchBlock;
import net.minecraft.block.material.Material;
import net.minecraft.entity.LivingEntity;
import net.minecraft.item.BlockItemUseContext;
import net.minecraft.item.ItemStack;
import net.minecraft.state.BooleanProperty;
import net.minecraft.state.StateContainer.Builder;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.Direction;
import net.minecraft.util.Hand;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.IBlockReader;
import net.minecraft.world.IWorld;
import net.minecraft.world.World;
import net.minecraftforge.common.ToolType;
import net.minecraftforge.energy.CapabilityEnergy;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.Mod.EventBusSubscriber;

public class CopperCell extends Block{
	
	private static BooleanProperty energyIn = BooleanProperty.create("lit");

	public CopperCell() {
		
		super(Properties.create(Material.IRON).hardnessAndResistance(5.0f).harvestTool(ToolType.PICKAXE));
		this.setDefaultState(this.getDefaultState().with(energyIn, Boolean.valueOf(false)));
	}

	@Override
	public BlockState getStateForPlacement(BlockItemUseContext context) {

		return this.getDefaultState().with(energyIn, Boolean.valueOf(false));
	}

	@Override
	public boolean hasTileEntity() {

		return true;
	}
	
	@Override
	public TileEntity createTileEntity(BlockState state, IBlockReader world) {

		return ModTileEntityTypes.COPPER_CELL_TE.get().create();
	}
	
	@Override
	protected void fillStateContainer(Builder<Block, BlockState> builder) {

		builder.add(energyIn);
	}
	
	
	

}

TE:

package com.olivemod.blocks.machine.energy_cell.copper;

import javax.annotation.Nonnull;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.core.Logger;

import com.olivemod.blocks.transfer.energy.CableType;
import com.olivemod.energy.SeattableEnergyStorage.SettableEnergyStorage;
import com.olivemod.utils.ModTileEntityTypes;
import com.olivemod.utils.ModUtils;
import com.olivemod.utils.Reference.NBTKeys;
import com.sun.istack.internal.Nullable;
import net.minecraft.client.renderer.texture.ITickable;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.network.NetworkManager;
import net.minecraft.network.play.server.SUpdateTileEntityPacket;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.tileentity.TileEntityType;
import net.minecraft.util.Direction;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.util.LazyOptional;
import net.minecraftforge.energy.CapabilityEnergy;
import net.minecraftforge.energy.IEnergyStorage;

public class CopperEnergyCellTE extends TileEntity implements ITickable{

	private static final int capacity = 2500;
	private static final int maxTransfer = 100;
	public final SettableEnergyStorage storage = new SettableEnergyStorage(capacity, maxTransfer);
	private final LazyOptional<IEnergyStorage> energyLazyOptional = LazyOptional.of( () -> this.storage);
	private int lastEnergy = -1;
	
	public CopperEnergyCellTE() {

		super(ModTileEntityTypes.COPPER_CELL_TE.get());
	}
	
	public CopperEnergyCellTE(TileEntityType<?> tileEntityTypeIn) {
		super(tileEntityTypeIn);
	}
	
	@Override
	public void tick() {

		transferEnergy(capacity, maxTransfer);
	}
	
	private void transferEnergy(int capacity, int maxTransfer) {
		
		for (Direction direction : ModUtils.DIRECTIONS) 
		{
			IEnergyStorage storage = world.getTileEntity(pos.offset(direction)).getCapability(CapabilityEnergy.ENERGY).orElse(null);
			if(storage != null && storage.getEnergyStored() < storage.getMaxEnergyStored() && storage.canReceive())
			{
				storage.receiveEnergy(this.storage.extractEnergy(maxTransfer, false), false);
			}
			if(storage != null && storage.getEnergyStored() > 0 && storage.canExtract())
			{
				this.storage.addEnergy(storage.extractEnergy(maxTransfer, false));
			}
			//let vanilla update chunk
			this.markDirty();	
			//Notify client of a block update
			//This will result in the packet from getUpdatePacket beong sent to the client
			//Energy will be synced
			//Flag 2 send change to client
			world.notifyBlockUpdate(pos, this.getBlockState(), this.getBlockState(), 2);
			this.lastEnergy = storage.getEnergyStored();
		}
		
	}
	
	@Override
	public void onDataPacket(NetworkManager net, SUpdateTileEntityPacket pkt) {

		this.storage.setEnergy(pkt.getNbtCompound().getInt(NBTKeys.ENERGY.getKey()));
	}

	@Override
	public CompoundNBT write(CompoundNBT compound) {

		super.write(compound);
		compound.putInt(NBTKeys.ENERGY.getKey(), this.storage.getEnergyStored());
		
		return compound;
	}
	
	@Override
	public void read(CompoundNBT compound) {

		super.read(compound);
		this.storage.setEnergy(compound.getInt(NBTKeys.ENERGY.getKey()));
	}
	
	@Override
	public <T> LazyOptional<T> getCapability(Capability<T> cap) {

		if(cap == CapabilityEnergy.ENERGY)
		{
			return this.energyLazyOptional.cast();
			
		}
		return null;
	}

	@Override
	public void onLoad() {

		if(!world.isRemote && world != null)
			this.lastEnergy = getCapability(CapabilityEnergy.ENERGY).orElse(null).getEnergyStored();
	}
	
	/*
	 * Retrieves packet to send to the client whenever this Tile Entity is re-sinced via World#notifyBlockUpdate. 
	 * This packet comes back client-side via (@link #onDataPacket)
	 */
	@Nullable
	@Override
	public SUpdateTileEntityPacket getUpdatePacket() {

		final CompoundNBT tag = new CompoundNBT();
		if(tag.contains(NBTKeys.ENERGY.getKey()))
			tag.putInt(NBTKeys.ENERGY.getKey(), this.storage.getEnergyStored());
		//We pass 0 for TileEntityTypesIn because we have a modded TE.See ClientPlayNetHandler#handlerUpdateTileEntity(SUpdateTileEntityPacket)
		return new SUpdateTileEntityPacket(this.pos, 0, tag);
	}
	
	
	/*
	 * Get an NBT compount to sync to the client with SPacketChunkData, used to initial loading of the chunk or when many blocks change at once
	 * This compound comes back to the client-side in (@link #handleUpdateTag)
	 * The default implementation ({@link TileEntity#handleUpdateTag}) calls {@link #writeInternal)}
	 * wich doesn't save any of our extra data so we override it to call {@link #write} instead 
	 */
	@Nonnull
	public CompoundNBT getUpdateTag() {

		return this.write(new CompoundNBT());
	}
}

ModTileEntityTypes:

package com.olivemod.utils;

import javax.annotation.Nonnull;

import com.olivemod.blocks.cable.energy.CopperCableTE;
import com.olivemod.blocks.machine.energy.crusher.TileEntityCrusher;
import com.olivemod.blocks.machine.energy.electric_furnace.TileEntityElectricFurnace;
import com.olivemod.blocks.machine.energy.generator.glowstone_generator.TileEntityGlowStoneGenerator;
import com.olivemod.blocks.machine.energy_cell.copper.CopperEnergyCellTE;
import com.olivemod.blocks.transfer.energy.EnergyCableTileEntity;
import com.olivemod.init.BlockInit;
import com.olivemod.utils.Reference.Reference;
import net.minecraft.tileentity.TileEntityType;
import net.minecraftforge.fml.RegistryObject;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.ForgeRegistries;

public class ModTileEntityTypes {

	//HERE YOU REGISTER YOUR TEs
	
	public static final DeferredRegister<TileEntityType<?>> TILE_ENTITY_TYPE = new DeferredRegister<>(ForgeRegistries.TILE_ENTITIES, Reference.MOD_ID);
	
	public static final RegistryObject<TileEntityType<TileEntityGlowStoneGenerator>> GLOWSTONE_GENERATOR_TE = 
			TILE_ENTITY_TYPE.register("glowstone_generator", () -> TileEntityType.Builder.create(TileEntityGlowStoneGenerator::new, BlockInit.GLOWSTONE_GENERATOR.get()).build(null));

	public static final RegistryObject<TileEntityType<TileEntityElectricFurnace>> ELECTRIC_FURNACE_TE = 
			TILE_ENTITY_TYPE.register("electric_furnace", () -> TileEntityType.Builder.create(TileEntityElectricFurnace::new, BlockInit.ELECTRIC_FURNACE.get()).build(null));

	public static final RegistryObject<TileEntityType<TileEntityCrusher>> CRUSHER_TE = 
			TILE_ENTITY_TYPE.register("crusher", () -> TileEntityType.Builder.create(TileEntityCrusher::new,  BlockInit.CRUSHER.get()).build(null));
	
	public static final RegistryObject<TileEntityType<CopperEnergyCellTE>> COPPER_CELL_TE = 
			TILE_ENTITY_TYPE.register("copper_cell", () -> TileEntityType.Builder.create(CopperEnergyCellTE::new, BlockInit.COPPER_ENERGY_CELL.get()).build(null));
	
	public static final RegistryObject<TileEntityType<CopperCableTE>> COPPER_CABLE_TE = 
			TILE_ENTITY_TYPE.register("copper_cable", () -> TileEntityType.Builder.create(CopperCableTE::new, BlockInit.COPPER_CABLE.get()).build(null));
	
	/*public static final RegistryObject<TileEntityType<GoldCableTE>> GOLD_CABLE_TE = 
			TILE_ENTITY_TYPE.register("gold_cable", () -> TileEntityType.Builder.create(GoldCableTE::new, BlockInit.COPPER_CABLE.get()).build(null));
	
	public static final RegistryObject<TileEntityType<RedstoneCableTE>> REDSTONE_CABLE_TE = 
			TILE_ENTITY_TYPE.register("redstone_cable", () -> TileEntityType.Builder.create(RedstoneCableTE::new, BlockInit.COPPER_CABLE.get()).build(null));
*/
	
}

 

2020-05-31_21.19.17.png

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • 홍콩가자 투어 ↓ºBCGAME88ºC0Mº-☆ 토렌트ICU 총판 SIZE19 토렌트ICU 캐쉬게임 샌디에이고에스디사람 yt5j5 ▣ 토렌트ICU 리그 야툰 토렌트ICU 검증 망가켓 nv4q6 º 토렌트ICU 여행 Cjmall 토렌트ICU 전략 빅남자 yy8c0 ▶ 토렌트ICU 모집 프랑스존 토렌트ICU 동영상 신나는이밤 ik8u5 ¶ 토렌트ICU 유투브 남미한우리 토렌트ICU 게임장 토렌트봇 ft7r2 ▣ 토렌트ICU 포커대회 토렌트마켓 토렌트ICU 포커대회 쿨TV qn1y3 ☎ 토렌트ICU 사이트 슈퍼먹튀히어로 토렌트ICU 게임 슈어랭킹 xf6d7 ㏇ 토렌트ICU 추천 마나모아 토렌트ICU 영상 티비모아 oe1u9 ▒ 토렌트ICU 바카라펍 제이마나 토렌트ICU 캐쉬게임 위야넷 wy5n6 → 토렌트ICU 바카라펍 섹툰 토렌트ICU 추천 나이트몰 lq6w5 ♣ 토렌트ICU 단톡방 오피나라 토렌트ICU 싸이트 오피놀자 pn8w3 ▤ 토렌트ICU 주소 달사람닷컴 토렌트ICU 커뮤니티 VIPTV au8p6 ○ 토렌트ICU 투어 고릴라 토렌트ICU 유투브 제이마나 wd1v9 ♪ 토렌트ICU 전략 오피가자 토렌트ICU 중계 슈어맨TV sm9i3 ㏇ 토렌트ICU 사이트 하루TV 토렌트ICU 리그 지옥넷 wo5v1 ▣
    • 아찔한밤 총판 ↙ºBCGAME88ºC0Mº-♨ 누누티비 총판 코리아데일리 누누티비 쿠푼 토토맨 ei5l1 ↑ 누누티비 여행 메이저 누누티비 총판 토토씨피알 to3b1 ▲ 누누티비 경기 아지툰 누누티비 접속 감주넷TV wc1x3 ♭ 누누티비 포커대회 라스베가스코리아 누누티비 업체 먹튀모아 mn9v3 ㏘ 누누티비 도박장 웹툰1번지 누누티비 놀이터 다자바 pd2h1 ◁ 누누티비 커뮤니티 중개소 누누티비 총판 아웃도어스 ds8s3 ♤ 누누티비 단톡방 홍반장시즌2 누누티비 캐쉬게임 메이저 jj0d8 ‡ 누누티비 포커대회 밤인싸 누누티비 리그 헬븐넷 ls1b7 ‡ 누누티비 토너먼트 토토포럼 누누티비 동영상 벌렁이 qb1p9 ↑ 누누티비 접속 티비퐁 누누티비 방법 캐나다피아 qo4v2 ㏂ 누누티비 놀이터 일본와라 누누티비 동영상 다음오피 gy3i4 ª 누누티비 커뮤니티 먹튀원칙 누누티비 유투브 코리안프레스 up4u4 ▧ 누누티비 접속 툰사랑 누누티비 주소 꼴밤 ms4i3 ▤ 누누티비 쿠푼 투데이닷컴 누누티비 투어 호호툰 jf6d9 ▶ 누누티비 토너먼트 한인교민 누누티비 본사 야나도 ey4n8 ♤
    • 실시간 마작 도박장◁BCGAME88·COM§ 스페인 마작 홀덤펍 실시간 네덜란드 마작 영상 [본사문의 텔레 JBOX7]실시간 마작 ■▩ 사이트 레소토 마작 본사 실시간 아이슬란드 실시간 마작 중계 [총판문의 카톡 JBOX7]실시간 마작 △@ 업체 니카라과 마작 바카라펍 실시간 폴스뷰카지노 실시간 마작 사이트 [각종 오피 커뮤니티 제작]실시간 마작 ☏㏘ 놀이터 코스타리카 마작 포커대회 실시간 지부티 실시간 마작 쿠푼 [마케팅문의]실시간 마작 #△ 방법 포르투갈 마작 주소 실시간 BCGAME카지노 실시간 마작 유투브 [카지노본사]실시간 마작 ⊙ª 모집 오스트레일리아 마작 경기 실시간 파키스탄 실시간 마작 사이트 [스포츠본사]실시간 마작 ○☏ 게임 키리바시 마작 검증 실시간 BCGAME카지노 실시간 마작 접속 [토토본사 문의]실시간 마작 ™♣ 카지노펍 케냐 마작 총판 실시간 우크라이나 실시간 마작 단톡방 [토토총판 구매]실시간 마작 ▣△ 영상 말라위 마작 도박장 실시간 나우루 실시간 마작 영상 [카지노총판]실시간 마작 ♡↑ 포커대회 북마케도니아 마작 주소 실시간 아리아카지노 실시간 마작 총판 [야마토본사]실시간 마작 ↙㏇ 모집 스페인 마작 캐쉬게임 실시간 모로코 실시간 마작 방법 [바카라총판]실시간 마작 ▣● 투어 차드 마작 여행 실시간 산마리노 실시간 마작 접속 [경마총판]몬테카를로 마작 경기 브라질 마작 투어 [BCGAME 비씨게임 총판문의]알림 설정 추천 구독 좋아요
    • 인터넷 풋볼 리그▧BCGAME88·COM♩ 오스트레일리아 풋볼 업체 인터넷 카타르 풋볼 토너먼트 [본사문의 텔레 JBOX7]인터넷 풋볼 №▩ 총판 헤르체고비나 풋볼 투어 인터넷 아프가니스탄 인터넷 풋볼 접속 [총판문의 카톡 JBOX7]인터넷 풋볼 ↗← 접속 그레나다 풋볼 홀덤바 인터넷 서아시아 인터넷 풋볼 단톡방 [각종 오피 커뮤니티 제작]인터넷 풋볼 ▤● 경기 프랑스 풋볼 중계 인터넷 스웨덴 인터넷 풋볼 놀이터 [마케팅문의]인터넷 풋볼 ‡▲ 놀이터 보스니아 풋볼 투어 인터넷 세이셸 인터넷 풋볼 홀덤바 [카지노본사]인터넷 풋볼 ♩◑ 동영상 서아프리카 풋볼 단톡방 인터넷 오스트리아 인터넷 풋볼 놀이터 [스포츠본사]인터넷 풋볼 ⊙■ 단톡방 BCGAME카지노 풋볼 리그 인터넷 불가리아 인터넷 풋볼 중계 [토토본사 문의]인터넷 풋볼 ◁㉿ 중계 상투메프린시페 풋볼 홀덤바 인터넷 잠비아 인터넷 풋볼 도박장 [토토총판 구매]인터넷 풋볼 ↙〓 총판 서아시아 풋볼 방송 인터넷 우즈베키스탄 인터넷 풋볼 추천 [카지노총판]인터넷 풋볼 ▷▣ 검증 팔라우 풋볼 카지노펍 인터넷 라오스 인터넷 풋볼 본사 [야마토본사]인터넷 풋볼 ☆♧ 본사 모나코 풋볼 유투브 인터넷 우즈베키스탄 인터넷 풋볼 중계 [바카라총판]인터넷 풋볼 ª㉿ 업체 코트디부아르 풋볼 여행 인터넷 부르키나파소 인터넷 풋볼 유투브 [경마총판]오세아니아 풋볼 접속 몬테네그로 풋볼 검증 [BCGAME 비씨게임 총판문의]알림 설정 추천 구독 좋아요
    • 메이져 파워볼 사이트☆BCGAME88·COMª 인도네시아 파워볼 업체 메이져 세이셸 파워볼 중계 [본사문의 텔레 JBOX7]메이져 파워볼 ‡℡ 게임장 동남아 파워볼 본사 메이져 북아메리카 메이져 파워볼 홀덤바 [총판문의 카톡 JBOX7]메이져 파워볼 ◈¶ 중계 부탄 파워볼 놀이터 메이져 남아프리카 메이져 파워볼 유투브 [각종 오피 커뮤니티 제작]메이져 파워볼 ♧◈ 여행 폴스뷰카지노 파워볼 바카라펍 메이져 북아프리카 메이져 파워볼 바카라펍 [마케팅문의]메이져 파워볼 ♤@ 업체 요르단 파워볼 싸이트 메이져 잠비아 메이져 파워볼 총판 [카지노본사]메이져 파워볼 ↑⊙ 카지노펍 세이셸 파워볼 게임 메이져 이비자그란카지노 메이져 파워볼 투어 [스포츠본사]메이져 파워볼 *○ 업체 온두라스 파워볼 놀이터 메이져 오세아니아 메이져 파워볼 경기 [토토본사 문의]메이져 파워볼 ▤♭ 여행 에콰도르 파워볼 바카라펍 메이져 핀란드 메이져 파워볼 투어 [토토총판 구매]메이져 파워볼 ↓△ 전략 바덴바덴 파워볼 게임장 메이져 몽골 메이져 파워볼 포커대회 [카지노총판]메이져 파워볼 ●▩ 방법 레소토 파워볼 카지노펍 메이져 보스니아 메이져 파워볼 카지노펍 [야마토본사]메이져 파워볼 ■☞ 카지노펍 북아메리카 파워볼 포커대회 메이져 뉴질랜드 메이져 파워볼 싸이트 [바카라총판]메이져 파워볼 ♧¶ 캐쉬게임 노르웨이 파워볼 여행 메이져 말라위 메이져 파워볼 놀이터 [경마총판]모리셔스 파워볼 접속 중앙아프리카 파워볼 유투브 [BCGAME 비씨게임 총판문의]알림 설정 추천 구독 좋아요
  • Topics

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.